From 675a1cb51a89a497b77b346bbcda77b9fac1dfa8 Mon Sep 17 00:00:00 2001 From: David Chang Date: Tue, 21 Sep 2021 12:24:55 +0800 Subject: [PATCH 01/89] :bug: (youtube) forgot to upload utils --- dags/utils/hook_related.py | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 dags/utils/hook_related.py diff --git a/dags/utils/hook_related.py b/dags/utils/hook_related.py new file mode 100644 index 0000000..ed321d2 --- /dev/null +++ b/dags/utils/hook_related.py @@ -0,0 +1,7 @@ +import tenacity + +RETRY_ARGS = { + "stop": tenacity.stop_after_attempt(10), + "wait": tenacity.wait_fixed(120), + "reraise": True, +} From 52a1c369cfe0f77b9972b48ec8d04e2854a84573 Mon Sep 17 00:00:00 2001 From: Grimmer Date: Mon, 4 Oct 2021 21:20:31 +0800 Subject: [PATCH 02/89] Add back uploading post insight to BigQuery --- .../udfs/fb_page_insights_data_uploader.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/dags/ods/fb_page_insights/udfs/fb_page_insights_data_uploader.py b/dags/ods/fb_page_insights/udfs/fb_page_insights_data_uploader.py index f1da58b..cc3c40a 100644 --- a/dags/ods/fb_page_insights/udfs/fb_page_insights_data_uploader.py +++ b/dags/ods/fb_page_insights/udfs/fb_page_insights_data_uploader.py @@ -158,10 +158,11 @@ def download_fb_page_insight_data_upload_to_bigquery(): def download_fb_post_insight_data_upload_to_bigquery(): fb = FBPageInsight() posts_insight: PostsWebInsightData = fb.get_post_default_web_insight() + posts_insight_dict = posts_insight.dict() client = init_bigquery_client() - post_list_rows = posts_insight.dict()[FBPageInsightKey.post_list] + post_list_rows = posts_insight_dict[FBPageInsightKey.post_list] complete_table_id = get_complete_table_id(BigQueryConst.POSTS_TABLE) filtered_post_list_rows = extract_added_posts( client, post_list_rows, complete_table_id @@ -174,6 +175,16 @@ def download_fb_post_insight_data_upload_to_bigquery(): posts_insight.post_json_schema.properties, ) + post_insight_list_rows: List[Dict[str, str]] = posts_insight_dict[ + FBPageInsightKey.insight_list + ] + write_data_to_bigquery( + client, + BigQueryConst.POSTS_INSIGHTS_TABLE, + post_insight_list_rows, + posts_insight.insight_json_schema.properties, + ) + if __name__ == "__main__": download_fb_page_insight_data_upload_to_bigquery() From 7eb1ee5aae2325ce417d256c7cbe51fd0f8fc855 Mon Sep 17 00:00:00 2001 From: Grimmer Date: Mon, 4 Oct 2021 21:29:19 +0800 Subject: [PATCH 03/89] Update python-fb-page-insights-client to apply auto_get_cache_long_lived_token --- poetry.lock | 31 ++++++++++++++++++++++--------- pyproject.toml | 2 +- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1c2e7db..d86b144 100644 --- a/poetry.lock +++ b/poetry.lock @@ -73,7 +73,7 @@ werkzeug = "<1.0.0" "zope.deprecation" = ">=4.0,<5.0" [package.extras] -all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[dataframe,avro,kerberos] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] +all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] all_dbs = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "snakebite (>=2.7.8)", "snakebite-py3"] amazon = ["boto3 (>=1.10,<2.0)"] "apache.atlas" = ["atlasclient (>=0.1.2)"] @@ -83,7 +83,7 @@ amazon = ["boto3 (>=1.10,<2.0)"] "apache.hive" = ["hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)"] "apache.pinot" = ["pinotdb (==0.1.1)"] "apache.presto" = ["presto-python-client (>=0.7.0,<0.8)"] -"apache.webhdfs" = ["hdfs[dataframe,avro,kerberos] (>=2.0.4)"] +"apache.webhdfs" = ["hdfs[avro,dataframe,kerberos] (>=2.0.4)"] async = ["eventlet (>=0.9.7)", "gevent (>=0.13)", "greenlet (>=0.4.9)"] atlas = ["atlasclient (>=0.1.2)"] aws = ["boto3 (>=1.10,<2.0)"] @@ -103,10 +103,10 @@ dask = ["distributed (>=1.17.1,<2)"] databricks = ["requests (>=2.20.0,<3)"] datadog = ["datadog (>=0.14.0)"] devel = ["boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "sphinx (==1.8.5)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "sphinx-copybutton"] -devel_all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[dataframe,avro,kerberos] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] +devel_all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] devel_azure = ["azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "sphinx (==1.8.5)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "sphinx-copybutton"] -devel_ci = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[dataframe,avro,kerberos] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] -devel_hadoop = ["boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "presto-python-client (>=0.7.0,<0.8)", "hdfs[dataframe,avro,kerberos] (>=2.0.4)", "sphinx (==1.8.5)", "snakebite (>=2.7.8)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "snakebite-py3", "sphinx-copybutton"] +devel_ci = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] +devel_hadoop = ["boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "presto-python-client (>=0.7.0,<0.8)", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "sphinx (==1.8.5)", "snakebite (>=2.7.8)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "snakebite-py3", "sphinx-copybutton"] doc = ["sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinx (==1.8.5)", "sphinx (>=2.1.2)", "sphinx-copybutton"] docker = ["docker (>=3.0,<4.0)"] druid = ["pydruid (>=0.4.1,<=0.5.8)"] @@ -153,7 +153,7 @@ ssh = ["paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)"] statsd = ["statsd (>=3.3.0,<4.0)"] vertica = ["vertica-python (>=0.5.1)"] virtualenv = ["virtualenv"] -webhdfs = ["hdfs[dataframe,avro,kerberos] (>=2.0.4)"] +webhdfs = ["hdfs[avro,dataframe,kerberos] (>=2.0.4)"] winrm = ["pywinrm (>=0.4,<1.0)"] [[package]] @@ -1466,12 +1466,13 @@ develop = false pydantic = "^1.8.2" python-dotenv = "^0.18.0" requests = "^2.25.1" +tinydb = "^4.5.1" [package.source] type = "git" url = "https://github.com/pycontw/python-fb-page-insights-client.git" -reference = "4a25b21" -resolved_reference = "4a25b2119f5a28a3d85f1cac6199a2512401d7e1" +reference = "bd221ff" +resolved_reference = "bd221ff33a658e39969970b26e96c6b9c02c1dfc" [[package]] name = "python-nvd3" @@ -1767,6 +1768,14 @@ all = ["tornado (>=4.0)", "twisted"] tornado = ["tornado (>=4.0)"] twisted = ["twisted"] +[[package]] +name = "tinydb" +version = "4.5.2" +description = "TinyDB is a tiny, document oriented database optimized for your happiness :)" +category = "main" +optional = false +python-versions = ">=3.5,<4.0" + [[package]] name = "toml" version = "0.10.2" @@ -1895,7 +1904,7 @@ test = ["zope.testrunner"] [metadata] lock-version = "1.1" python-versions = "^3.7.1" -content-hash = "b8b2c82506d1a6bc2ecbadf0b5464e393e54e52008d502634138177ba5a4898a" +content-hash = "9ed0d469a39e4b49395fa38e41d6d550d3e6da1202a4315172e484be2212e5f6" [metadata.files] alembic = [ @@ -2969,6 +2978,10 @@ text-unidecode = [ thrift = [ {file = "thrift-0.13.0.tar.gz", hash = "sha256:9af1c86bf73433afc6010ed376a6c6aca2b54099cc0d61895f640870a9ae7d89"}, ] +tinydb = [ + {file = "tinydb-4.5.2-py3-none-any.whl", hash = "sha256:3c5e5c72c98db07e707be4e25f9e135a8a14b96938e4745b1b7187fec523ff58"}, + {file = "tinydb-4.5.2.tar.gz", hash = "sha256:7d18b2d0217827c188f177cd23df60e5cd5316a717e836a8e21c8c2488262cf5"}, +] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, diff --git a/pyproject.toml b/pyproject.toml index 2b1004a..ed72b4b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ google-cloud-bigquery = {version = "^2.24.0", python = ">=3.7.1,<3.10"} pandas = "^1.3.2" pyarrow = "^5.0.0" StrEnum = "^0.4.6" -python-fb-page-insights-client = {git = "https://github.com/pycontw/python-fb-page-insights-client.git", rev = "4a25b21"} +python-fb-page-insights-client = {git = "https://github.com/pycontw/python-fb-page-insights-client.git", rev = "bd221ff"} [tool.poetry.dev-dependencies] safety = "^1.9.0" From 98dd556eb5b4318ff40099421e6067bf864b261a Mon Sep 17 00:00:00 2001 From: Juihsiang Chen Date: Sat, 30 Oct 2021 01:13:57 +0800 Subject: [PATCH 04/89] feat: modify job_config & update mapping table 1. the load job to append the data to the table and allowing nullable field addition. 2. update mapping table for 2021 kktix data. --- .../udfs/survey_cake_csv_uploader.py | 1 + contrib/upload-kktix-ticket-csv-to-bigquery.py | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/contrib/survey_cake/udfs/survey_cake_csv_uploader.py b/contrib/survey_cake/udfs/survey_cake_csv_uploader.py index 6bc6c0f..47e46af 100644 --- a/contrib/survey_cake/udfs/survey_cake_csv_uploader.py +++ b/contrib/survey_cake/udfs/survey_cake_csv_uploader.py @@ -87,6 +87,7 @@ def _upload_2_bigquery(self, file_path, table_id): autodetect=True, allow_quoted_newlines=True, write_disposition="WRITE_APPEND", + schema_update_options="ALLOW_FIELD_ADDITION", ) with open(file_path, "rb") as source_file: job = self.client.load_table_from_file( diff --git a/contrib/upload-kktix-ticket-csv-to-bigquery.py b/contrib/upload-kktix-ticket-csv-to-bigquery.py index 201271a..c4ce377 100755 --- a/contrib/upload-kktix-ticket-csv-to-bigquery.py +++ b/contrib/upload-kktix-ticket-csv-to-bigquery.py @@ -162,6 +162,11 @@ "是否願意提供 Email 給贊助商": "email_to_sponsor", # from 2018 reformatted column names "size_of_tshirt_t": "size_of_tshirt", + # from 2021 reformatted column names + "Ive_already_read and_I_accept_the_Privacy_Policy_of_PyCon_TW_2021": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", + "privacy_policy_of_pycon_tw_2021_pycon_tw_2021_httpsbitly2qwl0am": "privacy_policy_of_pycon_tw", + "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw_2021_pycon_tw_2021": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", + } UNWANTED_DATA_TO_UPLOAD = ( @@ -177,6 +182,11 @@ "Epidemic Prevention of PyCon TW 2020", "Privacy Policy of PyCon TW 2020 / PyCon TW 2020 個人資料保護聲明 bit.ly/3eipAut", "Privacy Policy of PyCon TW 2020", + "If you buy the ticket with PySafe, remember to fill out correct address and size of t-shirt for us to send the parcel. if you fill the wrong information to cause missed delivery, we will not resend th", + "請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域)以避免 PySafe 無法送達,如因填寫錯誤致未收到 PySafe,報名人須自行負責,大會恕不再另行補寄", + "購買含 PySafe 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 PySafe 無法送達,如因填寫錯誤致未收到 PySafe,報名人須自行負責,大會恕不再另行補寄" + "Address / 收件地址 EX: 115台北市南港區研究院路二段128號" + ) @@ -190,9 +200,13 @@ def upload_dataframe_to_bigquery( dataset_ref = bigquery.dataset.DatasetReference(project_id, dataset_name) table_ref = bigquery.table.TableReference(dataset_ref, table_name) - + job_config = bigquery.LoadJobConfig() + job_config.write_disposition = bigquery.WriteDisposition.WRITE_APPEND + job_config.schema_update_options = [ + bigquery.SchemaUpdateOption.ALLOW_FIELD_ADDITION + ] # dump the csv into bigquery - job = client.load_table_from_dataframe(df, table_ref) + job = client.load_table_from_dataframe(df, table_ref, job_config=job_config,) job.result() From 90e1758299ea2586130f2f83ff868275c77bc671 Mon Sep 17 00:00:00 2001 From: Juihsiang Chen Date: Wed, 3 Nov 2021 21:26:39 +0800 Subject: [PATCH 05/89] :art: fix mypy "Need type annotation" add explicit type ( mypy ) --- contrib/upload-kktix-ticket-csv-to-bigquery.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/contrib/upload-kktix-ticket-csv-to-bigquery.py b/contrib/upload-kktix-ticket-csv-to-bigquery.py index c4ce377..da557ab 100755 --- a/contrib/upload-kktix-ticket-csv-to-bigquery.py +++ b/contrib/upload-kktix-ticket-csv-to-bigquery.py @@ -4,6 +4,7 @@ import logging import re import unittest +from typing import Dict, Set import pandas as pd from google.cloud import bigquery @@ -67,7 +68,7 @@ "how_did_you_know_pycon_tw", } -CANONICAL_COLUMN_NAMES_2020_EXTRA_RESERVED = {} +CANONICAL_COLUMN_NAMES_2020_EXTRA_RESERVED: Set = set() CANONICAL_COLUMN_NAMES_2019_CORE = { @@ -96,7 +97,7 @@ "unified_business_no", } -CANONICAL_COLUMN_NAMES_2019_EXTRA_INDIVIDUAL = {} +CANONICAL_COLUMN_NAMES_2019_EXTRA_INDIVIDUAL: Set = set() CANONICAL_COLUMN_NAMES_2019_EXTRA_RESERVED = { "invoice_policy", @@ -129,7 +130,7 @@ "unified_business_no", } -CANONICAL_COLUMN_NAMES_2018_EXTRA_INDIVIDUAL = {} +CANONICAL_COLUMN_NAMES_2018_EXTRA_INDIVIDUAL: Set = set() CANONICAL_COLUMN_NAMES_2018_EXTRA_RESERVED = { "invoiced_company_name", @@ -166,7 +167,6 @@ "Ive_already_read and_I_accept_the_Privacy_Policy_of_PyCon_TW_2021": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", "privacy_policy_of_pycon_tw_2021_pycon_tw_2021_httpsbitly2qwl0am": "privacy_policy_of_pycon_tw", "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw_2021_pycon_tw_2021": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", - } UNWANTED_DATA_TO_UPLOAD = ( @@ -184,9 +184,8 @@ "Privacy Policy of PyCon TW 2020", "If you buy the ticket with PySafe, remember to fill out correct address and size of t-shirt for us to send the parcel. if you fill the wrong information to cause missed delivery, we will not resend th", "請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域)以避免 PySafe 無法送達,如因填寫錯誤致未收到 PySafe,報名人須自行負責,大會恕不再另行補寄", - "購買含 PySafe 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 PySafe 無法送達,如因填寫錯誤致未收到 PySafe,報名人須自行負責,大會恕不再另行補寄" - "Address / 收件地址 EX: 115台北市南港區研究院路二段128號" - + "購買含 PySafe 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 PySafe 無法送達,如因填寫錯誤致未收到 PySafe,報名人須自行負責,大會恕不再另行補寄", + "Address / 收件地址 EX: 115台北市南港區研究院路二段128號", ) @@ -252,7 +251,7 @@ def get_reformatted_style_columns(columns: dict) -> dict: def find_reformat_none_unique(columns: dict) -> list: # reverse key-value of original dict to be value-key of reverse_dict - reverse_dict = {} + reverse_dict: Dict = {} for key, value in columns.items(): reverse_dict.setdefault(value, set()).add(key) From f0b3bbc43b2b718213635afb2f262915ddc1fdde Mon Sep 17 00:00:00 2001 From: David Chang Date: Sat, 6 Nov 2021 20:13:08 +0800 Subject: [PATCH 06/89] :bug: (surveycake) filter out existing question id --- contrib/README.md | 6 +- .../udfs/survey_cake_csv_uploader.py | 61 +++++++++++++------ 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/contrib/README.md b/contrib/README.md index bee7204..7d9cb04 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -6,5 +6,9 @@ [Demo Video](https://www.loom.com/share/4c494f1d3ce443c6a43ed514c53b70ff) 1. download CSV from survey cake (account: data-strategy-registration-survey-cake@pycon.tw) +2. `. ./.env.sh ` 2. `cd contrib/survey_cake` -3. `python upload-survey-cake-csv-to-bigquery.py --year=<20xx> -c ` \ No newline at end of file +3. `python upload-survey-cake-csv-to-bigquery.py --year=<20xx> -c ` + 1. it would upload data to Bigquery's `test` dataset + 2. If everything looks good, you can `copy` the `fact table` and `dimension table` first + 3. Then run `python upload-survey-cake-csv-to-bigquery.py --year=<20xx> -p`. `-p` stands for `production` \ No newline at end of file diff --git a/contrib/survey_cake/udfs/survey_cake_csv_uploader.py b/contrib/survey_cake/udfs/survey_cake_csv_uploader.py index 47e46af..463b1a4 100644 --- a/contrib/survey_cake/udfs/survey_cake_csv_uploader.py +++ b/contrib/survey_cake/udfs/survey_cake_csv_uploader.py @@ -1,6 +1,7 @@ import csv import os from pathlib import Path +from typing import Dict, List from google.cloud import bigquery @@ -13,7 +14,9 @@ def __init__(self, year: int, filename: str): self.filename = Path(filename) if not bool(os.getenv("AIRFLOW_TEST_MODE")): self.client = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) - + self.existing_question_and_id_dict = self._get_existing_question_and_id() + else: + self.existing_question_and_id_dict = {"placeholder": 1} self.facttable_filepath = ( self.filename.parent / f"{self.filename.stem}_facttable.csv" ) @@ -29,6 +32,16 @@ def year(self): def bigquery_project(self): return os.getenv("BIGQUERY_PROJECT") + def _get_existing_question_and_id(self): + query = """ + SELECT + question, question_id + FROM + dim.dim_questionnaire_questionId_year; + """ + query_job = self.client.query(query) + return {row["question"]: row["question_id"] for row in query_job} + def transform(self): def _export_facttable(header_of_fact_table): with open(self.facttable_filepath, "w") as target: @@ -43,16 +56,34 @@ def _export_dimension_table(question_id_dimension_table): writer = csv.writer(target) writer.writerow(("question_id", "question", "year")) for question_id, question in question_id_dimension_table.items(): - writer.writerow((question_id, question, self.year)) + # need to filter out existing question_id, otherwise we would end up having duplicate question_id in BigQuery + if question not in self.existing_question_and_id_dict.keys(): + writer.writerow((question_id, question, self.year)) + + def _get_question_ids_of_this_year( + header: List, question_id_dimension_table: Dict + ) -> List: + reversed_question_id_dimension_table = { + question: question_id + for question_id, question in question_id_dimension_table.items() + } + return [ + reversed_question_id_dimension_table[column] + for column in header + if column not in self.USELESS_COLUMNS + ] with open(Path(self.filename), "r", encoding="utf-8-sig") as csvfile: rows = csv.reader(csvfile) # skip header - header = next(iter(rows)) + header = [column.strip() for column in next(iter(rows))] question_id_dimension_table = self._generate_question_id_dimension_table( header ) - question_ids = sorted(question_id_dimension_table.keys()) + + question_ids = _get_question_ids_of_this_year( + header, question_id_dimension_table + ) header_of_fact_table = ("ip", "question_id", "answer", "year") rows_of_fact_table = self._transform_raw_data_to_fact_table_format( rows, question_id_dimension_table, question_ids @@ -98,27 +129,23 @@ def _upload_2_bigquery(self, file_path, table_id): table = self.client.get_table(table_id) # Make an API request. print( - f"Loaded {table.num_rows} rows and {len(table.schema)} columns to {table_id}" + f"There's {table.num_rows} rows and {len(table.schema)} columns in {table_id} now!" ) def _generate_question_id_dimension_table(self, header): + max_existing_question_id = int(max(self.existing_question_and_id_dict.values())) question_id_dim_table = {} - for index, column in enumerate(header): + for index, column in enumerate(header, start=max_existing_question_id): if column in self.USELESS_COLUMNS: continue - column = column.strip() - question_id_dim_table[ - index if column != "其他" else self._get_index_of_else_column(index) - ] = column + if column in self.existing_question_and_id_dict: + question_id_dim_table[ + self.existing_question_and_id_dict[column] + ] = column + else: + question_id_dim_table[float(index)] = column return question_id_dim_table - @staticmethod - def _get_index_of_else_column(index): - """ - use 0.1 to represent "其他" - """ - return index - 1 + 0.1 - @staticmethod def _transform_raw_data_to_fact_table_format( rows, question_id_dimension_table, question_ids From 52857cb67ab3a9fde828bc14c78674b41f7de5b6 Mon Sep 17 00:00:00 2001 From: henry92313 Date: Sun, 16 Jan 2022 16:23:42 +0800 Subject: [PATCH 07/89] add new data source, youtube info --- dags/ods/youtube/dags/dag.py | 11 +++++- dags/ods/youtube/sqls/create_table.sql | 14 ++++++- dags/ods/youtube/udfs/youtube_api.py | 55 +++++++++++++++++++++----- 3 files changed, 69 insertions(+), 11 deletions(-) diff --git a/dags/ods/youtube/dags/dag.py b/dags/ods/youtube/dags/dag.py index c120134..053b878 100644 --- a/dags/ods/youtube/dags/dag.py +++ b/dags/ods/youtube/dags/dag.py @@ -36,10 +36,19 @@ SAVE_STATISTICS_DATA_2_BQ = PythonOperator( task_id="SAVE_STATISTICS_DATA_2_BQ", - python_callable=youtube_api.save_statistics_data_2_bq, + python_callable=youtube_api.save_video_data_2_bq, provide_context=True, + op_kwargs={"datatype": "statistics"}, ) CREATE_TABLE_IF_NEEDED >> GET_VIDEO_IDS >> SAVE_STATISTICS_DATA_2_BQ + SAVE_INFO_DATA_2_BQ = PythonOperator( + task_id="SAVE_INFO_DATA_2_BQ", + python_callable=youtube_api.save_video_data_2_bq, + provide_context=True, + op_kwargs={"datatype": "info"}, + ) + GET_VIDEO_IDS >> SAVE_INFO_DATA_2_BQ + if __name__ == "__main__": dag.cli() diff --git a/dags/ods/youtube/sqls/create_table.sql b/dags/ods/youtube/sqls/create_table.sql index 05bb515..6a04dac 100644 --- a/dags/ods/youtube/sqls/create_table.sql +++ b/dags/ods/youtube/sqls/create_table.sql @@ -1,4 +1,4 @@ -CREATE TABLE IF NOT EXISTS `{}` +CREATE TABLE IF NOT EXISTS `{}.ods.ods_youtubeStatistics_videoId_datetime` ( created_at TIMESTAMP NOT NULL, videoId STRING NOT NULL, @@ -9,3 +9,15 @@ CREATE TABLE IF NOT EXISTS `{}` favoriteCount INT64 NOT NULL, commentCount INT64 NOT NULL ); + +CREATE TABLE IF NOT EXISTS `{}.ods.ods_youtubeInfo_videoId_datetime` +( + created_at TIMESTAMP NOT NULL, + videoId STRING NOT NULL, + title STRING NOT NULL, + image_url STRING NOT NULL, + subtitle STRING NOT NULL, + time TIMESTAMP NOT NULL, + url STRING NOT NULL +); + diff --git a/dags/ods/youtube/udfs/youtube_api.py b/dags/ods/youtube/udfs/youtube_api.py index 8e862b4..f03ec75 100644 --- a/dags/ods/youtube/udfs/youtube_api.py +++ b/dags/ods/youtube/udfs/youtube_api.py @@ -7,16 +7,17 @@ from airflow.models import Variable from google.cloud import bigquery from utils.hook_related import RETRY_ARGS +from datetime import datetime # channel id of YouTube is public to everyone, so it's okay to commit this ID into git CHANNEL_ID = "UCHLnNgRnfGYDzPCCH8qGbQw" MAX_RESULTS = 50 -TABLE = f"{os.getenv('BIGQUERY_PROJECT')}.ods.ods_youtubeStatistics_videoId_datetime" +PROJECT = os.getenv('BIGQUERY_PROJECT') def create_table_if_needed(): client = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) - sql = Path("dags/ods/youtube/sqls/create_table.sql").read_text().format(TABLE) + sql = Path("dags/ods/youtube/sqls/create_table.sql").read_text().format(PROJECT) client.query(sql) @@ -53,15 +54,16 @@ def get_video_ids(**context) -> None: task_instance.xcom_push("GET_VIDEO_IDS", video_metadatas) -def save_statistics_data_2_bq(**context): +def save_video_data_2_bq(**context): def _init(): - client = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) + client = bigquery.Client(project=PROJECT) http_conn = HttpHook(method="GET", http_conn_id="youtube") execution_date = context["execution_date"].replace(tzinfo=None) task_instance = context["task_instance"] + datatype = context["datatype"] video_metadatas = task_instance.xcom_pull("GET_VIDEO_IDS", key="GET_VIDEO_IDS") result = [] - return client, http_conn, execution_date, task_instance, video_metadatas, result + return client, http_conn, execution_date, task_instance, datatype, video_metadatas, result def _get_statistics(): for video_metadata in video_metadatas: @@ -89,6 +91,31 @@ def _get_statistics(): ) return result + def _get_info(): + for video_metadata in video_metadatas: + video_id = video_metadata["videoId"] + title = video_metadata["title"] + response_json = http_conn.run_with_advanced_retry( + endpoint=f"/youtube/v3/videos?id={video_id}&key={Variable.get('YOUTUBE_KEY')}&part=snippet", + _retry_args=RETRY_ARGS, + headers={ + "Content-Type": "application/json", + "Cache-Control": "no-cache", + }, + ).json() + result.append( + ( + execution_date, + video_id, + title, + response_json["items"][0]["snippet"]["thumbnails"]["default"]["url"], + response_json["items"][0]["description"], + datetime.strptime(response_json["items"][0]["publishedAt"], '%Y-%m-%dT%H:%M:%SZ'), + f"https://www.youtube.com/watch?v={response_json["items"][0]["id"]}", + ) + ) + return result + def _transform_to_pandas_dataframe(result): df = pd.DataFrame( result, @@ -105,11 +132,21 @@ def _transform_to_pandas_dataframe(result): ) return df - def _insert_to_bq(df): + def _insert_to_bq(df, tablename): + TABLE = f"PROJECT.{tablename}" job = client.load_table_from_dataframe(df, TABLE) job.result() - client, http_conn, execution_date, task_instance, video_metadatas, result = _init() - result = _get_statistics() + client, http_conn, execution_date, task_instance, datatype, video_metadatas, result = _init() + + if datatype == 'statistics': + tablename = "ods.ods_youtubeStatistics_videoId_datetime" + result = _get_statistics() + elif datatype == 'info': + tablename = "ods.ods_youtubeInfo_videoId_datetime" + result = _get_info() + else: + raise RuntimeError(f"Unsupported datatype: {datatype}") + df = _transform_to_pandas_dataframe(result) - _insert_to_bq(df) + _insert_to_bq(df, tablename) From e0274913fe2adc37690294f410e52dd0f6ac443b Mon Sep 17 00:00:00 2001 From: David Chang Date: Sun, 16 Jan 2022 17:11:34 +0800 Subject: [PATCH 08/89] (youtube): remove dislikeCount since it's been deprecated --- dags/ods/youtube/udfs/youtube_api.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dags/ods/youtube/udfs/youtube_api.py b/dags/ods/youtube/udfs/youtube_api.py index 8e862b4..627f183 100644 --- a/dags/ods/youtube/udfs/youtube_api.py +++ b/dags/ods/youtube/udfs/youtube_api.py @@ -75,6 +75,7 @@ def _get_statistics(): "Cache-Control": "no-cache", }, ).json() + print(response_json["items"][0]["statistics"].keys()) result.append( ( execution_date, @@ -82,7 +83,7 @@ def _get_statistics(): title, int(response_json["items"][0]["statistics"]["viewCount"]), int(response_json["items"][0]["statistics"]["likeCount"]), - int(response_json["items"][0]["statistics"]["dislikeCount"]), + 0, # dislikeCount field is not available in statistics API since 2021! int(response_json["items"][0]["statistics"]["favoriteCount"]), int(response_json["items"][0]["statistics"]["commentCount"]), ) From 23f1000ca0afda65fd3bacfc13b18c1de35cf23f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sat, 5 Mar 2022 15:36:23 +0800 Subject: [PATCH 09/89] : update readme --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index d6a23cf..65cc7f7 100644 --- a/README.md +++ b/README.md @@ -105,3 +105,8 @@ rows = query_job.result() # Waits for query to finish for row in rows: print(row.diet) ``` + +### Conventions + +* table name convention: + ![img](https://miro.medium.com/max/1400/1*bppuEKMnL9gFnvoRHUO8CQ.png) From d9aeb0712a8d4bb3cb5126ff82157947a31bf9f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sat, 19 Mar 2022 18:10:37 +0800 Subject: [PATCH 10/89] :sparkles: (logs) add a log cleanup DAG in case running out of disk (#69) --- dags/airflow-log-cleanup.py | 253 ++++++++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 dags/airflow-log-cleanup.py diff --git a/dags/airflow-log-cleanup.py b/dags/airflow-log-cleanup.py new file mode 100644 index 0000000..ad15646 --- /dev/null +++ b/dags/airflow-log-cleanup.py @@ -0,0 +1,253 @@ +# flake8: noqa +""" +A maintenance workflow that you can deploy into Airflow to periodically clean +out the task logs to avoid those getting too big. +airflow trigger_dag --conf '[curly-braces]"maxLogAgeInDays":30[curly-braces]' airflow-log-cleanup +--conf options: + maxLogAgeInDays: - Optional +""" +import logging +import os +from datetime import timedelta + +import airflow +import jinja2 +from airflow.configuration import conf +from airflow.models import DAG, Variable +from airflow.operators.bash_operator import BashOperator +from airflow.operators.dummy_operator import DummyOperator + +# airflow-log-cleanup +DAG_ID = os.path.basename(__file__).replace(".pyc", "").replace(".py", "") +START_DATE = airflow.utils.dates.days_ago(1) +try: + BASE_LOG_FOLDER = conf.get("core", "BASE_LOG_FOLDER").rstrip("/") +except Exception: + BASE_LOG_FOLDER = conf.get("logging", "BASE_LOG_FOLDER").rstrip("/") +# How often to Run. @daily - Once a day at Midnight +SCHEDULE_INTERVAL = "@daily" +# Who is listed as the owner of this DAG in the Airflow Web Server +DAG_OWNER_NAME = "operations" +# List of email address to send email alerts to if this job fails +ALERT_EMAIL_ADDRESSES = ["davidtnfsh@gmail.com"] +# Length to retain the log files if not already provided in the conf. If this +# is set to 30, the job will remove those files that are 30 days old or older +DEFAULT_MAX_LOG_AGE_IN_DAYS = Variable.get( + "airflow_log_cleanup__max_log_age_in_days", 30 +) +# Whether the job should delete the logs or not. Included if you want to +# temporarily avoid deleting the logs +ENABLE_DELETE = True +# The number of worker nodes you have in Airflow. Will attempt to run this +# process for however many workers there are so that each worker gets its +# logs cleared. +NUMBER_OF_WORKERS = 1 +DIRECTORIES_TO_DELETE = [BASE_LOG_FOLDER] +ENABLE_DELETE_CHILD_LOG = Variable.get( + "airflow_log_cleanup__enable_delete_child_log", "False" +) +LOG_CLEANUP_PROCESS_LOCK_FILE = "/tmp/airflow_log_cleanup_worker.lock" +logging.info("ENABLE_DELETE_CHILD_LOG " + ENABLE_DELETE_CHILD_LOG) + +if not BASE_LOG_FOLDER or BASE_LOG_FOLDER.strip() == "": + raise ValueError( + "BASE_LOG_FOLDER variable is empty in airflow.cfg. It can be found " + "under the [core] (<2.0.0) section or [logging] (>=2.0.0) in the cfg file. " + "Kindly provide an appropriate directory path." + ) + +if ENABLE_DELETE_CHILD_LOG.lower() == "true": + try: + CHILD_PROCESS_LOG_DIRECTORY = conf.get( + "scheduler", "CHILD_PROCESS_LOG_DIRECTORY" + ) + if CHILD_PROCESS_LOG_DIRECTORY != " ": + DIRECTORIES_TO_DELETE.append(CHILD_PROCESS_LOG_DIRECTORY) + except Exception as e: + logging.exception( + "Could not obtain CHILD_PROCESS_LOG_DIRECTORY from " + + "Airflow Configurations: " + + str(e) + ) + +default_args = { + "owner": DAG_OWNER_NAME, + "depends_on_past": False, + "email": ALERT_EMAIL_ADDRESSES, + "email_on_failure": True, + "email_on_retry": False, + "start_date": START_DATE, + "retries": 1, + "retry_delay": timedelta(minutes=1), +} + +dag = DAG( + DAG_ID, + default_args=default_args, + schedule_interval=SCHEDULE_INTERVAL, + start_date=START_DATE, + tags=["teamclairvoyant", "airflow-maintenance-dags"], + template_undefined=jinja2.Undefined, +) +if hasattr(dag, "doc_md"): + dag.doc_md = __doc__ +if hasattr(dag, "catchup"): + dag.catchup = False + +start = DummyOperator(task_id="start", dag=dag) + +log_cleanup = ( + """ + +echo "Getting Configurations..." +BASE_LOG_FOLDER="{{params.directory}}" +WORKER_SLEEP_TIME="{{params.sleep_time}}" + +sleep ${WORKER_SLEEP_TIME}s + +MAX_LOG_AGE_IN_DAYS="{{dag_run.conf.maxLogAgeInDays}}" +if [ "${MAX_LOG_AGE_IN_DAYS}" == "" ]; then + echo "maxLogAgeInDays conf variable isn't included. Using Default '""" + + str(DEFAULT_MAX_LOG_AGE_IN_DAYS) + + """'." + MAX_LOG_AGE_IN_DAYS='""" + + str(DEFAULT_MAX_LOG_AGE_IN_DAYS) + + """' +fi +ENABLE_DELETE=""" + + str("true" if ENABLE_DELETE else "false") + + """ +echo "Finished Getting Configurations" +echo "" + +echo "Configurations:" +echo "BASE_LOG_FOLDER: '${BASE_LOG_FOLDER}'" +echo "MAX_LOG_AGE_IN_DAYS: '${MAX_LOG_AGE_IN_DAYS}'" +echo "ENABLE_DELETE: '${ENABLE_DELETE}'" + +cleanup() { + echo "Executing Find Statement: $1" + FILES_MARKED_FOR_DELETE=`eval $1` + echo "Process will be Deleting the following File(s)/Directory(s):" + echo "${FILES_MARKED_FOR_DELETE}" + echo "Process will be Deleting `echo "${FILES_MARKED_FOR_DELETE}" | \ + grep -v '^$' | wc -l` File(s)/Directory(s)" \ + # "grep -v '^$'" - removes empty lines. + # "wc -l" - Counts the number of lines + echo "" + if [ "${ENABLE_DELETE}" == "true" ]; + then + if [ "${FILES_MARKED_FOR_DELETE}" != "" ]; + then + echo "Executing Delete Statement: $2" + eval $2 + DELETE_STMT_EXIT_CODE=$? + if [ "${DELETE_STMT_EXIT_CODE}" != "0" ]; then + echo "Delete process failed with exit code \ + '${DELETE_STMT_EXIT_CODE}'" + + echo "Removing lock file..." + rm -f """ + + str(LOG_CLEANUP_PROCESS_LOCK_FILE) + + """ + if [ "${REMOVE_LOCK_FILE_EXIT_CODE}" != "0" ]; then + echo "Error removing the lock file. \ + Check file permissions.\ + To re-run the DAG, ensure that the lock file has been \ + deleted (""" + + str(LOG_CLEANUP_PROCESS_LOCK_FILE) + + """)." + exit ${REMOVE_LOCK_FILE_EXIT_CODE} + fi + exit ${DELETE_STMT_EXIT_CODE} + fi + else + echo "WARN: No File(s)/Directory(s) to Delete" + fi + else + echo "WARN: You're opted to skip deleting the File(s)/Directory(s)!!!" + fi +} + + +if [ ! -f """ + + str(LOG_CLEANUP_PROCESS_LOCK_FILE) + + """ ]; then + + echo "Lock file not found on this node! \ + Creating it to prevent collisions..." + touch """ + + str(LOG_CLEANUP_PROCESS_LOCK_FILE) + + """ + CREATE_LOCK_FILE_EXIT_CODE=$? + if [ "${CREATE_LOCK_FILE_EXIT_CODE}" != "0" ]; then + echo "Error creating the lock file. \ + Check if the airflow user can create files under tmp directory. \ + Exiting..." + exit ${CREATE_LOCK_FILE_EXIT_CODE} + fi + + echo "" + echo "Running Cleanup Process..." + + FIND_STATEMENT="find ${BASE_LOG_FOLDER}/*/* -type f -mtime \ + +${MAX_LOG_AGE_IN_DAYS}" + DELETE_STMT="${FIND_STATEMENT} -exec rm -f {} \;" + + cleanup "${FIND_STATEMENT}" "${DELETE_STMT}" + CLEANUP_EXIT_CODE=$? + + FIND_STATEMENT="find ${BASE_LOG_FOLDER}/*/* -type d -empty" + DELETE_STMT="${FIND_STATEMENT} -prune -exec rm -rf {} \;" + + cleanup "${FIND_STATEMENT}" "${DELETE_STMT}" + CLEANUP_EXIT_CODE=$? + + FIND_STATEMENT="find ${BASE_LOG_FOLDER}/* -type d -empty" + DELETE_STMT="${FIND_STATEMENT} -prune -exec rm -rf {} \;" + + cleanup "${FIND_STATEMENT}" "${DELETE_STMT}" + CLEANUP_EXIT_CODE=$? + + echo "Finished Running Cleanup Process" + + echo "Deleting lock file..." + rm -f """ + + str(LOG_CLEANUP_PROCESS_LOCK_FILE) + + """ + REMOVE_LOCK_FILE_EXIT_CODE=$? + if [ "${REMOVE_LOCK_FILE_EXIT_CODE}" != "0" ]; then + echo "Error removing the lock file. Check file permissions. To re-run the DAG, ensure that the lock file has been deleted (""" + + str(LOG_CLEANUP_PROCESS_LOCK_FILE) + + """)." + exit ${REMOVE_LOCK_FILE_EXIT_CODE} + fi + +else + echo "Another task is already deleting logs on this worker node. \ + Skipping it!" + echo "If you believe you're receiving this message in error, kindly check \ + if """ + + str(LOG_CLEANUP_PROCESS_LOCK_FILE) + + """ exists and delete it." + exit 0 +fi + +""" +) + +for log_cleanup_id in range(1, NUMBER_OF_WORKERS + 1): + + for dir_id, directory in enumerate(DIRECTORIES_TO_DELETE): + + log_cleanup_op = BashOperator( + task_id="log_cleanup_worker_num_" + + str(log_cleanup_id) + + "_dir_" + + str(dir_id), + bash_command=log_cleanup, + params={"directory": str(directory), "sleep_time": int(log_cleanup_id) * 3}, + dag=dag, + ) + + log_cleanup_op.set_upstream(start) From 49aaac6b2adf10d2880a093a01610641096046ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sat, 23 Apr 2022 19:41:26 +0800 Subject: [PATCH 11/89] : remove --rm flag (#71) * : remove --rm flag * update doc --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 65cc7f7..63e3e67 100644 --- a/README.md +++ b/README.md @@ -64,11 +64,12 @@ Using Airflow to implement our ETL pipelines 2. Follow the instruction in `.env.` and fill in your secrets. If you are just running the staging instance for development as a sandbox, and not going to access any specific thrid-party service, leave the `.env.staging` as-is should be fine. 3. Start the Airflow server: - * production: `docker run --rm -p 80:8080 --name airflow -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.production davidtnfsh/pycon_etl:prod webserver` - * dev/test: `docker run --rm -p 80:8080 --name airflow -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.staging davidtnfsh/pycon_etl:test webserver` + * production: `docker run -p 80:8080 --name airflow -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.production davidtnfsh/pycon_etl:prod webserver` + * dev/test: `docker run -p 80:8080 --name airflow -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.staging davidtnfsh/pycon_etl:test webserver` * Note the difference are just the env file name and the image cache. -4. Enter the `localhost` or `127.0.0.1` in the address bar in your browser. Open the Airflow Page. - * If Port 80 is already in use. You can select a different host port in the `-p` argument to `docker run`. And enter the `localhost:` in the address bar. +4. Portforward compute instance to your local and then navigate to : + 1. `gcloud beta compute ssh --zone "asia-east1-b" "data-team" --project "pycontw-225217" -- -NL 8080:localhost:8080` + 2. If Port 8080 is already in use. You need to stop the service occupied 8080 port on your local first. ![image](./docs/airflow.png) #### BigQuery (Optional) From 6f01367cabf3fb7bc5e6c5f92dd4e69a3d251d6f Mon Sep 17 00:00:00 2001 From: Ticno Date: Sun, 24 Apr 2022 19:33:06 +0800 Subject: [PATCH 12/89] add windows os version comman --- README.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 63e3e67..15599bb 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Using Airflow to implement our ETL pipelines ### Local environment Docker -> Would need to setup Snowflake Connection manually, find @davidtnfsh if you don't have those secrets +> Find @davidtnfsh if you don't have those secrets. > **⚠ WARNING: About .env** > Please don't use the .env for local development, or it might screw up the production tables. @@ -71,6 +71,33 @@ Using Airflow to implement our ETL pipelines 1. `gcloud beta compute ssh --zone "asia-east1-b" "data-team" --project "pycontw-225217" -- -NL 8080:localhost:8080` 2. If Port 8080 is already in use. You need to stop the service occupied 8080 port on your local first. +![image](./docs/airflow.png) + +### Local environment Docker(windows) +> Do not use Windows Powershell, please use Comman Prompt instead. + +> Find @davidtnfsh if you don't have those secrets. + +> **⚠ WARNING: About .env** +> Please don't use the .env for local development, or it might screw up the production tables. + +1. Build docker image: + * Build a production image (for production): `docker build -t davidtnfsh/pycon_etl:prod --cache-from davidtnfsh/pycon_etl:prod -f Dockerfile .` + If you want to build dev/test image, you also need to build this docker image first because dev/test image is on top of this production image. See below. + * Build dev/test image (for dev/test): `docker build -t davidtnfsh/pycon_etl:test --cache-from davidtnfsh/pycon_etl:prod -f Dockerfile.test .` +2. Fill in some secrets: + 1. `copy .env.template .env.staging` for dev/test. `copy .env.template .env.production` instead if you are going to start a production instance. + 2. Follow the instruction in `.env.` and fill in your secrets. + If you are just running the staging instance for development as a sandbox, and not going to access any specific thrid-party service, leave the `.env.staging` as-is should be fine. +3. Start the Airflow server: + * production: `docker run -p 80:8080 --name airflow -v "/$(pwd)"/dags:/usr/local/airflow/dags -v "/$(pwd)"/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.production davidtnfsh/pycon_etl:prod webserver` + * dev/test: `docker run -p 80:8080 --name airflow -v "/$(pwd)"/dags:/usr/local/airflow/dags -v "/$(pwd)"/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.staging davidtnfsh/pycon_etl:test webserver` + * Note the difference are just the env file name and the image cache. +4. Portforward compute instance to your local and then navigate to : + 1. `gcloud beta compute ssh --zone "asia-east1-b" "data-team" --project "pycontw-225217" -- -N -L 8080:localhost:8080` + 2. If Port 8080 is already in use. You need to stop the service occupied 8080 port on your local first. + + ![image](./docs/airflow.png) #### BigQuery (Optional) 1. Setup the Authentication of GCP: From 0d668d0a46af56b46cced0cbae8ea38a6ec1f796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Mon, 25 Apr 2022 10:27:55 +0800 Subject: [PATCH 13/89] : added flask_OAuthlib and it somehow works (#75) --- poetry.lock | 44 +++++++++++++++++++++++++++++++++++++------- pyproject.toml | 1 + 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index d86b144..015953f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -73,7 +73,7 @@ werkzeug = "<1.0.0" "zope.deprecation" = ">=4.0,<5.0" [package.extras] -all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] +all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[kerberos,avro,dataframe] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] all_dbs = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "snakebite (>=2.7.8)", "snakebite-py3"] amazon = ["boto3 (>=1.10,<2.0)"] "apache.atlas" = ["atlasclient (>=0.1.2)"] @@ -83,7 +83,7 @@ amazon = ["boto3 (>=1.10,<2.0)"] "apache.hive" = ["hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)"] "apache.pinot" = ["pinotdb (==0.1.1)"] "apache.presto" = ["presto-python-client (>=0.7.0,<0.8)"] -"apache.webhdfs" = ["hdfs[avro,dataframe,kerberos] (>=2.0.4)"] +"apache.webhdfs" = ["hdfs[kerberos,avro,dataframe] (>=2.0.4)"] async = ["eventlet (>=0.9.7)", "gevent (>=0.13)", "greenlet (>=0.4.9)"] atlas = ["atlasclient (>=0.1.2)"] aws = ["boto3 (>=1.10,<2.0)"] @@ -103,10 +103,10 @@ dask = ["distributed (>=1.17.1,<2)"] databricks = ["requests (>=2.20.0,<3)"] datadog = ["datadog (>=0.14.0)"] devel = ["boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "sphinx (==1.8.5)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "sphinx-copybutton"] -devel_all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] +devel_all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[kerberos,avro,dataframe] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] devel_azure = ["azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "sphinx (==1.8.5)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "sphinx-copybutton"] -devel_ci = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] -devel_hadoop = ["boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "presto-python-client (>=0.7.0,<0.8)", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "sphinx (==1.8.5)", "snakebite (>=2.7.8)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "snakebite-py3", "sphinx-copybutton"] +devel_ci = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[kerberos,avro,dataframe] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] +devel_hadoop = ["boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "presto-python-client (>=0.7.0,<0.8)", "hdfs[kerberos,avro,dataframe] (>=2.0.4)", "sphinx (==1.8.5)", "snakebite (>=2.7.8)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "snakebite-py3", "sphinx-copybutton"] doc = ["sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinx (==1.8.5)", "sphinx (>=2.1.2)", "sphinx-copybutton"] docker = ["docker (>=3.0,<4.0)"] druid = ["pydruid (>=0.4.1,<=0.5.8)"] @@ -153,7 +153,7 @@ ssh = ["paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)"] statsd = ["statsd (>=3.3.0,<4.0)"] vertica = ["vertica-python (>=0.5.1)"] virtualenv = ["virtualenv"] -webhdfs = ["hdfs[avro,dataframe,kerberos] (>=2.0.4)"] +webhdfs = ["hdfs[kerberos,avro,dataframe] (>=2.0.4)"] winrm = ["pywinrm (>=0.4,<1.0)"] [[package]] @@ -273,6 +273,14 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "cachelib" +version = "0.6.0" +description = "A collection of cache libraries in the same API interface." +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "cachetools" version = "4.2.2" @@ -573,6 +581,20 @@ python-versions = "*" [package.dependencies] Flask = "*" +[[package]] +name = "flask-oauthlib" +version = "0.9.6" +description = "OAuthlib for Flask" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +cachelib = "*" +Flask = "*" +oauthlib = ">=1.1.2,<2.0.3 || >2.0.3,<2.0.4 || >2.0.4,<2.0.5 || >2.0.5,<3.0.0" +requests-oauthlib = ">=0.6.2,<1.2.0" + [[package]] name = "flask-openid" version = "1.2.5" @@ -1904,7 +1926,7 @@ test = ["zope.testrunner"] [metadata] lock-version = "1.1" python-versions = "^3.7.1" -content-hash = "9ed0d469a39e4b49395fa38e41d6d550d3e6da1202a4315172e484be2212e5f6" +content-hash = "b679347e0eac32734d072a02170510b455d4498953b2e1565fb5c8b545e2c322" [metadata.files] alembic = [ @@ -1951,6 +1973,10 @@ cached-property = [ {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, ] +cachelib = [ + {file = "cachelib-0.6.0-py3-none-any.whl", hash = "sha256:6da323fdb16c9f53424a229132646a469b2d046e687fa353b92303910c99bc18"}, + {file = "cachelib-0.6.0.tar.gz", hash = "sha256:0baa926a23924c04ae1354091478b15b3b24e6cf5931dd159452afda5f65babd"}, +] cachetools = [ {file = "cachetools-4.2.2-py3-none-any.whl", hash = "sha256:2cc0b89715337ab6dbba85b5b50effe2b0c74e035d83ee8ed637cf52f12ae001"}, {file = "cachetools-4.2.2.tar.gz", hash = "sha256:61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff"}, @@ -2138,6 +2164,10 @@ flask-jwt-extended = [ flask-login = [ {file = "Flask-Login-0.4.1.tar.gz", hash = "sha256:c815c1ac7b3e35e2081685e389a665f2c74d7e077cb93cecabaea352da4752ec"}, ] +flask-oauthlib = [ + {file = "Flask-OAuthlib-0.9.6.tar.gz", hash = "sha256:5bb79c8a8e670c2eb4cb553dfc3283b6c8d1202f674934676dc173cee94fe39c"}, + {file = "Flask_OAuthlib-0.9.6-py3-none-any.whl", hash = "sha256:a5c3b62959aa1922470a62b6ebf4273b75f1c29561a7eb4a69cde85d45a1d669"}, +] flask-openid = [ {file = "Flask-OpenID-1.2.5.tar.gz", hash = "sha256:5a8ffe1c8c0ad1cc1f5030e1223ea27f8861ee0215a2a58a528cc61379e5ccab"}, ] diff --git a/pyproject.toml b/pyproject.toml index ed72b4b..2297e94 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,7 @@ pandas = "^1.3.2" pyarrow = "^5.0.0" StrEnum = "^0.4.6" python-fb-page-insights-client = {git = "https://github.com/pycontw/python-fb-page-insights-client.git", rev = "bd221ff"} +Flask-OAuthlib = "^0.9.6" [tool.poetry.dev-dependencies] safety = "^1.9.0" From a916016022403e967fffe722b955aa5feb109b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sat, 30 Apr 2022 15:34:12 +0800 Subject: [PATCH 14/89] : just update port num (#74) --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 15599bb..f11dc02 100644 --- a/README.md +++ b/README.md @@ -64,8 +64,8 @@ Using Airflow to implement our ETL pipelines 2. Follow the instruction in `.env.` and fill in your secrets. If you are just running the staging instance for development as a sandbox, and not going to access any specific thrid-party service, leave the `.env.staging` as-is should be fine. 3. Start the Airflow server: - * production: `docker run -p 80:8080 --name airflow -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.production davidtnfsh/pycon_etl:prod webserver` - * dev/test: `docker run -p 80:8080 --name airflow -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.staging davidtnfsh/pycon_etl:test webserver` + * production: `docker run -p 8080:8080 --name airflow -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.production davidtnfsh/pycon_etl:prod webserver` + * dev/test: `docker run -p 8080:8080 --name airflow -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.staging davidtnfsh/pycon_etl:test webserver` * Note the difference are just the env file name and the image cache. 4. Portforward compute instance to your local and then navigate to : 1. `gcloud beta compute ssh --zone "asia-east1-b" "data-team" --project "pycontw-225217" -- -NL 8080:localhost:8080` @@ -90,8 +90,8 @@ Using Airflow to implement our ETL pipelines 2. Follow the instruction in `.env.` and fill in your secrets. If you are just running the staging instance for development as a sandbox, and not going to access any specific thrid-party service, leave the `.env.staging` as-is should be fine. 3. Start the Airflow server: - * production: `docker run -p 80:8080 --name airflow -v "/$(pwd)"/dags:/usr/local/airflow/dags -v "/$(pwd)"/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.production davidtnfsh/pycon_etl:prod webserver` - * dev/test: `docker run -p 80:8080 --name airflow -v "/$(pwd)"/dags:/usr/local/airflow/dags -v "/$(pwd)"/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.staging davidtnfsh/pycon_etl:test webserver` + * production: `docker run -p 8080:8080 --name airflow -v "/$(pwd)"/dags:/usr/local/airflow/dags -v "/$(pwd)"/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.production davidtnfsh/pycon_etl:prod webserver` + * dev/test: `docker run -p 8080:8080 --name airflow -v "/$(pwd)"/dags:/usr/local/airflow/dags -v "/$(pwd)"/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.staging davidtnfsh/pycon_etl:test webserver` * Note the difference are just the env file name and the image cache. 4. Portforward compute instance to your local and then navigate to : 1. `gcloud beta compute ssh --zone "asia-east1-b" "data-team" --project "pycontw-225217" -- -N -L 8080:localhost:8080` From 918392f085877cfc6026928cf87c8bc0580d20bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sat, 30 Apr 2022 15:52:32 +0800 Subject: [PATCH 15/89] : remove auth and in favor of port-forwarding (#76) --- airflow.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airflow.cfg b/airflow.cfg index 4c994d8..0fd77c4 100644 --- a/airflow.cfg +++ b/airflow.cfg @@ -399,8 +399,8 @@ force_log_out_after = 0 # The UI cookie lifetime in days session_lifetime_days = 30 -authenticate = True -auth_backend = airflow.contrib.auth.backends.google_auth +authenticate = False +auth_backend = airflow.api.auth.backend.default [email] email_backend = airflow.utils.email.send_email_smtp From d3e2ca3332396bf5ddd474e565d6f96a79c8644c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sat, 30 Apr 2022 17:48:11 +0800 Subject: [PATCH 16/89] : documented it up in case I forget how to restore airflow (#77) --- README.md | 5 ++++- docs/youtube-connection.png | Bin 0 -> 39093 bytes 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 docs/youtube-connection.png diff --git a/README.md b/README.md index f11dc02..788ac49 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,10 @@ Using Airflow to implement our ETL pipelines 1. `gcloud beta compute ssh --zone "asia-east1-b" "data-team" --project "pycontw-225217" -- -NL 8080:localhost:8080` 2. If Port 8080 is already in use. You need to stop the service occupied 8080 port on your local first. -![image](./docs/airflow.png) + ![image](./docs/airflow.png) +5. Setup Airflow's Variable and Connections: + * Youtube: ![img](docs/youtube-connection.png) + ### Local environment Docker(windows) > Do not use Windows Powershell, please use Comman Prompt instead. diff --git a/docs/youtube-connection.png b/docs/youtube-connection.png new file mode 100644 index 0000000000000000000000000000000000000000..a682e8c7bf0a0553c58f54d256aec472ff0ef7df GIT binary patch literal 39093 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 Date: Thu, 21 Jul 2022 10:44:59 +0800 Subject: [PATCH 17/89] KKTIX ticket ordering data pipeline (#78) * (kktix): finished implementation --- Dockerfile.test | 1 + README.md | 8 +- dags/ods/kktix_ticket_orders/kktix_dag.py | 44 ++++ .../kktix_ticket_orders/sqls/create_table.sql | 6 + .../udfs/bigquery_loader.py | 16 ++ .../kktix_ticket_orders/udfs/discord_bot.py | 55 +++++ .../ods/kktix_ticket_orders/udfs/kktix_api.py | 127 +++++++++++ .../kktix_ticket_orders/udfs/kktix_loader.py | 57 +++++ .../udfs/kktix_transformer.py | 25 +++ tests/kktix_ticket_orders/test_transformer.py | 202 ++++++++++++++++++ 10 files changed, 538 insertions(+), 3 deletions(-) create mode 100644 dags/ods/kktix_ticket_orders/kktix_dag.py create mode 100644 dags/ods/kktix_ticket_orders/sqls/create_table.sql create mode 100644 dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py create mode 100644 dags/ods/kktix_ticket_orders/udfs/discord_bot.py create mode 100644 dags/ods/kktix_ticket_orders/udfs/kktix_api.py create mode 100644 dags/ods/kktix_ticket_orders/udfs/kktix_loader.py create mode 100644 dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py create mode 100644 tests/kktix_ticket_orders/test_transformer.py diff --git a/Dockerfile.test b/Dockerfile.test index 1c25785..d613edb 100644 --- a/Dockerfile.test +++ b/Dockerfile.test @@ -1,4 +1,5 @@ FROM davidtnfsh/pycon_etl:prod ENV AIRFLOW_TEST_MODE=True +ENV FERNET_KEY="uMnRC6ingT/WjPzPiXLvbWTJYzaA3sJdJRVkinceVp4=" USER root COPY airflow.test.cfg airflow.cfg \ No newline at end of file diff --git a/README.md b/README.md index 788ac49..17fcf69 100644 --- a/README.md +++ b/README.md @@ -108,11 +108,13 @@ Using Airflow to implement our ETL pipelines * service-account.json: Please contact @david30907d using email, telegram or discord. No worry about this json if you are just running the sandbox staging instance for development. 2. Give [Toy-Examples](#Toy-Examples) a try -## Deployment +## Deployment & Setting Up Credentials/Env 1. Manually deploy to Google compute instance -2. Fill out `airflow.cfg` with Google OAuth ID and credential (Ref: [setting-up-google-authentication](https://airflow.apache.org/docs/apache-airflow/1.10.1/security.html#setting-up-google-authentication)) - +2. Credentials: + * Airflow: + * Connections: + * kktix_api: `conn_id=kktix_api`, `host` and `extra(header)` are confidential since its KKTIX's private endpoint. Please DM @GTB or data team's teammembers for these credentials. ### CI/CD Please check [.github/workflows](.github/workflows) for details diff --git a/dags/ods/kktix_ticket_orders/kktix_dag.py b/dags/ods/kktix_ticket_orders/kktix_dag.py new file mode 100644 index 0000000..385e9e4 --- /dev/null +++ b/dags/ods/kktix_ticket_orders/kktix_dag.py @@ -0,0 +1,44 @@ +""" +Save view, like count these kind of metrics into BigQuery +""" +from datetime import datetime, timedelta + +from airflow import DAG +from airflow.operators.python_operator import PythonOperator +from ods.kktix_ticket_orders.udfs import bigquery_loader, discord_bot, kktix_api + +DEFAULT_ARGS = { + "owner": "davidtnfsh@gmail.com", + "depends_on_past": False, + "start_date": datetime(2022, 7, 4), + "retries": 2, + "retry_delay": timedelta(minutes=5), + "on_failure_callback": lambda x: "Need to send notification to Discord!", +} +dag = DAG( + "KKTIX_TICKET_ORDERS", + default_args=DEFAULT_ARGS, + schedule_interval="*/5 * * * *", + max_active_runs=1, + catchup=True, +) +with dag: + CREATE_TABLE_IF_NEEDED = PythonOperator( + task_id="CREATE_TABLE_IF_NEEDED", + python_callable=bigquery_loader.create_table_if_needed, + ) + + GET_ATTENDEE_INFOS = PythonOperator( + task_id="GET_ATTENDEE_INFOS", + python_callable=kktix_api.main, + provide_context=True, + ) + + SEND_MSG_TO_DISCORD = PythonOperator( + task_id="LOAD_TO_DISCORD", python_callable=discord_bot.send, + ) + + CREATE_TABLE_IF_NEEDED >> GET_ATTENDEE_INFOS >> SEND_MSG_TO_DISCORD + +if __name__ == "__main__": + dag.cli() diff --git a/dags/ods/kktix_ticket_orders/sqls/create_table.sql b/dags/ods/kktix_ticket_orders/sqls/create_table.sql new file mode 100644 index 0000000..7992015 --- /dev/null +++ b/dags/ods/kktix_ticket_orders/sqls/create_table.sql @@ -0,0 +1,6 @@ +CREATE TABLE IF NOT EXISTS `{}` +( + ID INT64 NOT NULL, + NAME STRING NOT NULL, + ATTENDEE_INFOS STRING NOT NULL +); diff --git a/dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py b/dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py new file mode 100644 index 0000000..f4bbf4a --- /dev/null +++ b/dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py @@ -0,0 +1,16 @@ +import os +from pathlib import Path + +from google.cloud import bigquery + +TABLE = f"{os.getenv('BIGQUERY_PROJECT')}.ods.ods_kktix_attendeeId_datetime" + + +def create_table_if_needed() -> None: + client = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) + sql = ( + Path("dags/ods/kktix_ticket_orders/sqls/create_table.sql") + .read_text() + .format(TABLE) + ) + client.query(sql) diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py new file mode 100644 index 0000000..7d03d4f --- /dev/null +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -0,0 +1,55 @@ +import json +import os +from typing import Dict, Text + +import requests +import tenacity +from airflow.hooks.http_hook import HttpHook +from airflow.models import Variable +from google.cloud import bigquery + +DISCORD_HOOK = HttpHook(http_conn_id="discord_registration", method="POST") +RETRY_ARGS = dict( + wait=tenacity.wait_none(), + stop=tenacity.stop_after_attempt(3), + retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError), +) + + +def send() -> None: + statistics = _get_statistics_from_bigquery() + msg = _compose_discord_msg(statistics) + _send_webhook_to_discord(msg) + + +def _get_statistics_from_bigquery() -> Dict: + client = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) + query_job = client.query( + """ + SELECT + NAME, + REPLACE(JSON_EXTRACT(ATTENDEE_INFOS, '$[0].ticket_name'), '"', '') AS TICKET_NAME, + COUNT(1) AS COUNTS + FROM + `pycontw-225217.ods.ods_kktix_attendeeId_datetime` + GROUP BY + NAME, TICKET_NAME; + """ + ) + result = dict(query_job.result()) + return result + + +def _send_webhook_to_discord(payload: Text) -> None: + DISCORD_HOOK.run_with_advanced_retry( + endpoint=Variable.get("discord_webhook_registration_endpoint"), + _retry_args=RETRY_ARGS, + data=json.dumps({"content": payload}), + ) + + +def _compose_discord_msg(payload: Dict) -> Text: + msg = "Hi 這是今天的票種統計資料,售票期結束後,請 follow README 的 `gcloud` 指令進去把 Airflow DAG 關掉\n" + for key, value in payload.items(): + msg += f"票種:{key}\t{value}張\n" + return msg diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py new file mode 100644 index 0000000..86b773b --- /dev/null +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -0,0 +1,127 @@ +from typing import Callable, Dict, List + +import requests +import tenacity +from airflow.hooks.http_hook import HttpHook +from dateutil.parser import parse +from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer + +SCHEDULE_INTERVAL_SECONDS: int = 300 +HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") +RETRY_ARGS = dict( + wait=tenacity.wait_none(), + stop=tenacity.stop_after_attempt(3), + retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError), +) + + +def main(**context): + """ + ETL pipeline should consists of extract, transform and load + """ + schedule_interval = context["dag"].schedule_interval + # If we change the schedule_interval, we need to update the logic in condition_filter_callback + assert schedule_interval == "*/5 * * * *" + ts_datetime_obj = parse(context["ts"]) + year = ts_datetime_obj.year + timestamp = ts_datetime_obj.timestamp() + event_raw_data_array = _extract(year=year, timestamp=timestamp) + transformed_event_raw_data_array = kktix_transformer.transform(event_raw_data_array) + kktix_loader.load(transformed_event_raw_data_array) + + +def _extract(year: int, timestamp: float) -> List[Dict]: + """ + get data from KKTIX's API + 1. condition_filter_callb: use this callbacl to filter out unwanted event! + 2. right now schedule_interval_seconds is a hardcoded value! + """ + event_raw_data_array: List[Dict] = [] + condition_filter_callback = ( + lambda event: str(year) in event["name"] + and "registration" in event["name"].lower() + ) + event_metadatas = get_event_metadatas(condition_filter_callback) + for event_metadata in event_metadatas: + event_id = event_metadata["id"] + event_raw_data_array.append( + { + "id": event_id, + "name": event_metadata["name"], + "attendee_infos": get_attendee_infos(event_id, timestamp), + } + ) + return event_raw_data_array + + +def get_attendee_infos(event_id: int, timestamp: float) -> List: + """ + it's a public wrapper for people to get attendee infos! + """ + attendance_book_id = _get_attendance_book_id(event_id) + attendee_ids = _get_attendee_ids(event_id, attendance_book_id, timestamp) + attendee_infos = _get_attendee_infos(event_id, attendee_ids, timestamp) + return attendee_infos + + +def get_event_metadatas(condition_filter: Callable) -> List[Dict]: + """ + Fetch all the ongoing events + """ + event_list_resp = HTTP_HOOK.run_with_advanced_retry( + endpoint="/api/v2/hosting_events?only_not_ended_event=true", + _retry_args=RETRY_ARGS, + ).json() + event_metadatas: List[dict] = [] + for event in event_list_resp["data"]: + if condition_filter(event): + event_metadatas.append(event) + return event_metadatas + + +def _get_attendance_book_id(event_id: int) -> int: + """ + Fetch attendance books + """ + attendance_books_resp = HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/api/v2/hosting_events/{event_id}/attendance_books", + _retry_args=RETRY_ARGS, + ).json() + return attendance_books_resp[0]["id"] + + +def _get_attendee_ids( + event_id: int, attendance_book_id: int, timestamp: float +) -> List[int]: + """ + get all attendee ids! + """ + attendee_ids = [] + attendees_resp = HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/api/v2/hosting_events/{event_id}/attendance_books/{attendance_book_id}", + _retry_args=RETRY_ARGS, + ).json() + for signin_status_tuple in attendees_resp["signin_status"]: + attendee_ids.append(signin_status_tuple[0]) + return attendee_ids + + +def _get_attendee_infos( + event_id: int, attendee_ids: List[int], timestamp: float +) -> List: + """ + get attendee infos, e.g. email, phonenumber, name and etc + """ + attendee_infos = [] + for attendee_id in attendee_ids: + attendee_info = HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/api/v2/hosting_events/{event_id}/attendees/{attendee_id}", + _retry_args=RETRY_ARGS, + ).json() + if ( + timestamp + < attendee_info["updated_at"] + < timestamp + SCHEDULE_INTERVAL_SECONDS + ): + attendee_infos.append(attendee_info) + return attendee_infos diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py new file mode 100644 index 0000000..920ad06 --- /dev/null +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py @@ -0,0 +1,57 @@ +import json +import os +from typing import Dict, List + +import pandas as pd +from google.cloud import bigquery +from ods.kktix_ticket_orders.udfs.bigquery_loader import TABLE + +SCHEMA = [ + bigquery.SchemaField("id", "INTEGER", mode="REQUIRED"), + bigquery.SchemaField("name", "STRING", mode="REQUIRED"), + bigquery.SchemaField("attendee_infos", "STRING", mode="REQUIRED"), +] +JOB_CONFIG = bigquery.LoadJobConfig(schema=SCHEMA) + + +def load(event_raw_data_array: List): + """ + load data into bigquery! + """ + # data quality check + for event_raw_data in event_raw_data_array: + if len(event_raw_data["attendee_infos"]) == 0: + print("Nothing to load, skip!") + return + _load_to_bigquery(event_raw_data_array) + _load_to_klaviyo() + + +def _load_to_bigquery(event_raw_data_array: List[Dict]) -> None: + """ + load data to BigQuery's `TABLE` + """ + sanitized_event_raw_data_array = _sanitize_payload(event_raw_data_array) + client = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) + df = pd.DataFrame( + sanitized_event_raw_data_array, columns=["id", "name", "attendee_infos"], + ) + job = client.load_table_from_dataframe(df, TABLE, job_config=JOB_CONFIG) + job.result() + + +def _load_to_klaviyo(): + """ + Henry to implement! + """ + pass + + +def _sanitize_payload(event_raw_data_array) -> List: + """ + BigQuery has some constraints for nested data type + So we put out sanitization/data cleansing logic here! + """ + for event_raw_data in event_raw_data_array: + event_raw_data["attendee_infos"] = json.dumps(event_raw_data["attendee_infos"]) + return event_raw_data_array diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py b/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py new file mode 100644 index 0000000..685d4f5 --- /dev/null +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py @@ -0,0 +1,25 @@ +import hashlib +from typing import Dict, List + + +def transform(event_raw_data_array: List) -> List[Dict]: + """ + de-identify user's email in this block! + """ + for event in event_raw_data_array: + for attendee_info in event["attendee_infos"]: + # search string contains personal information and it's unstructured. Therefore just drop it! + del attendee_info["search_string"] + for index, (key, value) in enumerate(attendee_info["data"]): + for key_should_be_hashed in { + "聯絡人 姓名", + "聯絡人 Email", + "聯絡人 手機", + "Address", + }: + if key_should_be_hashed in key: + hashed_value = hashlib.sha256(value.encode("utf-8")).hexdigest() + attendee_info["data"][index][1] = hashed_value + else: + continue + return event_raw_data_array diff --git a/tests/kktix_ticket_orders/test_transformer.py b/tests/kktix_ticket_orders/test_transformer.py new file mode 100644 index 0000000..599e001 --- /dev/null +++ b/tests/kktix_ticket_orders/test_transformer.py @@ -0,0 +1,202 @@ +""" +test transformer +""" +from dags.ods.kktix_ticket_orders.udfs.kktix_transformer import transform + + +def test_transform() -> None: + fixtures = [ + { + "id": 84296, + "name": "PyCon APAC 2022 Registration: Individual【Online Conference】", + "attendee_infos": [ + { + "id": 84748358, + "ticket_id": 449116, + "ticket_name": "Regular 一般票(with Pyckage)", + "reg_no": 104, + "state": "activated", + "checkin_code": "BC7B", + "qrcode": "bc7bd846f49d2d2e1g833cc92gdg2cf9", + "is_paid": True, + "price": 2600, + "currency": "TWD", + "payment_method": "WEBSITE", + "data": [ + ["Nickname / 暱稱", "Stanley"], + ["Gender / 生理性別", "Male / 男性"], + [ + "If you buy the ticket with PySafe, remember to fill out correct address and size of t-shirt for us to send the parcel. if you fill the wrong information to cause missed delivery, we will not resend th", + "", + ], + [ + "購買含 Pyckage 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 Pyckage 無法送達,如因填寫錯誤致未收到 Pyckage ,報名人須自行負責,大會恕不再另行補寄", + "", + ], + [ + "Address / 收件地址 Ex: No. 128, Sec. 2, Academia Rd., Nangang Dist., Taipei City 115201, Taiwan (R.O.C.) / 115台北市南港區研究院路二段128號", + "新竹市北區天府路一段162號4樓之3", + ], + [ + "Size of T-shirt / T恤尺寸", + "M / 胸寬(F.W.): 49cm / 衣長(C.L.): 70cm", + ], + ["Come From / 國家或地區", "Taiwan 台灣"], + ["Age range / 年齡區間", "36 - 45"], + [ + 'Job Title / 職稱 (If you are a student, fill in "student")', + "全端工程師", + ], + [ + "Company / 服務單位 (For students or teachers, fill in the School + Department Name)", + "雲灣資訊有限公司", + ], + ["Years of Using Python / 使用 Python 多久", "6-10 years"], + [ + "Area of Interest / 興趣領域", + "Web Development, DevOps, Engineering & Mathematics", + ], + [ + "Have you ever attended PyCon TW?/ 是否曾參加 PyCon TW?", + "5-7 times", + ], + [ + "Would you like to receive an email from sponsors?/ 是否願意收到贊助商轉發 Email 訊息?", + "Yes", + ], + [ + "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (ref: https://reurl.cc/ZQ6VY6)", + "No", + ], + [ + "Privacy Policy of PyCon APAC 2022 / PyCon APAC 2022 個人資料保護聲明", + "", + ], + [ + "I’ve already read and I accept the Privacy Policy of PyCon APAC 2022 / 我已閱讀並同意 PyCon APAC 2022 個人資料保護聲明", + "Yes", + ], + [ + "I am fully aware of the Gather Privacy Policy, only participants that are over the age of 18 can access to the venue / 我已被告知因為 gather 政策,需滿18歲以上方能登入會議場地", + "", + ], + ["聯絡人 姓名", "李xx"], + ["聯絡人 Email", "xxx@gmail.com"], + ["聯絡人 手機", "0900000000"], + ["標籤", ""], + ], + "kyc": {}, + "id_number": None, + "search_string": "Stanley\nMale", + "updated_at": 1656921502.5667331, + "ticket_type": "qrcode", + "slot": {}, + "order_no": 127666621, + } + ], + } + ] + ground_truth = [ + { + "id": 84296, + "name": "PyCon APAC 2022 Registration: Individual【Online Conference】", + "attendee_infos": [ + { + "id": 84748358, + "ticket_id": 449116, + "ticket_name": "Regular 一般票(with Pyckage)", + "reg_no": 104, + "state": "activated", + "checkin_code": "BC7B", + "qrcode": "bc7bd846f49d2d2e1g833cc92gdg2cf9", + "is_paid": True, + "price": 2600, + "currency": "TWD", + "payment_method": "WEBSITE", + "data": [ + ["Nickname / 暱稱", "Stanley"], + ["Gender / 生理性別", "Male / 男性"], + [ + "If you buy the ticket with PySafe, remember to fill out correct address and size of t-shirt for us to send the parcel. if you fill the wrong information to cause missed delivery, we will not resend th", + "", + ], + [ + "購買含 Pyckage 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 Pyckage 無法送達,如因填寫錯誤致未收到 Pyckage ,報名人須自行負責,大會恕不再另行補寄", + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + ], + [ + "Address / 收件地址 Ex: No. 128, Sec. 2, Academia Rd., Nangang Dist., Taipei City 115201, Taiwan (R.O.C.) / 115台北市南港區研究院路二段128號", + "36190b79eb7396cfb91e413fecef9707bca87f32012fb01fc38caa236fb053d0", + ], + [ + "Size of T-shirt / T恤尺寸", + "M / 胸寬(F.W.): 49cm / 衣長(C.L.): 70cm", + ], + ["Come From / 國家或地區", "Taiwan 台灣"], + ["Age range / 年齡區間", "36 - 45"], + [ + 'Job Title / 職稱 (If you are a student, fill in "student")', + "全端工程師", + ], + [ + "Company / 服務單位 (For students or teachers, fill in the School + Department Name)", + "雲灣資訊有限公司", + ], + ["Years of Using Python / 使用 Python 多久", "6-10 years"], + [ + "Area of Interest / 興趣領域", + "Web Development, DevOps, Engineering & Mathematics", + ], + [ + "Have you ever attended PyCon TW?/ 是否曾參加 PyCon TW?", + "5-7 times", + ], + [ + "Would you like to receive an email from sponsors?/ 是否願意收到贊助商轉發 Email 訊息?", + "Yes", + ], + [ + "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (ref: https://reurl.cc/ZQ6VY6)", + "No", + ], + [ + "Privacy Policy of PyCon APAC 2022 / PyCon APAC 2022 個人資料保護聲明", + "", + ], + [ + "I’ve already read and I accept the Privacy Policy of PyCon APAC 2022 / 我已閱讀並同意 PyCon APAC 2022 個人資料保護聲明", + "Yes", + ], + [ + "I am fully aware of the Gather Privacy Policy, only participants that are over the age of 18 can access to the venue / 我已被告知因為 gather 政策,需滿18歲以上方能登入會議場地", + "", + ], + [ + "聯絡人 姓名", + "2150750f32ee8dcd40537be8b5bee7c26e893a77cb23049eb3a0ca49a7512791", + ], + [ + "聯絡人 Email", + "26a695fcd9d98ffa1fba78cb5a1eacf0fbe19e40bf9de0cafa0080cdf4c14514", + ], + [ + "聯絡人 手機", + "86f3abfffd2f714a6d611429f82fac9264e8036b0fb490320bfe3e56c494a0e0", + ], + ["標籤", ""], + ], + "kyc": {}, + "id_number": None, + "updated_at": 1656921502.5667331, + "ticket_type": "qrcode", + "slot": {}, + "order_no": 127666621, + } + ], + } + ] + if __debug__: + if transform(fixtures) != ground_truth: + raise AssertionError( + "Transform() might forget to de-identify some columns! e.g. name, email or phone number" + ) From d2c3a15daf838b5ab0a3acce40fc4382bf12128b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sat, 23 Jul 2022 10:46:40 +0800 Subject: [PATCH 18/89] (kktix): split 1 big dag into 2 dags (#79) * (kktix): split 1 big dag into 2 dags --- .gitignore | 3 ++ README.md | 2 +- .../discord_team_registration_bot_dag.py | 31 +++++++++++++++++++ dags/ods/kktix_ticket_orders/kktix_dag.py | 10 ++---- .../ods/kktix_ticket_orders/udfs/kktix_api.py | 8 +++-- 5 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 dags/ods/kktix_ticket_orders/discord_team_registration_bot_dag.py diff --git a/.gitignore b/.gitignore index 176438e..7f64bea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ # project stuff +.env.staging +env +env.sh client_secret_google_search_console* *.csv !dags/fixtures/*.csv diff --git a/README.md b/README.md index 17fcf69..c26b890 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ Using Airflow to implement our ETL pipelines 2. Follow the instruction in `.env.` and fill in your secrets. If you are just running the staging instance for development as a sandbox, and not going to access any specific thrid-party service, leave the `.env.staging` as-is should be fine. 3. Start the Airflow server: - * production: `docker run -p 8080:8080 --name airflow -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.production davidtnfsh/pycon_etl:prod webserver` + * production: `docker run --log-opt max-size=1m -p 8080:8080 --name airflow -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.production davidtnfsh/pycon_etl:prod webserver` * dev/test: `docker run -p 8080:8080 --name airflow -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/service-account.json:/usr/local/airflow/service-account.json --env-file=./.env.staging davidtnfsh/pycon_etl:test webserver` * Note the difference are just the env file name and the image cache. 4. Portforward compute instance to your local and then navigate to : diff --git a/dags/ods/kktix_ticket_orders/discord_team_registration_bot_dag.py b/dags/ods/kktix_ticket_orders/discord_team_registration_bot_dag.py new file mode 100644 index 0000000..d78aa98 --- /dev/null +++ b/dags/ods/kktix_ticket_orders/discord_team_registration_bot_dag.py @@ -0,0 +1,31 @@ +""" +send daily ordering metrics to discord channel, this feature is for team registration +""" +from datetime import datetime, timedelta + +from airflow import DAG +from airflow.operators.python_operator import PythonOperator +from ods.kktix_ticket_orders.udfs import discord_bot + +DEFAULT_ARGS = { + "owner": "davidtnfsh@gmail.com", + "depends_on_past": False, + "start_date": datetime(2022, 7, 4), + "retries": 2, + "retry_delay": timedelta(minutes=5), + "on_failure_callback": lambda x: "Need to send notification to Discord!", +} +dag = DAG( + "KKTIX_DISCORD_BOT_FOR_TEAM_REGISTRATION", + default_args=DEFAULT_ARGS, + schedule_interval="@daily", + max_active_runs=1, + catchup=False, +) +with dag: + SEND_MSG_TO_DISCORD = PythonOperator( + task_id="LOAD_TO_DISCORD", python_callable=discord_bot.send, + ) + +if __name__ == "__main__": + dag.cli() diff --git a/dags/ods/kktix_ticket_orders/kktix_dag.py b/dags/ods/kktix_ticket_orders/kktix_dag.py index 385e9e4..f28c386 100644 --- a/dags/ods/kktix_ticket_orders/kktix_dag.py +++ b/dags/ods/kktix_ticket_orders/kktix_dag.py @@ -1,11 +1,11 @@ """ -Save view, like count these kind of metrics into BigQuery +Ingest KKTIX's data and load them to BigQuery every 5mins """ from datetime import datetime, timedelta from airflow import DAG from airflow.operators.python_operator import PythonOperator -from ods.kktix_ticket_orders.udfs import bigquery_loader, discord_bot, kktix_api +from ods.kktix_ticket_orders.udfs import bigquery_loader, kktix_api DEFAULT_ARGS = { "owner": "davidtnfsh@gmail.com", @@ -34,11 +34,7 @@ provide_context=True, ) - SEND_MSG_TO_DISCORD = PythonOperator( - task_id="LOAD_TO_DISCORD", python_callable=discord_bot.send, - ) - - CREATE_TABLE_IF_NEEDED >> GET_ATTENDEE_INFOS >> SEND_MSG_TO_DISCORD + CREATE_TABLE_IF_NEEDED >> GET_ATTENDEE_INFOS if __name__ == "__main__": dag.cli() diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index 86b773b..0d59df5 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -7,6 +7,8 @@ from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer SCHEDULE_INTERVAL_SECONDS: int = 300 +# TIMESTAMP_FOR_BACKFILL's value is 2022/07/23 +TIMESTAMP_FOR_BACKFILL: int = 1658512921 HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") RETRY_ARGS = dict( wait=tenacity.wait_none(), @@ -21,7 +23,7 @@ def main(**context): """ schedule_interval = context["dag"].schedule_interval # If we change the schedule_interval, we need to update the logic in condition_filter_callback - assert schedule_interval == "*/5 * * * *" + assert schedule_interval == "*/5 * * * *" # nosec ts_datetime_obj = parse(context["ts"]) year = ts_datetime_obj.year timestamp = ts_datetime_obj.timestamp() @@ -122,6 +124,8 @@ def _get_attendee_infos( timestamp < attendee_info["updated_at"] < timestamp + SCHEDULE_INTERVAL_SECONDS - ): + ) or attendee_info["updated_at"] < TIMESTAMP_FOR_BACKFILL: + # WARNING: `attendee_info["updated_at"] < TIMESTAMP_FOR_BACKFILL` would make this pipeline not idempotent + # need to remove it once backfill is finished attendee_infos.append(attendee_info) return attendee_infos From a2fa69b39675ee1a2b1353c5e7aa340baf6f149e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sat, 23 Jul 2022 11:52:44 +0800 Subject: [PATCH 19/89] (kktix): unwrap array of Dict to multiple Dict (#80) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 張泰瑋 --- dags/ods/kktix_ticket_orders/kktix_dag.py | 4 +- .../kktix_ticket_orders/sqls/create_table.sql | 2 +- .../kktix_ticket_orders/udfs/discord_bot.py | 2 +- .../ods/kktix_ticket_orders/udfs/kktix_api.py | 21 +- .../kktix_ticket_orders/udfs/kktix_loader.py | 27 +- .../udfs/kktix_transformer.py | 30 +- tests/kktix_ticket_orders/test_transformer.py | 340 +++++++++--------- 7 files changed, 203 insertions(+), 223 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/kktix_dag.py b/dags/ods/kktix_ticket_orders/kktix_dag.py index f28c386..eed04ed 100644 --- a/dags/ods/kktix_ticket_orders/kktix_dag.py +++ b/dags/ods/kktix_ticket_orders/kktix_dag.py @@ -10,13 +10,13 @@ DEFAULT_ARGS = { "owner": "davidtnfsh@gmail.com", "depends_on_past": False, - "start_date": datetime(2022, 7, 4), + "start_date": datetime(2022, 4, 22), "retries": 2, "retry_delay": timedelta(minutes=5), "on_failure_callback": lambda x: "Need to send notification to Discord!", } dag = DAG( - "KKTIX_TICKET_ORDERS", + "KKTIX_TICKET_ORDERS_V2", default_args=DEFAULT_ARGS, schedule_interval="*/5 * * * *", max_active_runs=1, diff --git a/dags/ods/kktix_ticket_orders/sqls/create_table.sql b/dags/ods/kktix_ticket_orders/sqls/create_table.sql index 7992015..a0a5394 100644 --- a/dags/ods/kktix_ticket_orders/sqls/create_table.sql +++ b/dags/ods/kktix_ticket_orders/sqls/create_table.sql @@ -2,5 +2,5 @@ CREATE TABLE IF NOT EXISTS `{}` ( ID INT64 NOT NULL, NAME STRING NOT NULL, - ATTENDEE_INFOS STRING NOT NULL + ATTENDEE_INFO STRING NOT NULL ); diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index 7d03d4f..b6a203f 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -28,7 +28,7 @@ def _get_statistics_from_bigquery() -> Dict: """ SELECT NAME, - REPLACE(JSON_EXTRACT(ATTENDEE_INFOS, '$[0].ticket_name'), '"', '') AS TICKET_NAME, + REPLACE(JSON_EXTRACT(ATTENDEE_INFO, '$.ticket_name'), '"', '') AS TICKET_NAME, COUNT(1) AS COUNTS FROM `pycontw-225217.ods.ods_kktix_attendeeId_datetime` diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index 0d59df5..a291ed7 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -7,8 +7,6 @@ from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer SCHEDULE_INTERVAL_SECONDS: int = 300 -# TIMESTAMP_FOR_BACKFILL's value is 2022/07/23 -TIMESTAMP_FOR_BACKFILL: int = 1658512921 HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") RETRY_ARGS = dict( wait=tenacity.wait_none(), @@ -46,13 +44,14 @@ def _extract(year: int, timestamp: float) -> List[Dict]: event_metadatas = get_event_metadatas(condition_filter_callback) for event_metadata in event_metadatas: event_id = event_metadata["id"] - event_raw_data_array.append( - { - "id": event_id, - "name": event_metadata["name"], - "attendee_infos": get_attendee_infos(event_id, timestamp), - } - ) + for attendee_info in get_attendee_infos(event_id, timestamp): + event_raw_data_array.append( + { + "id": event_id, + "name": event_metadata["name"], + "attendee_info": attendee_info, + } + ) return event_raw_data_array @@ -124,8 +123,6 @@ def _get_attendee_infos( timestamp < attendee_info["updated_at"] < timestamp + SCHEDULE_INTERVAL_SECONDS - ) or attendee_info["updated_at"] < TIMESTAMP_FOR_BACKFILL: - # WARNING: `attendee_info["updated_at"] < TIMESTAMP_FOR_BACKFILL` would make this pipeline not idempotent - # need to remove it once backfill is finished + ): attendee_infos.append(attendee_info) return attendee_infos diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py index 920ad06..d782244 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py @@ -9,7 +9,7 @@ SCHEMA = [ bigquery.SchemaField("id", "INTEGER", mode="REQUIRED"), bigquery.SchemaField("name", "STRING", mode="REQUIRED"), - bigquery.SchemaField("attendee_infos", "STRING", mode="REQUIRED"), + bigquery.SchemaField("attendee_info", "STRING", mode="REQUIRED"), ] JOB_CONFIG = bigquery.LoadJobConfig(schema=SCHEMA) @@ -19,23 +19,23 @@ def load(event_raw_data_array: List): load data into bigquery! """ # data quality check + if len(event_raw_data_array) == 0: + print("Nothing to load, skip!") + return + payload = [] for event_raw_data in event_raw_data_array: - if len(event_raw_data["attendee_infos"]) == 0: - print("Nothing to load, skip!") - return - _load_to_bigquery(event_raw_data_array) + sanitized_event_raw_data = _sanitize_payload(event_raw_data) + payload.append(sanitized_event_raw_data) + _load_to_bigquery(payload) _load_to_klaviyo() -def _load_to_bigquery(event_raw_data_array: List[Dict]) -> None: +def _load_to_bigquery(payload: List[Dict]) -> None: """ load data to BigQuery's `TABLE` """ - sanitized_event_raw_data_array = _sanitize_payload(event_raw_data_array) client = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) - df = pd.DataFrame( - sanitized_event_raw_data_array, columns=["id", "name", "attendee_infos"], - ) + df = pd.DataFrame(payload, columns=["id", "name", "attendee_info"],) job = client.load_table_from_dataframe(df, TABLE, job_config=JOB_CONFIG) job.result() @@ -47,11 +47,10 @@ def _load_to_klaviyo(): pass -def _sanitize_payload(event_raw_data_array) -> List: +def _sanitize_payload(event_raw_data) -> Dict: """ BigQuery has some constraints for nested data type So we put out sanitization/data cleansing logic here! """ - for event_raw_data in event_raw_data_array: - event_raw_data["attendee_infos"] = json.dumps(event_raw_data["attendee_infos"]) - return event_raw_data_array + event_raw_data["attendee_info"] = json.dumps(event_raw_data["attendee_info"]) + return event_raw_data diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py b/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py index 685d4f5..790617b 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py @@ -7,19 +7,19 @@ def transform(event_raw_data_array: List) -> List[Dict]: de-identify user's email in this block! """ for event in event_raw_data_array: - for attendee_info in event["attendee_infos"]: - # search string contains personal information and it's unstructured. Therefore just drop it! - del attendee_info["search_string"] - for index, (key, value) in enumerate(attendee_info["data"]): - for key_should_be_hashed in { - "聯絡人 姓名", - "聯絡人 Email", - "聯絡人 手機", - "Address", - }: - if key_should_be_hashed in key: - hashed_value = hashlib.sha256(value.encode("utf-8")).hexdigest() - attendee_info["data"][index][1] = hashed_value - else: - continue + attendee_info = event["attendee_info"] + # search string contains personal information and it's unstructured. Therefore just drop it! + del attendee_info["search_string"] + for index, (key, value) in enumerate(attendee_info["data"]): + for key_should_be_hashed in { + "聯絡人 姓名", + "聯絡人 Email", + "聯絡人 手機", + "Address", + }: + if key_should_be_hashed in key: + hashed_value = hashlib.sha256(value.encode("utf-8")).hexdigest() + attendee_info["data"][index][1] = hashed_value + else: + continue return event_raw_data_array diff --git a/tests/kktix_ticket_orders/test_transformer.py b/tests/kktix_ticket_orders/test_transformer.py index 599e001..0cb8391 100644 --- a/tests/kktix_ticket_orders/test_transformer.py +++ b/tests/kktix_ticket_orders/test_transformer.py @@ -9,190 +9,174 @@ def test_transform() -> None: { "id": 84296, "name": "PyCon APAC 2022 Registration: Individual【Online Conference】", - "attendee_infos": [ - { - "id": 84748358, - "ticket_id": 449116, - "ticket_name": "Regular 一般票(with Pyckage)", - "reg_no": 104, - "state": "activated", - "checkin_code": "BC7B", - "qrcode": "bc7bd846f49d2d2e1g833cc92gdg2cf9", - "is_paid": True, - "price": 2600, - "currency": "TWD", - "payment_method": "WEBSITE", - "data": [ - ["Nickname / 暱稱", "Stanley"], - ["Gender / 生理性別", "Male / 男性"], - [ - "If you buy the ticket with PySafe, remember to fill out correct address and size of t-shirt for us to send the parcel. if you fill the wrong information to cause missed delivery, we will not resend th", - "", - ], - [ - "購買含 Pyckage 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 Pyckage 無法送達,如因填寫錯誤致未收到 Pyckage ,報名人須自行負責,大會恕不再另行補寄", - "", - ], - [ - "Address / 收件地址 Ex: No. 128, Sec. 2, Academia Rd., Nangang Dist., Taipei City 115201, Taiwan (R.O.C.) / 115台北市南港區研究院路二段128號", - "新竹市北區天府路一段162號4樓之3", - ], - [ - "Size of T-shirt / T恤尺寸", - "M / 胸寬(F.W.): 49cm / 衣長(C.L.): 70cm", - ], - ["Come From / 國家或地區", "Taiwan 台灣"], - ["Age range / 年齡區間", "36 - 45"], - [ - 'Job Title / 職稱 (If you are a student, fill in "student")', - "全端工程師", - ], - [ - "Company / 服務單位 (For students or teachers, fill in the School + Department Name)", - "雲灣資訊有限公司", - ], - ["Years of Using Python / 使用 Python 多久", "6-10 years"], - [ - "Area of Interest / 興趣領域", - "Web Development, DevOps, Engineering & Mathematics", - ], - [ - "Have you ever attended PyCon TW?/ 是否曾參加 PyCon TW?", - "5-7 times", - ], - [ - "Would you like to receive an email from sponsors?/ 是否願意收到贊助商轉發 Email 訊息?", - "Yes", - ], - [ - "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (ref: https://reurl.cc/ZQ6VY6)", - "No", - ], - [ - "Privacy Policy of PyCon APAC 2022 / PyCon APAC 2022 個人資料保護聲明", - "", - ], - [ - "I’ve already read and I accept the Privacy Policy of PyCon APAC 2022 / 我已閱讀並同意 PyCon APAC 2022 個人資料保護聲明", - "Yes", - ], - [ - "I am fully aware of the Gather Privacy Policy, only participants that are over the age of 18 can access to the venue / 我已被告知因為 gather 政策,需滿18歲以上方能登入會議場地", - "", - ], - ["聯絡人 姓名", "李xx"], - ["聯絡人 Email", "xxx@gmail.com"], - ["聯絡人 手機", "0900000000"], - ["標籤", ""], - ], - "kyc": {}, - "id_number": None, - "search_string": "Stanley\nMale", - "updated_at": 1656921502.5667331, - "ticket_type": "qrcode", - "slot": {}, - "order_no": 127666621, - } - ], + "attendee_info": { + "id": 84748358, + "ticket_id": 449116, + "ticket_name": "Regular 一般票(with Pyckage)", + "reg_no": 104, + "state": "activated", + "checkin_code": "BC7B", + "qrcode": "bc7bd846f49d2d2e1g833cc92gdg2cf9", + "is_paid": True, + "price": 2600, + "currency": "TWD", + "payment_method": "WEBSITE", + "data": [ + ["Nickname / 暱稱", "Stanley"], + ["Gender / 生理性別", "Male / 男性"], + [ + "If you buy the ticket with PySafe, remember to fill out correct address and size of t-shirt for us to send the parcel. if you fill the wrong information to cause missed delivery, we will not resend th", + "", + ], + [ + "購買含 Pyckage 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 Pyckage 無法送達,如因填寫錯誤致未收到 Pyckage ,報名人須自行負責,大會恕不再另行補寄", + "", + ], + [ + "Address / 收件地址 Ex: No. 128, Sec. 2, Academia Rd., Nangang Dist., Taipei City 115201, Taiwan (R.O.C.) / 115台北市南港區研究院路二段128號", + "新竹市北區天府路一段162號4樓之3", + ], + ["Size of T-shirt / T恤尺寸", "M / 胸寬(F.W.): 49cm / 衣長(C.L.): 70cm"], + ["Come From / 國家或地區", "Taiwan 台灣"], + ["Age range / 年齡區間", "36 - 45"], + [ + 'Job Title / 職稱 (If you are a student, fill in "student")', + "全端工程師", + ], + [ + "Company / 服務單位 (For students or teachers, fill in the School + Department Name)", + "雲灣資訊有限公司", + ], + ["Years of Using Python / 使用 Python 多久", "6-10 years"], + [ + "Area of Interest / 興趣領域", + "Web Development, DevOps, Engineering & Mathematics", + ], + ["Have you ever attended PyCon TW?/ 是否曾參加 PyCon TW?", "5-7 times"], + [ + "Would you like to receive an email from sponsors?/ 是否願意收到贊助商轉發 Email 訊息?", + "Yes", + ], + [ + "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (ref: https://reurl.cc/ZQ6VY6)", + "No", + ], + [ + "Privacy Policy of PyCon APAC 2022 / PyCon APAC 2022 個人資料保護聲明", + "", + ], + [ + "I’ve already read and I accept the Privacy Policy of PyCon APAC 2022 / 我已閱讀並同意 PyCon APAC 2022 個人資料保護聲明", + "Yes", + ], + [ + "I am fully aware of the Gather Privacy Policy, only participants that are over the age of 18 can access to the venue / 我已被告知因為 gather 政策,需滿18歲以上方能登入會議場地", + "", + ], + ["聯絡人 姓名", "李xx"], + ["聯絡人 Email", "xxx@gmail.com"], + ["聯絡人 手機", "0900000000"], + ["標籤", ""], + ], + "kyc": {}, + "id_number": None, + "search_string": "Stanley\nMale", + "updated_at": 1656921502.5667331, + "ticket_type": "qrcode", + "slot": {}, + "order_no": 127666621, + }, } ] ground_truth = [ { "id": 84296, "name": "PyCon APAC 2022 Registration: Individual【Online Conference】", - "attendee_infos": [ - { - "id": 84748358, - "ticket_id": 449116, - "ticket_name": "Regular 一般票(with Pyckage)", - "reg_no": 104, - "state": "activated", - "checkin_code": "BC7B", - "qrcode": "bc7bd846f49d2d2e1g833cc92gdg2cf9", - "is_paid": True, - "price": 2600, - "currency": "TWD", - "payment_method": "WEBSITE", - "data": [ - ["Nickname / 暱稱", "Stanley"], - ["Gender / 生理性別", "Male / 男性"], - [ - "If you buy the ticket with PySafe, remember to fill out correct address and size of t-shirt for us to send the parcel. if you fill the wrong information to cause missed delivery, we will not resend th", - "", - ], - [ - "購買含 Pyckage 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 Pyckage 無法送達,如因填寫錯誤致未收到 Pyckage ,報名人須自行負責,大會恕不再另行補寄", - "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - ], - [ - "Address / 收件地址 Ex: No. 128, Sec. 2, Academia Rd., Nangang Dist., Taipei City 115201, Taiwan (R.O.C.) / 115台北市南港區研究院路二段128號", - "36190b79eb7396cfb91e413fecef9707bca87f32012fb01fc38caa236fb053d0", - ], - [ - "Size of T-shirt / T恤尺寸", - "M / 胸寬(F.W.): 49cm / 衣長(C.L.): 70cm", - ], - ["Come From / 國家或地區", "Taiwan 台灣"], - ["Age range / 年齡區間", "36 - 45"], - [ - 'Job Title / 職稱 (If you are a student, fill in "student")', - "全端工程師", - ], - [ - "Company / 服務單位 (For students or teachers, fill in the School + Department Name)", - "雲灣資訊有限公司", - ], - ["Years of Using Python / 使用 Python 多久", "6-10 years"], - [ - "Area of Interest / 興趣領域", - "Web Development, DevOps, Engineering & Mathematics", - ], - [ - "Have you ever attended PyCon TW?/ 是否曾參加 PyCon TW?", - "5-7 times", - ], - [ - "Would you like to receive an email from sponsors?/ 是否願意收到贊助商轉發 Email 訊息?", - "Yes", - ], - [ - "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (ref: https://reurl.cc/ZQ6VY6)", - "No", - ], - [ - "Privacy Policy of PyCon APAC 2022 / PyCon APAC 2022 個人資料保護聲明", - "", - ], - [ - "I’ve already read and I accept the Privacy Policy of PyCon APAC 2022 / 我已閱讀並同意 PyCon APAC 2022 個人資料保護聲明", - "Yes", - ], - [ - "I am fully aware of the Gather Privacy Policy, only participants that are over the age of 18 can access to the venue / 我已被告知因為 gather 政策,需滿18歲以上方能登入會議場地", - "", - ], - [ - "聯絡人 姓名", - "2150750f32ee8dcd40537be8b5bee7c26e893a77cb23049eb3a0ca49a7512791", - ], - [ - "聯絡人 Email", - "26a695fcd9d98ffa1fba78cb5a1eacf0fbe19e40bf9de0cafa0080cdf4c14514", - ], - [ - "聯絡人 手機", - "86f3abfffd2f714a6d611429f82fac9264e8036b0fb490320bfe3e56c494a0e0", - ], - ["標籤", ""], - ], - "kyc": {}, - "id_number": None, - "updated_at": 1656921502.5667331, - "ticket_type": "qrcode", - "slot": {}, - "order_no": 127666621, - } - ], + "attendee_info": { + "id": 84748358, + "ticket_id": 449116, + "ticket_name": "Regular 一般票(with Pyckage)", + "reg_no": 104, + "state": "activated", + "checkin_code": "BC7B", + "qrcode": "bc7bd846f49d2d2e1g833cc92gdg2cf9", + "is_paid": True, + "price": 2600, + "currency": "TWD", + "payment_method": "WEBSITE", + "data": [ + ["Nickname / 暱稱", "Stanley"], + ["Gender / 生理性別", "Male / 男性"], + [ + "If you buy the ticket with PySafe, remember to fill out correct address and size of t-shirt for us to send the parcel. if you fill the wrong information to cause missed delivery, we will not resend th", + "", + ], + [ + "購買含 Pyckage 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 Pyckage 無法送達,如因填寫錯誤致未收到 Pyckage ,報名人須自行負責,大會恕不再另行補寄", + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + ], + [ + "Address / 收件地址 Ex: No. 128, Sec. 2, Academia Rd., Nangang Dist., Taipei City 115201, Taiwan (R.O.C.) / 115台北市南港區研究院路二段128號", + "36190b79eb7396cfb91e413fecef9707bca87f32012fb01fc38caa236fb053d0", + ], + ["Size of T-shirt / T恤尺寸", "M / 胸寬(F.W.): 49cm / 衣長(C.L.): 70cm"], + ["Come From / 國家或地區", "Taiwan 台灣"], + ["Age range / 年齡區間", "36 - 45"], + [ + 'Job Title / 職稱 (If you are a student, fill in "student")', + "全端工程師", + ], + [ + "Company / 服務單位 (For students or teachers, fill in the School + Department Name)", + "雲灣資訊有限公司", + ], + ["Years of Using Python / 使用 Python 多久", "6-10 years"], + [ + "Area of Interest / 興趣領域", + "Web Development, DevOps, Engineering & Mathematics", + ], + ["Have you ever attended PyCon TW?/ 是否曾參加 PyCon TW?", "5-7 times"], + [ + "Would you like to receive an email from sponsors?/ 是否願意收到贊助商轉發 Email 訊息?", + "Yes", + ], + [ + "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (ref: https://reurl.cc/ZQ6VY6)", + "No", + ], + [ + "Privacy Policy of PyCon APAC 2022 / PyCon APAC 2022 個人資料保護聲明", + "", + ], + [ + "I’ve already read and I accept the Privacy Policy of PyCon APAC 2022 / 我已閱讀並同意 PyCon APAC 2022 個人資料保護聲明", + "Yes", + ], + [ + "I am fully aware of the Gather Privacy Policy, only participants that are over the age of 18 can access to the venue / 我已被告知因為 gather 政策,需滿18歲以上方能登入會議場地", + "", + ], + [ + "聯絡人 姓名", + "2150750f32ee8dcd40537be8b5bee7c26e893a77cb23049eb3a0ca49a7512791", + ], + [ + "聯絡人 Email", + "26a695fcd9d98ffa1fba78cb5a1eacf0fbe19e40bf9de0cafa0080cdf4c14514", + ], + [ + "聯絡人 手機", + "86f3abfffd2f714a6d611429f82fac9264e8036b0fb490320bfe3e56c494a0e0", + ], + ["標籤", ""], + ], + "kyc": {}, + "id_number": None, + "updated_at": 1656921502.5667331, + "ticket_type": "qrcode", + "slot": {}, + "order_no": 127666621, + }, } ] if __debug__: From bb8329a53dcebb4e4fab7e6a6a88e07ef50bd8c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sat, 23 Jul 2022 12:12:37 +0800 Subject: [PATCH 20/89] (discord): updated wording (#81) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 張泰瑋 --- dags/ods/kktix_ticket_orders/udfs/discord_bot.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index b6a203f..e005653 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -36,7 +36,7 @@ def _get_statistics_from_bigquery() -> Dict: NAME, TICKET_NAME; """ ) - result = dict(query_job.result()) + result = query_job.result() return result @@ -48,8 +48,8 @@ def _send_webhook_to_discord(payload: Text) -> None: ) -def _compose_discord_msg(payload: Dict) -> Text: - msg = "Hi 這是今天的票種統計資料,售票期結束後,請 follow README 的 `gcloud` 指令進去把 Airflow DAG 關掉\n" - for key, value in payload.items(): - msg += f"票種:{key}\t{value}張\n" +def _compose_discord_msg(payload) -> Text: + msg = "Hi 這是今天的票種統計資料,售票期結束後,請 follow README 的 `gcloud` 指令進去把 Airflow DAG 關掉\n\n" + for name, ticket_name, counts in payload: + msg += f"{name}\t票種:{ticket_name}\t{counts}張\n" return msg From 2c734c30e86e9da3a45d0664b4ed9e97b860a2cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sat, 23 Jul 2022 15:45:15 +0800 Subject: [PATCH 21/89] (kktix): finished backfill on my local so changed the start_date from 4/22 to 7/23 (#82) --- dags/ods/kktix_ticket_orders/kktix_dag.py | 4 ++-- dags/ods/kktix_ticket_orders/udfs/kktix_api.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/kktix_dag.py b/dags/ods/kktix_ticket_orders/kktix_dag.py index eed04ed..c460d3d 100644 --- a/dags/ods/kktix_ticket_orders/kktix_dag.py +++ b/dags/ods/kktix_ticket_orders/kktix_dag.py @@ -10,13 +10,13 @@ DEFAULT_ARGS = { "owner": "davidtnfsh@gmail.com", "depends_on_past": False, - "start_date": datetime(2022, 4, 22), + "start_date": datetime(2022, 7, 23), "retries": 2, "retry_delay": timedelta(minutes=5), "on_failure_callback": lambda x: "Need to send notification to Discord!", } dag = DAG( - "KKTIX_TICKET_ORDERS_V2", + "KKTIX_TICKET_ORDERS_V3", default_args=DEFAULT_ARGS, schedule_interval="*/5 * * * *", max_active_runs=1, diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index a291ed7..817d261 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -25,9 +25,10 @@ def main(**context): ts_datetime_obj = parse(context["ts"]) year = ts_datetime_obj.year timestamp = ts_datetime_obj.timestamp() - event_raw_data_array = _extract(year=year, timestamp=timestamp) + event_raw_data_array = _extract(year=year, timestamp=timestamp,) transformed_event_raw_data_array = kktix_transformer.transform(event_raw_data_array) kktix_loader.load(transformed_event_raw_data_array) + print(f"Loaded {len(transformed_event_raw_data_array)} rows to BigQuery!") def _extract(year: int, timestamp: float) -> List[Dict]: From 5aa68b7c506f14b973e7427ed95c7531215aedd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sun, 24 Jul 2022 15:13:51 +0800 Subject: [PATCH 22/89] (kktix): reformat our discord msg (#83) --- dags/ods/kktix_ticket_orders/udfs/discord_bot.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index e005653..ee70b58 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -1,5 +1,7 @@ import json import os +from collections import defaultdict +from datetime import datetime from typing import Dict, Text import requests @@ -49,7 +51,15 @@ def _send_webhook_to_discord(payload: Text) -> None: def _compose_discord_msg(payload) -> Text: - msg = "Hi 這是今天的票種統計資料,售票期結束後,請 follow README 的 `gcloud` 指令進去把 Airflow DAG 關掉\n\n" + msg = f"Hi 這是今天 {datetime.now().date()} 的票種統計資料,售票期結束後,請 follow README 的 `gcloud` 指令進去把 Airflow DAG 關掉\n\n" + total = 0 + msg_dict = defaultdict(list) for name, ticket_name, counts in payload: - msg += f"{name}\t票種:{ticket_name}\t{counts}張\n" + msg_dict[name].append((ticket_name, counts)) + for name, ticket_name_counts_tuples in msg_dict.items(): + msg += f"{name}\n" + for ticket_name, counts in ticket_name_counts_tuples: + msg += f" * 票種:{ticket_name}\t{counts}張\n" + total += counts + msg += f"總共賣出 {total} 張喔~" return msg From f41e76b44384b16a7b597cda28fd659535494d2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sun, 24 Jul 2022 16:08:12 +0800 Subject: [PATCH 23/89] : added metabase link (#84) --- dags/ods/kktix_ticket_orders/udfs/discord_bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index ee70b58..9240c3a 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -61,5 +61,6 @@ def _compose_discord_msg(payload) -> Text: for ticket_name, counts in ticket_name_counts_tuples: msg += f" * 票種:{ticket_name}\t{counts}張\n" total += counts + msg += "dashboard: https://metabase.pycon.tw/question/142\n" msg += f"總共賣出 {total} 張喔~" return msg From ede7d0b935e723cc24031fe41d24c02efe6d8b9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sun, 24 Jul 2022 16:22:16 +0800 Subject: [PATCH 24/89] (youtube): catch videoId exception (#85) --- dags/ods/youtube/udfs/youtube_api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dags/ods/youtube/udfs/youtube_api.py b/dags/ods/youtube/udfs/youtube_api.py index 627f183..aeb03f1 100644 --- a/dags/ods/youtube/udfs/youtube_api.py +++ b/dags/ods/youtube/udfs/youtube_api.py @@ -48,6 +48,7 @@ def get_video_ids(**context) -> None: video_metadatas += [ {"videoId": item["id"]["videoId"], "title": item["snippet"]["title"]} for item in response_json["items"] + if "videoId" in item["id"] ] task_instance = context["task_instance"] task_instance.xcom_push("GET_VIDEO_IDS", video_metadatas) From 122dde365b9afca2bb3d6c8d47d956ec77324103 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sun, 24 Jul 2022 16:39:32 +0800 Subject: [PATCH 25/89] feat: implement send mail logic into kktix_ticket_orders --- .../kktix_ticket_orders/udfs/kktix_loader.py | 33 +++- .../udfs/klaviyo_mailer.py | 163 ++++++++++++++++++ 2 files changed, 192 insertions(+), 4 deletions(-) create mode 100644 dags/ods/kktix_ticket_orders/udfs/klaviyo_mailer.py diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py index d782244..9ba5ad9 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py @@ -3,7 +3,9 @@ from typing import Dict, List import pandas as pd +from airflow.models import Variable from google.cloud import bigquery +from ods.kktix_ticket_orders.udfs import klaviyo_mailer from ods.kktix_ticket_orders.udfs.bigquery_loader import TABLE SCHEMA = [ @@ -27,7 +29,7 @@ def load(event_raw_data_array: List): sanitized_event_raw_data = _sanitize_payload(event_raw_data) payload.append(sanitized_event_raw_data) _load_to_bigquery(payload) - _load_to_klaviyo() + _load_to_klaviyo(payload) def _load_to_bigquery(payload: List[Dict]) -> None: @@ -40,11 +42,34 @@ def _load_to_bigquery(payload: List[Dict]) -> None: job.result() -def _load_to_klaviyo(): +def _load_to_klaviyo(payload: List[Dict]) -> None: """ - Henry to implement! + Send a notify mail for all participants via third-party service """ - pass + try: + list_id = Variable.get("KLAVIYO_LIST_ID") + campaign_id = Variable.get("KLAVIYO_CAMPAIGN_ID") + except KeyError: + print("Skip klaviyo mailer, 'KLAVIYO_LIST_ID' or 'KLAVIYO_CAMPAIGN_ID' variable not found") + return + + datas = [ + { + "email": item["聯絡人 Email"], + "name": item["聯絡人 姓名"], + } + for item in payload + ] + if not datas: + print("Skip klaviyo mailer, not user profiles") + return + + klaviyo_mailer.main( + list_id=list_id, + campaign_id=campaign_id, + campaign_name="隨買即用", + datas=datas, + ) def _sanitize_payload(event_raw_data) -> Dict: diff --git a/dags/ods/kktix_ticket_orders/udfs/klaviyo_mailer.py b/dags/ods/kktix_ticket_orders/udfs/klaviyo_mailer.py new file mode 100644 index 0000000..3d619d0 --- /dev/null +++ b/dags/ods/kktix_ticket_orders/udfs/klaviyo_mailer.py @@ -0,0 +1,163 @@ +"""Send a mail via Klaviyo + +Requirements: + +1. Create a [Klaviyo List](https://www.klaviyo.com/lists) + +2. Create a template [campaign](https://www.klaviyo.com/campaigns) and set the previous List as target recipients list + +""" +import requests +import tenacity +from datetime import datetime +from typing import List +from airflow.hooks.http_hook import HttpHook +from airflow.models import Variable + + +SCHEDULE_INTERVAL_SECONDS: int = 300 +RETRY_ARGS = dict( + wait=tenacity.wait_none(), + stop=tenacity.stop_after_attempt(3), + retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError), +) + + +def main( + list_id: str, + campaign_id: str, + campaign_name: str, + datas: List[dict], +): + """ + Args: + list_id (str): Klaviyo list id, that will be save your target recipients + campaign_id (str): A existed campaign you want to copy from + campaign_name (str): A new campaign name + datas (List[dict]): Recipient profile, example like below + + [ + { + "email": "foo@example.com", + "name": "Foo", + "property1": "value1", + "property2": "value2", + }, + { + "email": "bar@example.com", + "name": "Bar", + "property1": "value1", + "property2": "value2", + }, + ] + """ + # check list and compaign existed + assert _klaviyo_get_list_info(list_id) + assert _klaviyo_get_campaign_info(campaign_id) + + # update list members + existed_members = _klaviyo_get_list_members(list_id)["records"] + if existed_members: + _klaviyo_remove_list_members( + list_id, + body={ + "emails": list(map(lambda x: x["email"], existed_members)), + }, + ) + + _klaviyo_add_list_members(list_id, body={"profiles": datas}) + new_members = _klaviyo_get_list_members(list_id)["records"] + assert new_members + + # create a new compaign and send mail immediately + campaign_suffix = "{:%Y-%m-%d_%H:%M:%S}".format(datetime.now()) + response = _klaviyo_clone_campaign( + campaign_id, + name=f"{campaign_name}_{campaign_suffix}", + list_id=list_id, + ) + new_campaign_id = response["id"] + _klaviyo_send_campaign(new_campaign_id) + print(f"Send {len(new_members)} Mails") + + +def _klaviyo_get_list_info(list_id: str) -> dict: + HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="GET") + API_KEY = Variable.get('KLAVIYO_KEY') + return HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/v2/list/{list_id}?api_key={API_KEY}", + _retry_args=RETRY_ARGS, + headers={"Accept": "application/json"}, + ).json() + + +def _klaviyo_get_list_members(list_id: str) -> dict: + HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="GET") + API_KEY = Variable.get('KLAVIYO_KEY') + return HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/v2/group/{list_id}/members/all?api_key={API_KEY}", + _retry_args=RETRY_ARGS, + headers={"Accept": "application/json"}, + ).json() + + +def _klaviyo_remove_list_members(list_id: str, body: dict) -> dict: + HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="DELETE") + API_KEY = Variable.get('KLAVIYO_KEY') + return HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/v2/list/{list_id}/members?api_key={API_KEY}", + _retry_args=RETRY_ARGS, + json=body, + headers={"Content-Type": "application/json"}, + ) + + +def _klaviyo_add_list_members(list_id: str, body: dict) -> dict: + HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="POST") + API_KEY = Variable.get('KLAVIYO_KEY') + return HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/v2/list/{list_id}/members?api_key={API_KEY}", + _retry_args=RETRY_ARGS, + json=body, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + } + ).json() + + +def _klaviyo_get_campaign_info(campaign_id: str) -> dict: + HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="GET") + API_KEY = Variable.get('KLAVIYO_KEY') + return HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/v1/campaign/{campaign_id}?api_key={API_KEY}", + _retry_args=RETRY_ARGS, + headers={"Accept": "application/json"}, + ).json() + + +def _klaviyo_clone_campaign(campaign_id: str, name: str, list_id: str) -> dict: + HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="POST") + API_KEY = Variable.get('KLAVIYO_KEY') + return HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/v1/campaign/{campaign_id}/clone?api_key={API_KEY}", + _retry_args=RETRY_ARGS, + data={ + "name": name, + "list_id": list_id, + }, + headers={ + "Accept": "application/json", + "Content-Type": "application/x-www-form-urlencoded", + }, + ).json() + + +def _klaviyo_send_campaign(campaign_id: str) -> dict: + HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="POST") + API_KEY = Variable.get('KLAVIYO_KEY') + return HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/v1/campaign/{campaign_id}/send?api_key={API_KEY}", + _retry_args=RETRY_ARGS, + headers={"Accept": "application/json"}, + ).json() From f1fb92091d7d3e74942845ccb6ec886cf00a1274 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sun, 24 Jul 2022 16:57:56 +0800 Subject: [PATCH 26/89] docs: update README --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index c26b890..6c71a22 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,12 @@ Using Airflow to implement our ETL pipelines * Airflow: * Connections: * kktix_api: `conn_id=kktix_api`, `host` and `extra(header)` are confidential since its KKTIX's private endpoint. Please DM @GTB or data team's teammembers for these credentials. + * klaviyo_api: `conn_id=klaviyo_api`, `host` is https://a.klaviyo.com/api + * Variables: + * KLAVIYO_KEY: Create from https://www.klaviyo.com/account#api-keys-tab + * KLAVIYO_LIST_ID: Create from https://www.klaviyo.com/lists + * KLAVIYO_CAMPAIGN_ID: Create from https://www.klaviyo.com/campaigns + ### CI/CD Please check [.github/workflows](.github/workflows) for details From 737c38922caa3c34a16db792569a663a3b327c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Fri, 29 Jul 2022 09:37:26 +0800 Subject: [PATCH 27/89] (discord): sorted msg for comparison (#87) --- dags/ods/kktix_ticket_orders/udfs/discord_bot.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index 9240c3a..2292fc0 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -56,9 +56,11 @@ def _compose_discord_msg(payload) -> Text: msg_dict = defaultdict(list) for name, ticket_name, counts in payload: msg_dict[name].append((ticket_name, counts)) - for name, ticket_name_counts_tuples in msg_dict.items(): + for name, ticket_name_counts_tuples in sorted(msg_dict.items(), key=lambda x: x[0]): msg += f"{name}\n" - for ticket_name, counts in ticket_name_counts_tuples: + for ticket_name, counts in sorted( + ticket_name_counts_tuples, key=lambda x: x[0] + ): msg += f" * 票種:{ticket_name}\t{counts}張\n" total += counts msg += "dashboard: https://metabase.pycon.tw/question/142\n" From 645980b92274f7297bec58211dfddc8e9aa1e1e1 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sat, 6 Aug 2022 16:35:37 +0800 Subject: [PATCH 28/89] fix: mailer data source --- .../ods/kktix_ticket_orders/udfs/kktix_api.py | 4 +- .../kktix_ticket_orders/udfs/kktix_loader.py | 33 ------- .../udfs/klaviyo_loader.py | 44 ++++++++++ tests/kktix_ticket_orders/conftest.py | 88 +++++++++++++++++++ .../test_klaviyo_loader.py | 23 +++++ tests/kktix_ticket_orders/test_transformer.py | 87 +----------------- 6 files changed, 160 insertions(+), 119 deletions(-) create mode 100644 dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py create mode 100644 tests/kktix_ticket_orders/conftest.py create mode 100644 tests/kktix_ticket_orders/test_klaviyo_loader.py diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index 817d261..5495881 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -4,7 +4,7 @@ import tenacity from airflow.hooks.http_hook import HttpHook from dateutil.parser import parse -from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer +from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer, klaviyo_loader SCHEDULE_INTERVAL_SECONDS: int = 300 HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") @@ -26,6 +26,8 @@ def main(**context): year = ts_datetime_obj.year timestamp = ts_datetime_obj.timestamp() event_raw_data_array = _extract(year=year, timestamp=timestamp,) + # load name and email to mailer before data has been hashed + klaviyo_loader.load(event_raw_data_array) transformed_event_raw_data_array = kktix_transformer.transform(event_raw_data_array) kktix_loader.load(transformed_event_raw_data_array) print(f"Loaded {len(transformed_event_raw_data_array)} rows to BigQuery!") diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py index 9ba5ad9..e95e13f 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py @@ -3,9 +3,7 @@ from typing import Dict, List import pandas as pd -from airflow.models import Variable from google.cloud import bigquery -from ods.kktix_ticket_orders.udfs import klaviyo_mailer from ods.kktix_ticket_orders.udfs.bigquery_loader import TABLE SCHEMA = [ @@ -29,7 +27,6 @@ def load(event_raw_data_array: List): sanitized_event_raw_data = _sanitize_payload(event_raw_data) payload.append(sanitized_event_raw_data) _load_to_bigquery(payload) - _load_to_klaviyo(payload) def _load_to_bigquery(payload: List[Dict]) -> None: @@ -42,36 +39,6 @@ def _load_to_bigquery(payload: List[Dict]) -> None: job.result() -def _load_to_klaviyo(payload: List[Dict]) -> None: - """ - Send a notify mail for all participants via third-party service - """ - try: - list_id = Variable.get("KLAVIYO_LIST_ID") - campaign_id = Variable.get("KLAVIYO_CAMPAIGN_ID") - except KeyError: - print("Skip klaviyo mailer, 'KLAVIYO_LIST_ID' or 'KLAVIYO_CAMPAIGN_ID' variable not found") - return - - datas = [ - { - "email": item["聯絡人 Email"], - "name": item["聯絡人 姓名"], - } - for item in payload - ] - if not datas: - print("Skip klaviyo mailer, not user profiles") - return - - klaviyo_mailer.main( - list_id=list_id, - campaign_id=campaign_id, - campaign_name="隨買即用", - datas=datas, - ) - - def _sanitize_payload(event_raw_data) -> Dict: """ BigQuery has some constraints for nested data type diff --git a/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py b/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py new file mode 100644 index 0000000..f5605de --- /dev/null +++ b/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py @@ -0,0 +1,44 @@ +from typing import List, Iterable +from airflow.models import Variable +from ods.kktix_ticket_orders.udfs import klaviyo_mailer + + +def _load_raw_data(event_raw_data_array: List) -> Iterable: + for event in event_raw_data_array: + attendee_info = event["attendee_info"] + # search string contains personal information and it's unstructured. Therefore just drop it! + del attendee_info["search_string"] + yield { + key: value + for index, (key, value) in enumerate(attendee_info["data"]) + if key in ("聯絡人 Email", "聯絡人 姓名") + } + +def load(event_raw_data_array: List) -> None: + """ + Send a notify mail for all participants via third-party service + """ + try: + list_id = Variable.get("KLAVIYO_LIST_ID") + campaign_id = Variable.get("KLAVIYO_CAMPAIGN_ID") + except KeyError: + print("Skip klaviyo mailer, 'KLAVIYO_LIST_ID' or 'KLAVIYO_CAMPAIGN_ID' variable not found") + return + + datas = [ + { + "email": item["聯絡人 Email"], + "name": item["聯絡人 姓名"], + } + for item in _load_raw_data(event_raw_data_array) + ] + if not datas: + print("Skip klaviyo mailer, not user profiles") + return + + klaviyo_mailer.main( + list_id=list_id, + campaign_id=campaign_id, + campaign_name="隨買即用", + datas=datas, + ) diff --git a/tests/kktix_ticket_orders/conftest.py b/tests/kktix_ticket_orders/conftest.py new file mode 100644 index 0000000..d6d6667 --- /dev/null +++ b/tests/kktix_ticket_orders/conftest.py @@ -0,0 +1,88 @@ +import pytest + + +@pytest.fixture(scope="function") +def kktix_api_data(): + return [ + { + "id": 84296, + "name": "PyCon APAC 2022 Registration: Individual【Online Conference】", + "attendee_info": { + "id": 84748358, + "ticket_id": 449116, + "ticket_name": "Regular 一般票(with Pyckage)", + "reg_no": 104, + "state": "activated", + "checkin_code": "BC7B", + "qrcode": "bc7bd846f49d2d2e1g833cc92gdg2cf9", + "is_paid": True, + "price": 2600, + "currency": "TWD", + "payment_method": "WEBSITE", + "data": [ + ["Nickname / 暱稱", "Stanley"], + ["Gender / 生理性別", "Male / 男性"], + [ + "If you buy the ticket with PySafe, remember to fill out correct address and size of t-shirt for us to send the parcel. if you fill the wrong information to cause missed delivery, we will not resend th", + "", + ], + [ + "購買含 Pyckage 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 Pyckage 無法送達,如因填寫錯誤致未收到 Pyckage ,報名人須自行負責,大會恕不再另行補寄", + "", + ], + [ + "Address / 收件地址 Ex: No. 128, Sec. 2, Academia Rd., Nangang Dist., Taipei City 115201, Taiwan (R.O.C.) / 115台北市南港區研究院路二段128號", + "新竹市北區天府路一段162號4樓之3", + ], + ["Size of T-shirt / T恤尺寸", "M / 胸寬(F.W.): 49cm / 衣長(C.L.): 70cm"], + ["Come From / 國家或地區", "Taiwan 台灣"], + ["Age range / 年齡區間", "36 - 45"], + [ + 'Job Title / 職稱 (If you are a student, fill in "student")', + "全端工程師", + ], + [ + "Company / 服務單位 (For students or teachers, fill in the School + Department Name)", + "雲灣資訊有限公司", + ], + ["Years of Using Python / 使用 Python 多久", "6-10 years"], + [ + "Area of Interest / 興趣領域", + "Web Development, DevOps, Engineering & Mathematics", + ], + ["Have you ever attended PyCon TW?/ 是否曾參加 PyCon TW?", "5-7 times"], + [ + "Would you like to receive an email from sponsors?/ 是否願意收到贊助商轉發 Email 訊息?", + "Yes", + ], + [ + "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (ref: https://reurl.cc/ZQ6VY6)", + "No", + ], + [ + "Privacy Policy of PyCon APAC 2022 / PyCon APAC 2022 個人資料保護聲明", + "", + ], + [ + "I’ve already read and I accept the Privacy Policy of PyCon APAC 2022 / 我已閱讀並同意 PyCon APAC 2022 個人資料保護聲明", + "Yes", + ], + [ + "I am fully aware of the Gather Privacy Policy, only participants that are over the age of 18 can access to the venue / 我已被告知因為 gather 政策,需滿18歲以上方能登入會議場地", + "", + ], + ["聯絡人 姓名", "李xx"], + ["聯絡人 Email", "xxx@gmail.com"], + ["聯絡人 手機", "0900000000"], + ["標籤", ""], + ], + "kyc": {}, + "id_number": None, + "search_string": "Stanley\nMale", + "updated_at": 1656921502.5667331, + "ticket_type": "qrcode", + "slot": {}, + "order_no": 127666621, + }, + } + ] diff --git a/tests/kktix_ticket_orders/test_klaviyo_loader.py b/tests/kktix_ticket_orders/test_klaviyo_loader.py new file mode 100644 index 0000000..9f7ca85 --- /dev/null +++ b/tests/kktix_ticket_orders/test_klaviyo_loader.py @@ -0,0 +1,23 @@ +from unittest.mock import patch +from ods.kktix_ticket_orders.udfs import klaviyo_loader + + +@patch("ods.kktix_ticket_orders.udfs.klaviyo_mailer") +@patch( + "airflow.models.Variable", + return_value={ + "KLAVIYO_LIST_ID": "abc", + "KLAVIYO_CAMPAIGN_ID": "123", + }, +) +def test_klaviyo_loader(variable, mailer, kktix_api_data): + klaviyo_loader.load(kktix_api_data) + mailer.assert_called_once_with( + list_id="abc", + campaign_id="123", + campaign_name="隨買即用", + datas={ + "email": "xxx@gmail.com", + "name": "李xx", + }, + ) diff --git a/tests/kktix_ticket_orders/test_transformer.py b/tests/kktix_ticket_orders/test_transformer.py index 0cb8391..57a46f6 100644 --- a/tests/kktix_ticket_orders/test_transformer.py +++ b/tests/kktix_ticket_orders/test_transformer.py @@ -4,90 +4,7 @@ from dags.ods.kktix_ticket_orders.udfs.kktix_transformer import transform -def test_transform() -> None: - fixtures = [ - { - "id": 84296, - "name": "PyCon APAC 2022 Registration: Individual【Online Conference】", - "attendee_info": { - "id": 84748358, - "ticket_id": 449116, - "ticket_name": "Regular 一般票(with Pyckage)", - "reg_no": 104, - "state": "activated", - "checkin_code": "BC7B", - "qrcode": "bc7bd846f49d2d2e1g833cc92gdg2cf9", - "is_paid": True, - "price": 2600, - "currency": "TWD", - "payment_method": "WEBSITE", - "data": [ - ["Nickname / 暱稱", "Stanley"], - ["Gender / 生理性別", "Male / 男性"], - [ - "If you buy the ticket with PySafe, remember to fill out correct address and size of t-shirt for us to send the parcel. if you fill the wrong information to cause missed delivery, we will not resend th", - "", - ], - [ - "購買含 Pyckage 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 Pyckage 無法送達,如因填寫錯誤致未收到 Pyckage ,報名人須自行負責,大會恕不再另行補寄", - "", - ], - [ - "Address / 收件地址 Ex: No. 128, Sec. 2, Academia Rd., Nangang Dist., Taipei City 115201, Taiwan (R.O.C.) / 115台北市南港區研究院路二段128號", - "新竹市北區天府路一段162號4樓之3", - ], - ["Size of T-shirt / T恤尺寸", "M / 胸寬(F.W.): 49cm / 衣長(C.L.): 70cm"], - ["Come From / 國家或地區", "Taiwan 台灣"], - ["Age range / 年齡區間", "36 - 45"], - [ - 'Job Title / 職稱 (If you are a student, fill in "student")', - "全端工程師", - ], - [ - "Company / 服務單位 (For students or teachers, fill in the School + Department Name)", - "雲灣資訊有限公司", - ], - ["Years of Using Python / 使用 Python 多久", "6-10 years"], - [ - "Area of Interest / 興趣領域", - "Web Development, DevOps, Engineering & Mathematics", - ], - ["Have you ever attended PyCon TW?/ 是否曾參加 PyCon TW?", "5-7 times"], - [ - "Would you like to receive an email from sponsors?/ 是否願意收到贊助商轉發 Email 訊息?", - "Yes", - ], - [ - "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (ref: https://reurl.cc/ZQ6VY6)", - "No", - ], - [ - "Privacy Policy of PyCon APAC 2022 / PyCon APAC 2022 個人資料保護聲明", - "", - ], - [ - "I’ve already read and I accept the Privacy Policy of PyCon APAC 2022 / 我已閱讀並同意 PyCon APAC 2022 個人資料保護聲明", - "Yes", - ], - [ - "I am fully aware of the Gather Privacy Policy, only participants that are over the age of 18 can access to the venue / 我已被告知因為 gather 政策,需滿18歲以上方能登入會議場地", - "", - ], - ["聯絡人 姓名", "李xx"], - ["聯絡人 Email", "xxx@gmail.com"], - ["聯絡人 手機", "0900000000"], - ["標籤", ""], - ], - "kyc": {}, - "id_number": None, - "search_string": "Stanley\nMale", - "updated_at": 1656921502.5667331, - "ticket_type": "qrcode", - "slot": {}, - "order_no": 127666621, - }, - } - ] +def test_transform(kktix_api_data) -> None: ground_truth = [ { "id": 84296, @@ -180,7 +97,7 @@ def test_transform() -> None: } ] if __debug__: - if transform(fixtures) != ground_truth: + if transform(kktix_api_data) != ground_truth: raise AssertionError( "Transform() might forget to de-identify some columns! e.g. name, email or phone number" ) From 192f096ccc63e4d32a2102335f76f9ebf0ddddaa Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sat, 6 Aug 2022 18:00:39 +0800 Subject: [PATCH 29/89] test: klaviyo loader --- tests/{kktix_ticket_orders => }/conftest.py | 0 .../kktix_ticket_orders/test_klaviyo_loader.py | 18 ++++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) rename tests/{kktix_ticket_orders => }/conftest.py (100%) diff --git a/tests/kktix_ticket_orders/conftest.py b/tests/conftest.py similarity index 100% rename from tests/kktix_ticket_orders/conftest.py rename to tests/conftest.py diff --git a/tests/kktix_ticket_orders/test_klaviyo_loader.py b/tests/kktix_ticket_orders/test_klaviyo_loader.py index 9f7ca85..ba6a80d 100644 --- a/tests/kktix_ticket_orders/test_klaviyo_loader.py +++ b/tests/kktix_ticket_orders/test_klaviyo_loader.py @@ -1,14 +1,16 @@ from unittest.mock import patch from ods.kktix_ticket_orders.udfs import klaviyo_loader - -@patch("ods.kktix_ticket_orders.udfs.klaviyo_mailer") -@patch( - "airflow.models.Variable", - return_value={ +def fake_airflow_variable(): + return { "KLAVIYO_LIST_ID": "abc", "KLAVIYO_CAMPAIGN_ID": "123", - }, + } + +@patch("ods.kktix_ticket_orders.udfs.klaviyo_mailer.main") +@patch( + "ods.kktix_ticket_orders.udfs.klaviyo_loader.Variable", + new_callable=fake_airflow_variable ) def test_klaviyo_loader(variable, mailer, kktix_api_data): klaviyo_loader.load(kktix_api_data) @@ -16,8 +18,8 @@ def test_klaviyo_loader(variable, mailer, kktix_api_data): list_id="abc", campaign_id="123", campaign_name="隨買即用", - datas={ + datas=[{ "email": "xxx@gmail.com", "name": "李xx", - }, + }] ) From e8418bf0c299e43807ea5c68e40c6c1f47e7fb23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Tue, 16 Aug 2022 20:34:07 +0800 Subject: [PATCH 30/89] Dchang/devops readme (#88) * :pencil: (readme) add runbook when bump into out-of-disk issue --- README.md | 8 + dags/airflow-log-cleanup.py | 4 +- package-lock.json | 5328 ++++++++++++++++++++++++++++++++++- 3 files changed, 5305 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index c26b890..9afb718 100644 --- a/README.md +++ b/README.md @@ -143,3 +143,11 @@ for row in rows: * table name convention: ![img](https://miro.medium.com/max/1400/1*bppuEKMnL9gFnvoRHUO8CQ.png) + + +## DevOps (Will deprecate this if we don't bump into out-of-disk issue any more) + +1. Find topk biggest folders: `du -a /var/lib/docker/overlay2 | sort -n -r | head -n 20` +2. Show the folder size: `du -hs xxxx` +3. delete those pretty big folder +4. `df -h` \ No newline at end of file diff --git a/dags/airflow-log-cleanup.py b/dags/airflow-log-cleanup.py index ad15646..c35ca52 100644 --- a/dags/airflow-log-cleanup.py +++ b/dags/airflow-log-cleanup.py @@ -33,7 +33,7 @@ # Length to retain the log files if not already provided in the conf. If this # is set to 30, the job will remove those files that are 30 days old or older DEFAULT_MAX_LOG_AGE_IN_DAYS = Variable.get( - "airflow_log_cleanup__max_log_age_in_days", 30 + "airflow_log_cleanup__max_log_age_in_days", 3 ) # Whether the job should delete the logs or not. Included if you want to # temporarily avoid deleting the logs @@ -44,7 +44,7 @@ NUMBER_OF_WORKERS = 1 DIRECTORIES_TO_DELETE = [BASE_LOG_FOLDER] ENABLE_DELETE_CHILD_LOG = Variable.get( - "airflow_log_cleanup__enable_delete_child_log", "False" + "airflow_log_cleanup__enable_delete_child_log", "True" ) LOG_CLEANUP_PROCESS_LOCK_FILE = "/tmp/airflow_log_cleanup_worker.lock" logging.info("ENABLE_DELETE_CHILD_LOG " + ENABLE_DELETE_CHILD_LOG) diff --git a/package-lock.json b/package-lock.json index 1549bd7..700f0ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,5254 @@ { "name": "python_project_template", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "python_project_template", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "commitizen": "^4.1.2", + "cz-conventional-changelog": "^3.1.0", + "dot-prop": "^5.2.0", + "husky": "^1.3.1", + "lint-staged": "^8.1.5", + "lodash": "^4.17.19", + "minimist": "^1.2.5" + }, + "devDependencies": { + "@commitlint/cli": "^9.1.2", + "@commitlint/config-conventional": "^8.3.4", + "cz-emoji": "^1.3.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "devOptional": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "devOptional": true + }, + "node_modules/@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "devOptional": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@commitlint/cli": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-9.1.2.tgz", + "integrity": "sha512-ctRrrPqjZ8r4Vc4FXpPaScEpkPwfvB0Us3NK2SD2AnLwXGMxOLFTabDmNySU1Xc40ud2CmJsaV8lpavvzs8ZZA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.9.6", + "@commitlint/format": "^9.1.2", + "@commitlint/lint": "^9.1.2", + "@commitlint/load": "^9.1.2", + "@commitlint/read": "^9.1.2", + "chalk": "4.1.0", + "core-js": "^3.6.1", + "get-stdin": "7.0.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^15.1.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/cli/node_modules/@commitlint/execute-rule": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-9.1.2.tgz", + "integrity": "sha512-NGbeo0KCVYo1yj9vVPFHv6RGFpIF6wcQxpFYUKGIzZVV9Vz1WyiKS689JXa99Dt1aN0cZlEJJLnTNDIgYls0Vg==", + "dev": true, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/cli/node_modules/@commitlint/load": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-9.1.2.tgz", + "integrity": "sha512-FPL82xBuF7J3EJ57kLVoligQP4BFRwrknooP+vNT787AXmQ/Fddc/iYYwHwy67pNkk5N++/51UyDl/CqiHb6nA==", + "dev": true, + "dependencies": { + "@commitlint/execute-rule": "^9.1.2", + "@commitlint/resolve-extends": "^9.1.2", + "@commitlint/types": "^9.1.2", + "chalk": "4.1.0", + "cosmiconfig": "^6.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-9.1.2.tgz", + "integrity": "sha512-HcoL+qFGmWEu9VM4fY0HI+VzF4yHcg3x+9Hx6pYFZ+r2wLbnKs964y0v68oyMO/mS/46MVoLNXZGR8U3adpadg==", + "dev": true, + "dependencies": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/cli/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "dev": true, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/cli/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/cli/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/cli/node_modules/get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-8.3.4.tgz", + "integrity": "sha512-w0Yc5+aVAjZgjYqx29igBOnVCj8O22gy3Vo6Fyp7PwoS7+AYS1x3sN7IBq6i7Ae15Mv5P+rEx1pkxXo5zOMe4g==", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "4.2.1" + } + }, + "node_modules/@commitlint/ensure": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-9.1.2.tgz", + "integrity": "sha512-hwQICwpNSTsZgj/1/SdPvYAzhwjwgCJI4vLbT879+Jc+AJ6sj2bUDGw/F89vzgKz1VnaMm4D65bNhoWhG3pdhQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^9.1.2", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/ensure/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "dev": true, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-11.0.0.tgz", + "integrity": "sha512-g01p1g4BmYlZ2+tdotCavrMunnPFPhTzG1ZiLKTCYrooHRbmvqo42ZZn4QMStUEIcn+jfLb6BRZX3JzIwA1ezQ==", + "optional": true, + "engines": { + "node": ">=v10.22.0" + } + }, + "node_modules/@commitlint/format": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-9.1.2.tgz", + "integrity": "sha512-+ZWTOSGEU6dbn3NRh1q7sY5K5QLiSs7E2uSzuYnWHXcQk8nlTvnE0ibwMCQxdKLaOTZiN57fHM/7M9Re2gsRuw==", + "dev": true, + "dependencies": { + "@commitlint/types": "^9.1.2", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/format/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "dev": true, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/format/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-9.1.2.tgz", + "integrity": "sha512-423W/+Ro+Cc8cg81+t9gds1EscMZNjnGT31nKDvxVxJxXiXQsYYoFEQbU+nfUrRGQsUikEgEJ3ppVGr1linvcQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^9.1.2", + "semver": "7.3.2" + }, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "dev": true, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/lint": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-9.1.2.tgz", + "integrity": "sha512-XvggqHZ4XSTKOgzJhCzz52cWRRO57QQnEviwGj0qnD4jdwC+8h2u9LNZwoa2tGAuaNM3nSm//wNK7FRZhgiiFA==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^9.1.2", + "@commitlint/parse": "^9.1.2", + "@commitlint/rules": "^9.1.2", + "@commitlint/types": "^9.1.2" + }, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/lint/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "dev": true, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/load": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-11.0.0.tgz", + "integrity": "sha512-t5ZBrtgvgCwPfxmG811FCp39/o3SJ7L+SNsxFL92OR4WQxPcu6c8taD0CG2lzOHGuRyuMxZ7ps3EbngT2WpiCg==", + "optional": true, + "dependencies": { + "@commitlint/execute-rule": "^11.0.0", + "@commitlint/resolve-extends": "^11.0.0", + "@commitlint/types": "^11.0.0", + "chalk": "4.1.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v10.22.0" + } + }, + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/message": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-9.1.2.tgz", + "integrity": "sha512-ndlx5z7bPVLG347oYJUHuQ41eTcsw+aUYT1ZwQyci0Duy2atpuoeeSw9SuM1PjufzRCpb6ExzFEgGzcCRKAJsg==", + "dev": true, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/parse": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-9.1.2.tgz", + "integrity": "sha512-d+/VYbkotctW+lzDpus/R6xTerOqFQkW1myH+3PwnqYSE6JU/uHT4MlZNGJBv8pX9SPlR66t6X9puFobqtezEw==", + "dev": true, + "dependencies": { + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-parser": "^3.0.0" + }, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/read": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-9.1.2.tgz", + "integrity": "sha512-C2sNBQOqeQXMxpWtRnXYKYB3D9yuybPtQNY/P67A6o8XH/UMHkFaUTyIx1KRgu0IG0yTTItRt46FGnsMWLotvA==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^9.1.2", + "fs-extra": "^8.1.0", + "git-raw-commits": "^2.0.0" + }, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-11.0.0.tgz", + "integrity": "sha512-WinU6Uv6L7HDGLqn/To13KM1CWvZ09VHZqryqxXa1OY+EvJkfU734CwnOEeNlSCK7FVLrB4kmodLJtL1dkEpXw==", + "optional": true, + "dependencies": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v10.22.0" + } + }, + "node_modules/@commitlint/rules": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-9.1.2.tgz", + "integrity": "sha512-1vecFuzqVqjiT57ocXq1bL8V6GEF1NZs3BR0dQzObaqHftImIxBVII299gasckTkcuxNc8M+7XxZyKxUthukpQ==", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^9.1.2", + "@commitlint/message": "^9.1.2", + "@commitlint/to-lines": "^9.1.2", + "@commitlint/types": "^9.1.2" + }, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/rules/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "dev": true, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-9.1.2.tgz", + "integrity": "sha512-o4zWcMf9EnzA3MOqx01780SgrKq5hqDJmUBPk30g6an0XcDuDy3OSZHHTJFdzsg4V9FjC4OY44sFeK7GN7NaxQ==", + "dev": true, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/top-level": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-9.1.2.tgz", + "integrity": "sha512-KMPP5xVePcz3B1dKqcZdU4FZBVOkT+bG3ip4RQX2TeCJoomMkTjd0utALs7rpTGLID6BXbwwXepZCZJREjR/Bw==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=v8.17.0" + } + }, + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/top-level/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/types": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-11.0.0.tgz", + "integrity": "sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==", + "optional": true, + "engines": { + "node": ">=v10.22.0" + } + }, + "node_modules/@samverschueren/stream-to-observable": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", + "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", + "dependencies": { + "any-observable": "^0.3.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "rxjs": { + "optional": true + }, + "zen-observable": { + "optional": true + } + } + }, + "node_modules/@types/minimist": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "devOptional": true + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "devOptional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "engines": { + "node": ">=6" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cachedir": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz", + "integrity": "sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dependencies": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "devOptional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "devOptional": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/commitizen": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.2.3.tgz", + "integrity": "sha512-pYlYEng7XMV2TW4xtjDKBGqeJ0Teq2zyRSx2S3Ml1XAplHSlJZK8vm1KdGclpMEZuGafbS5TeHXIVnHk8RWIzQ==", + "dependencies": { + "cachedir": "2.2.0", + "cz-conventional-changelog": "3.2.0", + "dedent": "0.7.0", + "detect-indent": "6.0.0", + "find-node-modules": "2.0.0", + "find-root": "1.1.0", + "fs-extra": "8.1.0", + "glob": "7.1.4", + "inquirer": "6.5.2", + "is-utf8": "^0.2.1", + "lodash": "^4.17.20", + "minimist": "1.2.5", + "strip-bom": "4.0.0", + "strip-json-comments": "3.0.1" + }, + "bin": { + "commitizen": "bin/commitizen", + "cz": "bin/git-cz", + "git-cz": "bin/git-cz" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/commitizen/node_modules/cz-conventional-changelog": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz", + "integrity": "sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==", + "dependencies": { + "chalk": "^2.4.1", + "commitizen": "^4.0.3", + "conventional-commit-types": "^3.0.0", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "word-wrap": "^1.0.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@commitlint/load": ">6.1.1" + } + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/conventional-changelog-angular": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", + "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.1.tgz", + "integrity": "sha512-vC02KucnkNNap+foDKFm7BVUSDAXktXrUJqGszUuYnt6T0J2azsbYz/w9TDc3VsrW2v6JOtiQWVcgZnporHr4Q==", + "dev": true, + "dependencies": { + "compare-func": "^1.3.1", + "lodash": "^4.2.1", + "q": "^1.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/conventional-changelog-conventionalcommits/node_modules/compare-func": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz", + "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^3.0.0" + } + }, + "node_modules/conventional-changelog-conventionalcommits/node_modules/dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "dev": true, + "dependencies": { + "is-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-changelog-conventionalcommits/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/conventional-commit-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", + "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==" + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", + "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0", + "trim-off-newlines": "^1.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", + "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "optional": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cz-conventional-changelog": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", + "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", + "dependencies": { + "chalk": "^2.4.1", + "commitizen": "^4.0.3", + "conventional-commit-types": "^3.0.0", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "word-wrap": "^1.0.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@commitlint/load": ">6.1.1" + } + }, + "node_modules/cz-emoji": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cz-emoji/-/cz-emoji-1.3.1.tgz", + "integrity": "sha512-ARLPw7Q4+7F1xxVuYvf/c2c4AYJpP1yDEJb+7xwRbXCw+mDXUGSXJQ0z9uoI7jN/8s0uC7LVC0ZAEFuLfETm1A==", + "dev": true, + "dependencies": { + "cli-truncate": "^1.0.0", + "find-up": "^5.0.0", + "fuse.js": "^3.4.5", + "homedir": "^0.6.0", + "inquirer-autocomplete-prompt": "^0.12.0", + "inquirer-maxlength-input-prompt": "^1.0.1", + "pad": "^2.3.0", + "prettier": "^1.18.2", + "read-pkg-up": "^7.0.1", + "wrap-ansi": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-emoji/node_modules/cli-truncate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", + "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", + "dev": true, + "dependencies": { + "slice-ansi": "^1.0.0", + "string-width": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-emoji/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cz-emoji/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cz-emoji/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cz-emoji/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cz-emoji/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cz-emoji/node_modules/slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dependencies": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-indent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", + "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-node-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz", + "integrity": "sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==", + "dependencies": { + "findup-sync": "^3.0.0", + "merge": "^1.2.1" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fn-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", + "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/fuse.js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", + "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/g-status": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", + "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", + "dependencies": { + "arrify": "^1.0.1", + "matcher": "^1.0.0", + "simple-git": "^1.85.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "devOptional": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/homedir": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/homedir/-/homedir-0.6.0.tgz", + "integrity": "sha1-KyHbZr8Ipts4JJo+/1LX0YcGrx4=", + "dev": true + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + }, + "node_modules/husky": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", + "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", + "hasInstallScript": true, + "dependencies": { + "cosmiconfig": "^5.0.7", + "execa": "^1.0.0", + "find-up": "^3.0.0", + "get-stdin": "^6.0.0", + "is-ci": "^2.0.0", + "pkg-dir": "^3.0.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^4.0.1", + "run-node": "^1.0.0", + "slash": "^2.0.0" + }, + "bin": { + "husky-upgrade": "lib/upgrader/bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/husky/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/husky/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/husky/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "engines": { + "node": ">=4" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "devOptional": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "devOptional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "engines": { + "node": ">=4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/inquirer-autocomplete-prompt": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-0.12.2.tgz", + "integrity": "sha512-XbgPlnFdAboyUYWIrOkV8vh426BVZWzvbIKRkNY/aCvKhoCSWOO6ZQagAEOGA5ff2iOboNEaT1Wa/cM9ekj8jw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "figures": "^2.0.0", + "inquirer": "3.2.0", + "run-async": "^2.3.0" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "dependencies": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/inquirer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.0.tgz", + "integrity": "sha512-4CyUYMP7lOBkiUU1rR24WGrfRX6SucwbY2Mqb1PdApU24wnTIk4TsnkQwV72dDdIKZ2ycLP+fWCV+tA7wwgoew==", + "dev": true, + "dependencies": { + "ansi-escapes": "^2.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/inquirer/node_modules/ansi-escapes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", + "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-maxlength-input-prompt": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inquirer-maxlength-input-prompt/-/inquirer-maxlength-input-prompt-1.0.2.tgz", + "integrity": "sha512-bRs4PfQ7k+M3dDGadFo4//PlEYwWV/tKMNHV0m1jVHSGocyLvlRLuWrNgDuVAmXiEydM5QgfEEP7hbWNtgv0oA==", + "dev": true, + "dependencies": { + "chalk": "^2.3.1", + "inquirer": "^5.1.0", + "lodash.invoke": "^4.5.2", + "lodash.isfunction": "^3.0.9", + "lodash.partialright": "^4.2.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "dependencies": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "dependencies": { + "symbol-observable": "1.0.1" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", + "dependencies": { + "symbol-observable": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "devOptional": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "devOptional": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "devOptional": true + }, + "node_modules/lint-staged": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz", + "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", + "dependencies": { + "chalk": "^2.3.1", + "commander": "^2.14.1", + "cosmiconfig": "^5.2.0", + "debug": "^3.1.0", + "dedent": "^0.7.0", + "del": "^3.0.0", + "execa": "^1.0.0", + "g-status": "^2.0.2", + "is-glob": "^4.0.0", + "is-windows": "^1.0.2", + "listr": "^0.14.2", + "listr-update-renderer": "^0.5.0", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "micromatch": "^3.1.8", + "npm-which": "^3.0.1", + "p-map": "^1.1.1", + "path-is-inside": "^1.0.2", + "pify": "^3.0.0", + "please-upgrade-node": "^3.0.2", + "staged-git-files": "1.1.2", + "string-argv": "^0.0.2", + "stringify-object": "^3.2.2", + "yup": "^0.27.0" + }, + "bin": { + "lint-staged": "index.js" + } + }, + "node_modules/lint-staged/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lint-staged/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/lint-staged/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lint-staged/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/lint-staged/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lint-staged/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "engines": { + "node": ">=4" + } + }, + "node_modules/listr": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", + "dependencies": { + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/listr-update-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "dependencies": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "listr": "^0.14.2" + } + }, + "node_modules/listr-update-renderer/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dependencies": { + "chalk": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/listr-verbose-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "dependencies": { + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/listr/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "node_modules/lodash.invoke": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.invoke/-/lodash.invoke-4.5.2.tgz", + "integrity": "sha1-AcoH5HCQOv+j/+x60u0icj0vaXw=", + "dev": true + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, + "node_modules/lodash.partialright": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", + "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "dependencies": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/longest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", + "integrity": "sha1-eB4YMpaqlPbU2RbcM10NF676I/g=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matcher": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", + "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "dependencies": { + "escape-string-regexp": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", + "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^3.0.6", + "resolve": "^1.17.0", + "semver": "^7.3.2", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/npm-path": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", + "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "dependencies": { + "which": "^1.2.10" + }, + "bin": { + "npm-path": "bin/npm-path" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "dependencies": { + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" + }, + "bin": { + "npm-which": "bin/npm-which.js" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pad": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pad/-/pad-2.3.0.tgz", + "integrity": "sha512-lxrgnOG5AXmzMRT1O5urWtYFxHnFSE+QntgTHij1nvS4W+ubhQLmQRHmZXDeEvk9I00itAixLqU9Q6fE0gW3sw==", + "dev": true, + "dependencies": { + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "devOptional": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "devOptional": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/property-expr": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", + "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dependencies": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redent/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "devOptional": true, + "dependencies": { + "global-dirs": "^0.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", + "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", + "bin": { + "run-node": "run-node" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "node_modules/rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "dependencies": { + "rx-lite": "*" + } + }, + "node_modules/rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/simple-git": { + "version": "1.132.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz", + "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", + "dependencies": { + "debug": "^4.0.1" + } + }, + "node_modules/simple-git/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/simple-git/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/staged-git-files": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", + "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==", + "bin": { + "sgf": "bin/cli.js" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", + "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "devOptional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/synchronous-promise": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.15.tgz", + "integrity": "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==" + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" + }, + "node_modules/trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "devOptional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz", + "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yup": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", + "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "fn-name": "~2.0.1", + "lodash": "^4.17.11", + "property-expr": "^1.5.0", + "synchronous-promise": "^2.0.6", + "toposort": "^2.0.2" + } + } + }, "dependencies": { "@babel/code-frame": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "devOptional": true, "requires": { "@babel/highlight": "^7.12.13" } @@ -15,12 +5256,14 @@ "@babel/helper-validator-identifier": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "devOptional": true }, "@babel/highlight": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "devOptional": true, "requires": { "@babel/helper-validator-identifier": "^7.12.11", "chalk": "^2.0.0", @@ -396,17 +5639,8 @@ "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "devOptional": true }, "ansi-escapes": { "version": "3.2.0", @@ -422,6 +5656,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -631,7 +5866,8 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "devOptional": true }, "camelcase": { "version": "5.3.1", @@ -862,6 +6098,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -869,7 +6106,8 @@ "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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "devOptional": true }, "commander": { "version": "2.20.3", @@ -992,8 +6230,8 @@ "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", "dev": true, "requires": { - "JSONStream": "^1.0.4", "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", @@ -1617,6 +6855,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "devOptional": true, "requires": { "ini": "^1.3.4" } @@ -1699,7 +6938,8 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true }, "has-value": { "version": "1.0.0", @@ -1814,6 +7054,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "devOptional": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -1822,7 +7063,8 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "devOptional": true } } }, @@ -2243,7 +7485,8 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "devOptional": true }, "js-yaml": { "version": "3.14.1", @@ -2262,7 +7505,8 @@ "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "devOptional": true }, "jsonfile": { "version": "4.0.0", @@ -2278,6 +7522,16 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -2286,7 +7540,8 @@ "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "devOptional": true }, "lint-staged": { "version": "8.2.1", @@ -2891,6 +8146,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "devOptional": true, "requires": { "callsites": "^3.0.0" } @@ -2899,6 +8155,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "devOptional": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -2944,7 +8201,8 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "devOptional": true }, "pify": { "version": "3.0.0", @@ -3197,12 +8455,14 @@ "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "devOptional": true }, "resolve-global": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "devOptional": true, "requires": { "global-dirs": "^0.1.1" } @@ -3567,6 +8827,15 @@ } } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, "string-argv": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", @@ -3591,15 +8860,6 @@ } } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", @@ -3660,6 +8920,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -3912,7 +9173,8 @@ "yaml": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "devOptional": true }, "yargs": { "version": "15.4.1", From f546c3b1aa7b2117ac4f3c9b49ee948c216f6807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Wed, 17 Aug 2022 10:27:07 +0800 Subject: [PATCH 31/89] Dchang/fix remove unpaid ticket (#89) * :bug: (kktix) filter out unpaid data --- dags/ods/kktix_ticket_orders/udfs/kktix_api.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index 817d261..f888971 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -120,6 +120,8 @@ def _get_attendee_infos( endpoint=f"/api/v2/hosting_events/{event_id}/attendees/{attendee_id}", _retry_args=RETRY_ARGS, ).json() + if not attendee_info["is_paid"]: + continue if ( timestamp < attendee_info["updated_at"] From af552f0d84863385857777cbe67d13748a010bcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Wed, 17 Aug 2022 16:13:18 +0800 Subject: [PATCH 32/89] Dchang/filter out refunded tickets (#90) * :bug: (kktix) fix the refund issue --- .../kktix_ticket_orders/udfs/discord_bot.py | 84 +++++++++++++++++-- .../ods/kktix_ticket_orders/udfs/kktix_api.py | 6 +- .../kktix_ticket_orders/udfs/kktix_loader.py | 4 + 3 files changed, 82 insertions(+), 12 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index 2292fc0..1e00f9f 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -2,41 +2,109 @@ import os from collections import defaultdict from datetime import datetime -from typing import Dict, Text +from typing import Dict, List, Text import requests import tenacity from airflow.hooks.http_hook import HttpHook from airflow.models import Variable from google.cloud import bigquery +from ods.kktix_ticket_orders.udfs.bigquery_loader import TABLE +from ods.kktix_ticket_orders.udfs.kktix_api import ( + _get_attendance_book_id, + _get_attendee_ids, +) DISCORD_HOOK = HttpHook(http_conn_id="discord_registration", method="POST") +HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") RETRY_ARGS = dict( - wait=tenacity.wait_none(), - stop=tenacity.stop_after_attempt(3), + wait=tenacity.wait_random(min=1, max=10), + stop=tenacity.stop_after_attempt(10), retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError), ) +CLIENT = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) def send() -> None: + refunded_attendee_ids = _check_if_refunded_ticket_exists() + if refunded_attendee_ids: + _mark_tickets_as_refunded(refunded_attendee_ids) statistics = _get_statistics_from_bigquery() msg = _compose_discord_msg(statistics) _send_webhook_to_discord(msg) +def _check_if_refunded_ticket_exists() -> List[int]: + """ + 1. iterate through all unrefunded tickets + 2. build up a hash map + 3. get the latest attendance book + 4. compare the difference, the diff would be refunded attendee ids + """ + refunded_attendee_ids: List[int] = [] + query_job = CLIENT.query( + f""" + SELECT + ID, + CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, + '$.id'), '"', '') AS INT64) AS ATTENDEE_ID + FROM + `{TABLE}` + WHERE + REFUNDED IS NULL OR REFUNDED = FALSE + """ # nosec + ) + event_ids_and_attendee_ids = query_job.result() + + bigquery_side_event_attendee_id_dict = defaultdict(list) + for event_id, attendee_id in event_ids_and_attendee_ids: + bigquery_side_event_attendee_id_dict[event_id].append(attendee_id) + for ( + event_id, + outdated_latest_attendee_ids, + ) in bigquery_side_event_attendee_id_dict.items(): + attendance_book_id = _get_attendance_book_id(event_id) + latest_attendee_ids = _get_attendee_ids(event_id, attendance_book_id) + refunded_attendee_ids_in_this_event = set( + outdated_latest_attendee_ids + ).difference(set(latest_attendee_ids)) + refunded_attendee_ids += list(refunded_attendee_ids_in_this_event) + return refunded_attendee_ids + + +def _mark_tickets_as_refunded(refunded_attendee_ids: List[int]) -> None: + """ + set these attendee info to refunded=true, if we cannot find its attendee_info right now by using KKTIX's API! + """ + query_job = CLIENT.query( + f""" + UPDATE + `{TABLE}` + SET + refunded=TRUE + WHERE + CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, + '$.id'), '"', '') AS INT64) in {tuple(refunded_attendee_ids)} + """ + ) + result = query_job.result() + print(f"Result of _mark_tickets_as_refunded: {result}") + + def _get_statistics_from_bigquery() -> Dict: - client = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) - query_job = client.query( - """ + query_job = CLIENT.query( + f""" SELECT NAME, REPLACE(JSON_EXTRACT(ATTENDEE_INFO, '$.ticket_name'), '"', '') AS TICKET_NAME, COUNT(1) AS COUNTS FROM - `pycontw-225217.ods.ods_kktix_attendeeId_datetime` + `{TABLE}` + WHERE + REFUNDED IS NULL OR REFUNDED = FALSE GROUP BY NAME, TICKET_NAME; - """ + """ # nosec ) result = query_job.result() return result diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index f888971..4d795a3 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -61,7 +61,7 @@ def get_attendee_infos(event_id: int, timestamp: float) -> List: it's a public wrapper for people to get attendee infos! """ attendance_book_id = _get_attendance_book_id(event_id) - attendee_ids = _get_attendee_ids(event_id, attendance_book_id, timestamp) + attendee_ids = _get_attendee_ids(event_id, attendance_book_id) attendee_infos = _get_attendee_infos(event_id, attendee_ids, timestamp) return attendee_infos @@ -92,9 +92,7 @@ def _get_attendance_book_id(event_id: int) -> int: return attendance_books_resp[0]["id"] -def _get_attendee_ids( - event_id: int, attendance_book_id: int, timestamp: float -) -> List[int]: +def _get_attendee_ids(event_id: int, attendance_book_id: int) -> List[int]: """ get all attendee ids! """ diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py index d782244..cb1a34c 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py @@ -10,6 +10,7 @@ bigquery.SchemaField("id", "INTEGER", mode="REQUIRED"), bigquery.SchemaField("name", "STRING", mode="REQUIRED"), bigquery.SchemaField("attendee_info", "STRING", mode="REQUIRED"), + bigquery.SchemaField("refunded", "BOOLEAN", mode="REQUIRED"), ] JOB_CONFIG = bigquery.LoadJobConfig(schema=SCHEMA) @@ -36,6 +37,9 @@ def _load_to_bigquery(payload: List[Dict]) -> None: """ client = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) df = pd.DataFrame(payload, columns=["id", "name", "attendee_info"],) + # for now, these attendees haven't refunded our ticket, yet... + # we don't know if they would refund down the road + df["refunded"] = [False] * len(payload) job = client.load_table_from_dataframe(df, TABLE, job_config=JOB_CONFIG) job.result() From 0362d7c734708c8d6ad00e3e9a49eaa5ce5d0cd6 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sat, 20 Aug 2022 15:56:39 +0800 Subject: [PATCH 33/89] misc: pass ci --- .../udfs/klaviyo_loader.py | 20 ++++----- .../udfs/klaviyo_mailer.py | 44 +++++++------------ .../test_klaviyo_loader.py | 10 ++--- 3 files changed, 29 insertions(+), 45 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py b/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py index f5605de..ccb1177 100644 --- a/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py +++ b/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py @@ -1,4 +1,5 @@ -from typing import List, Iterable +from typing import Iterable, List + from airflow.models import Variable from ods.kktix_ticket_orders.udfs import klaviyo_mailer @@ -14,22 +15,22 @@ def _load_raw_data(event_raw_data_array: List) -> Iterable: if key in ("聯絡人 Email", "聯絡人 姓名") } + def load(event_raw_data_array: List) -> None: """ Send a notify mail for all participants via third-party service """ try: list_id = Variable.get("KLAVIYO_LIST_ID") - campaign_id = Variable.get("KLAVIYO_CAMPAIGN_ID") + campaign_id = Variable.get("KLAVIYO_CAMPAIGN_ID") except KeyError: - print("Skip klaviyo mailer, 'KLAVIYO_LIST_ID' or 'KLAVIYO_CAMPAIGN_ID' variable not found") + print( + "Skip klaviyo mailer, 'KLAVIYO_LIST_ID' or 'KLAVIYO_CAMPAIGN_ID' variable not found" + ) return datas = [ - { - "email": item["聯絡人 Email"], - "name": item["聯絡人 姓名"], - } + {"email": item["聯絡人 Email"], "name": item["聯絡人 姓名"]} for item in _load_raw_data(event_raw_data_array) ] if not datas: @@ -37,8 +38,5 @@ def load(event_raw_data_array: List) -> None: return klaviyo_mailer.main( - list_id=list_id, - campaign_id=campaign_id, - campaign_name="隨買即用", - datas=datas, + list_id=list_id, campaign_id=campaign_id, campaign_name="隨買即用", datas=datas, ) diff --git a/dags/ods/kktix_ticket_orders/udfs/klaviyo_mailer.py b/dags/ods/kktix_ticket_orders/udfs/klaviyo_mailer.py index 3d619d0..d4c73f4 100644 --- a/dags/ods/kktix_ticket_orders/udfs/klaviyo_mailer.py +++ b/dags/ods/kktix_ticket_orders/udfs/klaviyo_mailer.py @@ -7,14 +7,14 @@ 2. Create a template [campaign](https://www.klaviyo.com/campaigns) and set the previous List as target recipients list """ -import requests -import tenacity from datetime import datetime from typing import List + +import requests +import tenacity from airflow.hooks.http_hook import HttpHook from airflow.models import Variable - SCHEDULE_INTERVAL_SECONDS: int = 300 RETRY_ARGS = dict( wait=tenacity.wait_none(), @@ -24,10 +24,7 @@ def main( - list_id: str, - campaign_id: str, - campaign_name: str, - datas: List[dict], + list_id: str, campaign_id: str, campaign_name: str, datas: List[dict], ): """ Args: @@ -59,10 +56,7 @@ def main( existed_members = _klaviyo_get_list_members(list_id)["records"] if existed_members: _klaviyo_remove_list_members( - list_id, - body={ - "emails": list(map(lambda x: x["email"], existed_members)), - }, + list_id, body={"emails": list(map(lambda x: x["email"], existed_members))} ) _klaviyo_add_list_members(list_id, body={"profiles": datas}) @@ -72,9 +66,7 @@ def main( # create a new compaign and send mail immediately campaign_suffix = "{:%Y-%m-%d_%H:%M:%S}".format(datetime.now()) response = _klaviyo_clone_campaign( - campaign_id, - name=f"{campaign_name}_{campaign_suffix}", - list_id=list_id, + campaign_id, name=f"{campaign_name}_{campaign_suffix}", list_id=list_id, ) new_campaign_id = response["id"] _klaviyo_send_campaign(new_campaign_id) @@ -83,7 +75,7 @@ def main( def _klaviyo_get_list_info(list_id: str) -> dict: HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="GET") - API_KEY = Variable.get('KLAVIYO_KEY') + API_KEY = Variable.get("KLAVIYO_KEY") return HTTP_HOOK.run_with_advanced_retry( endpoint=f"/v2/list/{list_id}?api_key={API_KEY}", _retry_args=RETRY_ARGS, @@ -93,7 +85,7 @@ def _klaviyo_get_list_info(list_id: str) -> dict: def _klaviyo_get_list_members(list_id: str) -> dict: HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="GET") - API_KEY = Variable.get('KLAVIYO_KEY') + API_KEY = Variable.get("KLAVIYO_KEY") return HTTP_HOOK.run_with_advanced_retry( endpoint=f"/v2/group/{list_id}/members/all?api_key={API_KEY}", _retry_args=RETRY_ARGS, @@ -103,7 +95,7 @@ def _klaviyo_get_list_members(list_id: str) -> dict: def _klaviyo_remove_list_members(list_id: str, body: dict) -> dict: HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="DELETE") - API_KEY = Variable.get('KLAVIYO_KEY') + API_KEY = Variable.get("KLAVIYO_KEY") return HTTP_HOOK.run_with_advanced_retry( endpoint=f"/v2/list/{list_id}/members?api_key={API_KEY}", _retry_args=RETRY_ARGS, @@ -114,21 +106,18 @@ def _klaviyo_remove_list_members(list_id: str, body: dict) -> dict: def _klaviyo_add_list_members(list_id: str, body: dict) -> dict: HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="POST") - API_KEY = Variable.get('KLAVIYO_KEY') + API_KEY = Variable.get("KLAVIYO_KEY") return HTTP_HOOK.run_with_advanced_retry( endpoint=f"/v2/list/{list_id}/members?api_key={API_KEY}", _retry_args=RETRY_ARGS, json=body, - headers={ - "Accept": "application/json", - "Content-Type": "application/json", - } + headers={"Accept": "application/json", "Content-Type": "application/json"}, ).json() def _klaviyo_get_campaign_info(campaign_id: str) -> dict: HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="GET") - API_KEY = Variable.get('KLAVIYO_KEY') + API_KEY = Variable.get("KLAVIYO_KEY") return HTTP_HOOK.run_with_advanced_retry( endpoint=f"/v1/campaign/{campaign_id}?api_key={API_KEY}", _retry_args=RETRY_ARGS, @@ -138,14 +127,11 @@ def _klaviyo_get_campaign_info(campaign_id: str) -> dict: def _klaviyo_clone_campaign(campaign_id: str, name: str, list_id: str) -> dict: HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="POST") - API_KEY = Variable.get('KLAVIYO_KEY') + API_KEY = Variable.get("KLAVIYO_KEY") return HTTP_HOOK.run_with_advanced_retry( endpoint=f"/v1/campaign/{campaign_id}/clone?api_key={API_KEY}", _retry_args=RETRY_ARGS, - data={ - "name": name, - "list_id": list_id, - }, + data={"name": name, "list_id": list_id}, headers={ "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded", @@ -155,7 +141,7 @@ def _klaviyo_clone_campaign(campaign_id: str, name: str, list_id: str) -> dict: def _klaviyo_send_campaign(campaign_id: str) -> dict: HTTP_HOOK = HttpHook(http_conn_id="klaviyo_api", method="POST") - API_KEY = Variable.get('KLAVIYO_KEY') + API_KEY = Variable.get("KLAVIYO_KEY") return HTTP_HOOK.run_with_advanced_retry( endpoint=f"/v1/campaign/{campaign_id}/send?api_key={API_KEY}", _retry_args=RETRY_ARGS, diff --git a/tests/kktix_ticket_orders/test_klaviyo_loader.py b/tests/kktix_ticket_orders/test_klaviyo_loader.py index ba6a80d..cc92eee 100644 --- a/tests/kktix_ticket_orders/test_klaviyo_loader.py +++ b/tests/kktix_ticket_orders/test_klaviyo_loader.py @@ -1,16 +1,19 @@ from unittest.mock import patch + from ods.kktix_ticket_orders.udfs import klaviyo_loader + def fake_airflow_variable(): return { "KLAVIYO_LIST_ID": "abc", "KLAVIYO_CAMPAIGN_ID": "123", } + @patch("ods.kktix_ticket_orders.udfs.klaviyo_mailer.main") @patch( "ods.kktix_ticket_orders.udfs.klaviyo_loader.Variable", - new_callable=fake_airflow_variable + new_callable=fake_airflow_variable, ) def test_klaviyo_loader(variable, mailer, kktix_api_data): klaviyo_loader.load(kktix_api_data) @@ -18,8 +21,5 @@ def test_klaviyo_loader(variable, mailer, kktix_api_data): list_id="abc", campaign_id="123", campaign_name="隨買即用", - datas=[{ - "email": "xxx@gmail.com", - "name": "李xx", - }] + datas=[{"email": "xxx@gmail.com", "name": "李xx"}], ) From 0568e3f712248cdf10076cdb8599314664d74e07 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sat, 20 Aug 2022 16:12:14 +0800 Subject: [PATCH 34/89] test: fix module path --- tests/kktix_ticket_orders/test_klaviyo_loader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/kktix_ticket_orders/test_klaviyo_loader.py b/tests/kktix_ticket_orders/test_klaviyo_loader.py index cc92eee..7e2cd16 100644 --- a/tests/kktix_ticket_orders/test_klaviyo_loader.py +++ b/tests/kktix_ticket_orders/test_klaviyo_loader.py @@ -1,6 +1,6 @@ from unittest.mock import patch -from ods.kktix_ticket_orders.udfs import klaviyo_loader +from dags.ods.kktix_ticket_orders.udfs import klaviyo_loader def fake_airflow_variable(): From 9e8da9f11997dfe146f98b949c4f7ab0d4ecb73a Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sat, 20 Aug 2022 16:38:23 +0800 Subject: [PATCH 35/89] test: fix test_klaviyo_loader --- tests/kktix_ticket_orders/test_klaviyo_loader.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/kktix_ticket_orders/test_klaviyo_loader.py b/tests/kktix_ticket_orders/test_klaviyo_loader.py index 7e2cd16..837a5ad 100644 --- a/tests/kktix_ticket_orders/test_klaviyo_loader.py +++ b/tests/kktix_ticket_orders/test_klaviyo_loader.py @@ -10,9 +10,9 @@ def fake_airflow_variable(): } -@patch("ods.kktix_ticket_orders.udfs.klaviyo_mailer.main") +@patch("dags.ods.kktix_ticket_orders.udfs.klaviyo_loader.klaviyo_mailer.main") @patch( - "ods.kktix_ticket_orders.udfs.klaviyo_loader.Variable", + "dags.ods.kktix_ticket_orders.udfs.klaviyo_loader.Variable", new_callable=fake_airflow_variable, ) def test_klaviyo_loader(variable, mailer, kktix_api_data): From 13e3a4e4b2be319393af4ef0a990ec84bba35178 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sat, 20 Aug 2022 16:48:46 +0800 Subject: [PATCH 36/89] test: add dags folder into python path --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6e3a7d1..b1f6c70 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ format: $(VENV_PREFIX) isort . test: - $(VENV_PREFIX) pytest + PYTHONPATH=./dags $(VENV_PREFIX) pytest coverage: $(VENV_PREFIX) pytest --cov=dags tests From 412b2f316546d7d88dcf685a09df4306153fa8bf Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sat, 20 Aug 2022 16:54:26 +0800 Subject: [PATCH 37/89] test: add dags folder into python path --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b1f6c70..cabdf50 100644 --- a/Makefile +++ b/Makefile @@ -14,4 +14,4 @@ test: PYTHONPATH=./dags $(VENV_PREFIX) pytest coverage: - $(VENV_PREFIX) pytest --cov=dags tests + PYTHONPATH=./dags $(VENV_PREFIX) pytest --cov=dags tests From 3199801f06ad2ef2678b4f354881d8d5e23a91fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Wed, 24 Aug 2022 09:59:20 +0800 Subject: [PATCH 38/89] (discord): only 1 item in array had an extra comma (#94) --- dags/ods/kktix_ticket_orders/udfs/discord_bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index 1e00f9f..a37893b 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -84,7 +84,7 @@ def _mark_tickets_as_refunded(refunded_attendee_ids: List[int]) -> None: refunded=TRUE WHERE CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, - '$.id'), '"', '') AS INT64) in {tuple(refunded_attendee_ids)} + '$.id'), '"', '') AS INT64) in ({','.join(str(i) for i in refunded_attendee_ids)} """ ) result = query_job.result() From 5aadc00dcc115d2a2b3bd95669d652570eb3a176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Wed, 24 Aug 2022 11:34:01 +0800 Subject: [PATCH 39/89] :bug: (sql) (#95) --- dags/ods/kktix_ticket_orders/udfs/discord_bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index a37893b..cc5ad41 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -84,7 +84,7 @@ def _mark_tickets_as_refunded(refunded_attendee_ids: List[int]) -> None: refunded=TRUE WHERE CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, - '$.id'), '"', '') AS INT64) in ({','.join(str(i) for i in refunded_attendee_ids)} + '$.id'), '"', '') AS INT64) in ({','.join(str(i) for i in refunded_attendee_ids)}) """ ) result = query_job.result() From c77c6be82721238defce79f2f8015532520416b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Fri, 26 Aug 2022 20:53:25 +0800 Subject: [PATCH 40/89] (kktix): added gather town whitelist feature (#93) * (kktix): added gather town whitelist feature --- dags/ods/kktix_ticket_orders/kktix_dag.py | 10 ++++- .../kktix_ticket_orders/udfs/discord_bot.py | 1 + .../udfs/gather_town_loader.py | 38 +++++++++++++++++++ .../ods/kktix_ticket_orders/udfs/kktix_api.py | 3 ++ .../udfs/kktix_transformer.py | 30 ++++++++++++--- 5 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 dags/ods/kktix_ticket_orders/udfs/gather_town_loader.py diff --git a/dags/ods/kktix_ticket_orders/kktix_dag.py b/dags/ods/kktix_ticket_orders/kktix_dag.py index c460d3d..ffdf7a6 100644 --- a/dags/ods/kktix_ticket_orders/kktix_dag.py +++ b/dags/ods/kktix_ticket_orders/kktix_dag.py @@ -5,7 +5,7 @@ from airflow import DAG from airflow.operators.python_operator import PythonOperator -from ods.kktix_ticket_orders.udfs import bigquery_loader, kktix_api +from ods.kktix_ticket_orders.udfs import bigquery_loader, gather_town_loader, kktix_api DEFAULT_ARGS = { "owner": "davidtnfsh@gmail.com", @@ -34,7 +34,13 @@ provide_context=True, ) - CREATE_TABLE_IF_NEEDED >> GET_ATTENDEE_INFOS + ADD_USER_TO_GATHER_TOWN_WHITELIST = PythonOperator( + task_id="ADD_USER_TO_GATHER_TOWN_WHITELIST", + python_callable=gather_town_loader.load, + provide_context=True, + ) + + CREATE_TABLE_IF_NEEDED >> GET_ATTENDEE_INFOS >> ADD_USER_TO_GATHER_TOWN_WHITELIST if __name__ == "__main__": dag.cli() diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index cc5ad41..a609f72 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -115,6 +115,7 @@ def _send_webhook_to_discord(payload: Text) -> None: endpoint=Variable.get("discord_webhook_registration_endpoint"), _retry_args=RETRY_ARGS, data=json.dumps({"content": payload}), + headers={"Accept": "application/json", "Content-Type": "application/json"}, ) diff --git a/dags/ods/kktix_ticket_orders/udfs/gather_town_loader.py b/dags/ods/kktix_ticket_orders/udfs/gather_town_loader.py new file mode 100644 index 0000000..379d73a --- /dev/null +++ b/dags/ods/kktix_ticket_orders/udfs/gather_town_loader.py @@ -0,0 +1,38 @@ +""" +load user's name, email etc into gather town whitelist +please refer to this document for details: https://hackmd.io/PM_sWO5USo6dxMqT1uCrCQ?view +""" +import requests +import tenacity +from airflow.hooks.http_hook import HttpHook +from airflow.models import Variable + +RETRY_ARGS = dict( + wait=tenacity.wait_none(), + stop=tenacity.stop_after_attempt(3), + retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError), +) + +GATHERTOWN_HTTP_HOOK = HttpHook(http_conn_id="gathertown_api", method="POST") + + +def load(**context): + event_raw_data_array = context["ti"].xcom_pull(task_ids="GET_ATTENDEE_INFOS") + for event_raw_data in event_raw_data_array[:1]: + resp = GATHERTOWN_HTTP_HOOK.run_with_advanced_retry( + endpoint="/api/setEmailGuestlist", + _retry_args=RETRY_ARGS, + json={ + "spaceId": Variable.get("gather_town_space_id"), + "apiKey": Variable.get("gather_town_api_key"), + "guestlist": { + event_raw_data["聯絡人 Email"]: { + "name": "", + "role": "guest", + "affiliation": "Attendee", + } + }, + }, + headers={"Accept": "application/json", "Content-Type": "application/json"}, + ).json() + print(resp) diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index 7c359b2..249aca8 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -32,6 +32,9 @@ def main(**context): kktix_loader.load(transformed_event_raw_data_array) print(f"Loaded {len(transformed_event_raw_data_array)} rows to BigQuery!") + # pass these unhashed data through xcom to next airflow task + return kktix_transformer._extract_sensitive_unhashed_raw_data(event_raw_data_array) + def _extract(year: int, timestamp: float) -> List[Dict]: """ diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py b/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py index 790617b..aea2e0d 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py @@ -1,6 +1,14 @@ import hashlib +import json from typing import Dict, List +SENSITIVE_KEY_NAME_SET = { + "聯絡人 姓名", + "聯絡人 Email", + "聯絡人 手機", + "Address", +} + def transform(event_raw_data_array: List) -> List[Dict]: """ @@ -11,15 +19,25 @@ def transform(event_raw_data_array: List) -> List[Dict]: # search string contains personal information and it's unstructured. Therefore just drop it! del attendee_info["search_string"] for index, (key, value) in enumerate(attendee_info["data"]): - for key_should_be_hashed in { - "聯絡人 姓名", - "聯絡人 Email", - "聯絡人 手機", - "Address", - }: + for key_should_be_hashed in SENSITIVE_KEY_NAME_SET: if key_should_be_hashed in key: hashed_value = hashlib.sha256(value.encode("utf-8")).hexdigest() attendee_info["data"][index][1] = hashed_value else: continue return event_raw_data_array + + +def _extract_sensitive_unhashed_raw_data(event_raw_data_array: List) -> List[Dict]: + """ + only keep these data in xcom and pass them to next Airflow task + """ + sensitive_unhashed_raw_data_array = [] + for event in event_raw_data_array: + attendee_info = event["attendee_info"] + payload = {} + for (key, value) in json.loads(attendee_info)["data"]: + if key in SENSITIVE_KEY_NAME_SET: + payload[key] = value + sensitive_unhashed_raw_data_array.append(payload) + return sensitive_unhashed_raw_data_array From 61c0a2b528c6890523c943f66a6ba6d3b4ce95f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Fri, 26 Aug 2022 20:57:04 +0800 Subject: [PATCH 41/89] :pencil: (readme) update readme per feedback (#92) --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 97f18b0..66a1bc2 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,10 @@ Using Airflow to implement our ETL pipelines 2. `npm run check`: Apply all the linter and formatter 3. `npm run commit` +## PR + +Please use Gitlab Flow, otherwise you cannot pass dockerhub CI + ## Run ### Local environment Python Script @@ -111,6 +115,8 @@ Using Airflow to implement our ETL pipelines ## Deployment & Setting Up Credentials/Env 1. Manually deploy to Google compute instance + 1. `cd /home/zhangtaiwei/pycon-etl` + 2. `sudo git pull` 2. Credentials: * Airflow: * Connections: From 022355ff0b547ac2da2cf3a137cf1094e5b23ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Fri, 26 Aug 2022 21:02:48 +0800 Subject: [PATCH 42/89] :ambulance: (klaviyo) comment klaviyo for now (#96) --- dags/ods/kktix_ticket_orders/udfs/kktix_api.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index 249aca8..85d6d95 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -4,7 +4,7 @@ import tenacity from airflow.hooks.http_hook import HttpHook from dateutil.parser import parse -from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer, klaviyo_loader +from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer SCHEDULE_INTERVAL_SECONDS: int = 300 HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") @@ -27,7 +27,8 @@ def main(**context): timestamp = ts_datetime_obj.timestamp() event_raw_data_array = _extract(year=year, timestamp=timestamp,) # load name and email to mailer before data has been hashed - klaviyo_loader.load(event_raw_data_array) + # BUG: wait for henry + # klaviyo_loader.load(event_raw_data_array) transformed_event_raw_data_array = kktix_transformer.transform(event_raw_data_array) kktix_loader.load(transformed_event_raw_data_array) print(f"Loaded {len(transformed_event_raw_data_array)} rows to BigQuery!") From 44be9e3fd2aafc9b0ea216e6d3c9a7c2ffbc21a2 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sat, 27 Aug 2022 12:23:50 +0800 Subject: [PATCH 43/89] feat: add new dag for running mailer backfill jobs --- .../klaviyo_backfill_dag.py | 36 +++++ .../udfs/batch_kktix2mailer.py | 129 ++++++++++++++++++ .../ods/kktix_ticket_orders/udfs/kktix_api.py | 5 +- .../udfs/klaviyo_loader.py | 2 +- 4 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py create mode 100644 dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py diff --git a/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py b/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py new file mode 100644 index 0000000..dc2f56e --- /dev/null +++ b/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py @@ -0,0 +1,36 @@ +""" +Ingest KKTIX's daily data and load them to Mailer +""" +from datetime import datetime, timedelta + +from airflow import DAG +from airflow.operators.python_operator import PythonOperator +from ods.kktix_ticket_orders.udfs import batch_kktix2mailer + +DEFAULT_ARGS = { + "owner": "henry410213028@gmail.com", + "depends_on_past": False, + "start_date": datetime(2022, 7, 23), + "end_date": datetime(2022, 8, 25), + "retries": 2, + "retry_delay": timedelta(minutes=5), + "on_failure_callback": lambda x: "Need to send notification to Discord!", +} +dag = DAG( + "KLAVIYO_SEND_MAIL_BACKFILL_V1", + default_args=DEFAULT_ARGS, + schedule_interval="0 23 * * *", + max_active_runs=1, + catchup=True, +) +with dag: + GET_ATTENDEE_INFOS = PythonOperator( + task_id="GET_ATTENDEE_INFOS", + python_callable=batch_kktix2mailer.main, + provide_context=True, + ) + + GET_ATTENDEE_INFOS + +if __name__ == "__main__": + dag.cli() diff --git a/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py b/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py new file mode 100644 index 0000000..e2792b0 --- /dev/null +++ b/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py @@ -0,0 +1,129 @@ +from typing import Callable, Dict, List + +import requests +import tenacity +from airflow.hooks.http_hook import HttpHook +from dateutil.parser import parse +from ods.kktix_ticket_orders.udfs import klaviyo_loader + +SCHEDULE_INTERVAL_SECONDS: int = 24 * 60 * 60 +HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") +RETRY_ARGS = dict( + wait=tenacity.wait_none(), + stop=tenacity.stop_after_attempt(3), + retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError), +) + + +def main(**context): + """ + Extract user info from kktix api and load to mailer + """ + schedule_interval = context["dag"].schedule_interval + # If we change the schedule_interval, we need to update the logic in condition_filter_callback + assert schedule_interval == "0 23 * * *" # nosec + ts_datetime_obj = parse(context["ts"]) + year = ts_datetime_obj.year + timestamp = ts_datetime_obj.timestamp() + event_raw_data_array = _extract(year=year, timestamp=timestamp,) + # load name and email to mailer before data has been hashed + klaviyo_loader.load(event_raw_data_array) + print(f"Batch load {len(event_raw_data_array)} data to downstream task") + + +def _extract(year: int, timestamp: float) -> List[Dict]: + """ + get data from KKTIX's API + 1. condition_filter_callb: use this callbacl to filter out unwanted event! + 2. right now schedule_interval_seconds is a hardcoded value! + """ + event_raw_data_array: List[Dict] = [] + condition_filter_callback = ( + lambda event: str(year) in event["name"] + and "registration" in event["name"].lower() + ) + event_metadatas = get_event_metadatas(condition_filter_callback) + for event_metadata in event_metadatas: + event_id = event_metadata["id"] + for attendee_info in get_attendee_infos(event_id, timestamp): + event_raw_data_array.append( + { + "id": event_id, + "name": event_metadata["name"], + "attendee_info": attendee_info, + } + ) + return event_raw_data_array + + +def get_attendee_infos(event_id: int, timestamp: float) -> List: + """ + it's a public wrapper for people to get attendee infos! + """ + attendance_book_id = _get_attendance_book_id(event_id) + attendee_ids = _get_attendee_ids(event_id, attendance_book_id) + attendee_infos = _get_attendee_infos(event_id, attendee_ids, timestamp) + return attendee_infos + + +def get_event_metadatas(condition_filter: Callable) -> List[Dict]: + """ + Fetch all the ongoing events + """ + event_list_resp = HTTP_HOOK.run_with_advanced_retry( + endpoint="/api/v2/hosting_events?only_not_ended_event=true", + _retry_args=RETRY_ARGS, + ).json() + event_metadatas: List[dict] = [] + for event in event_list_resp["data"]: + if condition_filter(event): + event_metadatas.append(event) + return event_metadatas + + +def _get_attendance_book_id(event_id: int) -> int: + """ + Fetch attendance books + """ + attendance_books_resp = HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/api/v2/hosting_events/{event_id}/attendance_books", + _retry_args=RETRY_ARGS, + ).json() + return attendance_books_resp[0]["id"] + + +def _get_attendee_ids(event_id: int, attendance_book_id: int) -> List[int]: + """ + get all attendee ids! + """ + attendee_ids = [] + attendees_resp = HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/api/v2/hosting_events/{event_id}/attendance_books/{attendance_book_id}", + _retry_args=RETRY_ARGS, + ).json() + for signin_status_tuple in attendees_resp["signin_status"]: + attendee_ids.append(signin_status_tuple[0]) + return attendee_ids + + +def _get_attendee_infos( + event_id: int, attendee_ids: List[int], timestamp: float +) -> List: + """ + get attendee infos, e.g. email, phonenumber, name and etc + """ + attendee_infos = [] + for attendee_id in attendee_ids: + attendee_info = HTTP_HOOK.run_with_advanced_retry( + endpoint=f"/api/v2/hosting_events/{event_id}/attendees/{attendee_id}", + _retry_args=RETRY_ARGS, + ).json() + if not attendee_info["is_paid"]: + continue + if ( + timestamp + < attendee_info["updated_at"] + < timestamp + SCHEDULE_INTERVAL_SECONDS + ): + attendee_infos.append(attendee_info) + return attendee_infos diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index 85d6d95..249aca8 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -4,7 +4,7 @@ import tenacity from airflow.hooks.http_hook import HttpHook from dateutil.parser import parse -from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer +from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer, klaviyo_loader SCHEDULE_INTERVAL_SECONDS: int = 300 HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") @@ -27,8 +27,7 @@ def main(**context): timestamp = ts_datetime_obj.timestamp() event_raw_data_array = _extract(year=year, timestamp=timestamp,) # load name and email to mailer before data has been hashed - # BUG: wait for henry - # klaviyo_loader.load(event_raw_data_array) + klaviyo_loader.load(event_raw_data_array) transformed_event_raw_data_array = kktix_transformer.transform(event_raw_data_array) kktix_loader.load(transformed_event_raw_data_array) print(f"Loaded {len(transformed_event_raw_data_array)} rows to BigQuery!") diff --git a/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py b/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py index ccb1177..7c991f4 100644 --- a/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py +++ b/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py @@ -34,7 +34,7 @@ def load(event_raw_data_array: List) -> None: for item in _load_raw_data(event_raw_data_array) ] if not datas: - print("Skip klaviyo mailer, not user profiles") + print("Skip klaviyo mailer, no user profiles") return klaviyo_mailer.main( From 0a764a8c9c5539c68044ce20eebb3df650353ca3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sat, 27 Aug 2022 16:30:58 +0800 Subject: [PATCH 44/89] :bug: (gathertown) wrong slice' (#98) --- dags/ods/kktix_ticket_orders/udfs/gather_town_loader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/gather_town_loader.py b/dags/ods/kktix_ticket_orders/udfs/gather_town_loader.py index 379d73a..bf14dd3 100644 --- a/dags/ods/kktix_ticket_orders/udfs/gather_town_loader.py +++ b/dags/ods/kktix_ticket_orders/udfs/gather_town_loader.py @@ -18,7 +18,7 @@ def load(**context): event_raw_data_array = context["ti"].xcom_pull(task_ids="GET_ATTENDEE_INFOS") - for event_raw_data in event_raw_data_array[:1]: + for event_raw_data in event_raw_data_array: resp = GATHERTOWN_HTTP_HOOK.run_with_advanced_retry( endpoint="/api/setEmailGuestlist", _retry_args=RETRY_ARGS, From 827a93a31450aca68d0a5e5410c3488c1b8aa397 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sun, 28 Aug 2022 17:50:19 +0800 Subject: [PATCH 45/89] fix: add qrcode variable for mail template --- dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py | 6 ++++-- tests/kktix_ticket_orders/test_klaviyo_loader.py | 8 +++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py b/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py index 7c991f4..b4e226e 100644 --- a/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py +++ b/dags/ods/kktix_ticket_orders/udfs/klaviyo_loader.py @@ -9,11 +9,13 @@ def _load_raw_data(event_raw_data_array: List) -> Iterable: attendee_info = event["attendee_info"] # search string contains personal information and it's unstructured. Therefore just drop it! del attendee_info["search_string"] - yield { + tmp = { key: value for index, (key, value) in enumerate(attendee_info["data"]) if key in ("聯絡人 Email", "聯絡人 姓名") } + tmp.update({"qrcode": attendee_info["qrcode"]}) + yield tmp def load(event_raw_data_array: List) -> None: @@ -30,7 +32,7 @@ def load(event_raw_data_array: List) -> None: return datas = [ - {"email": item["聯絡人 Email"], "name": item["聯絡人 姓名"]} + {"email": item["聯絡人 Email"], "name": item["聯絡人 姓名"], "qrcode": item["qrcode"]} for item in _load_raw_data(event_raw_data_array) ] if not datas: diff --git a/tests/kktix_ticket_orders/test_klaviyo_loader.py b/tests/kktix_ticket_orders/test_klaviyo_loader.py index 837a5ad..c02e487 100644 --- a/tests/kktix_ticket_orders/test_klaviyo_loader.py +++ b/tests/kktix_ticket_orders/test_klaviyo_loader.py @@ -21,5 +21,11 @@ def test_klaviyo_loader(variable, mailer, kktix_api_data): list_id="abc", campaign_id="123", campaign_name="隨買即用", - datas=[{"email": "xxx@gmail.com", "name": "李xx"}], + datas=[ + { + "email": "xxx@gmail.com", + "name": "李xx", + "qrcode": "bc7bd846f49d2d2e1g833cc92gdg2cf9", + } + ], ) From c8a33671bce4e133b3e1cfa3bdfd7c452cf0d69c Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sun, 28 Aug 2022 23:09:10 +0800 Subject: [PATCH 46/89] fix: modify backfill dag end datetime --- dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py b/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py index dc2f56e..e39e88e 100644 --- a/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py +++ b/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py @@ -11,7 +11,7 @@ "owner": "henry410213028@gmail.com", "depends_on_past": False, "start_date": datetime(2022, 7, 23), - "end_date": datetime(2022, 8, 25), + "end_date": datetime(2022, 8, 29), "retries": 2, "retry_delay": timedelta(minutes=5), "on_failure_callback": lambda x: "Need to send notification to Discord!", From 845216e292b9168e44c1b4547959ce683d02a23d Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Mon, 29 Aug 2022 19:39:50 +0800 Subject: [PATCH 47/89] fix: modify backfill start date --- dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py | 6 +++--- dags/ods/kktix_ticket_orders/udfs/kktix_api.py | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py b/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py index e39e88e..1b9bb92 100644 --- a/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py +++ b/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py @@ -10,14 +10,14 @@ DEFAULT_ARGS = { "owner": "henry410213028@gmail.com", "depends_on_past": False, - "start_date": datetime(2022, 7, 23), - "end_date": datetime(2022, 8, 29), + "start_date": datetime(2022, 4, 21), + "end_date": datetime(2022, 7, 23), "retries": 2, "retry_delay": timedelta(minutes=5), "on_failure_callback": lambda x: "Need to send notification to Discord!", } dag = DAG( - "KLAVIYO_SEND_MAIL_BACKFILL_V1", + "KLAVIYO_SEND_MAIL_BACKFILL_V2", default_args=DEFAULT_ARGS, schedule_interval="0 23 * * *", max_active_runs=1, diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index 249aca8..8ec761f 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -4,7 +4,7 @@ import tenacity from airflow.hooks.http_hook import HttpHook from dateutil.parser import parse -from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer, klaviyo_loader +from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer SCHEDULE_INTERVAL_SECONDS: int = 300 HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") @@ -27,7 +27,8 @@ def main(**context): timestamp = ts_datetime_obj.timestamp() event_raw_data_array = _extract(year=year, timestamp=timestamp,) # load name and email to mailer before data has been hashed - klaviyo_loader.load(event_raw_data_array) + # wait for other services + # klaviyo_loader.load(event_raw_data_array) transformed_event_raw_data_array = kktix_transformer.transform(event_raw_data_array) kktix_loader.load(transformed_event_raw_data_array) print(f"Loaded {len(transformed_event_raw_data_array)} rows to BigQuery!") From 9d52bfda1445592f893e43f59de05fc325fd8d94 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Wed, 31 Aug 2022 20:38:37 +0800 Subject: [PATCH 48/89] fix: change mailer schedule interval from daily to hourly --- dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py | 7 +++---- dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py | 4 ++-- dags/ods/kktix_ticket_orders/udfs/kktix_api.py | 2 -- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py b/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py index 1b9bb92..be07230 100644 --- a/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py +++ b/dags/ods/kktix_ticket_orders/klaviyo_backfill_dag.py @@ -10,16 +10,15 @@ DEFAULT_ARGS = { "owner": "henry410213028@gmail.com", "depends_on_past": False, - "start_date": datetime(2022, 4, 21), - "end_date": datetime(2022, 7, 23), + "start_date": datetime(2022, 8, 29), "retries": 2, "retry_delay": timedelta(minutes=5), "on_failure_callback": lambda x: "Need to send notification to Discord!", } dag = DAG( - "KLAVIYO_SEND_MAIL_BACKFILL_V2", + "KLAVIYO_SEND_MAIL_V3", default_args=DEFAULT_ARGS, - schedule_interval="0 23 * * *", + schedule_interval="0 * * * *", max_active_runs=1, catchup=True, ) diff --git a/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py b/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py index e2792b0..855a946 100644 --- a/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py +++ b/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py @@ -6,7 +6,7 @@ from dateutil.parser import parse from ods.kktix_ticket_orders.udfs import klaviyo_loader -SCHEDULE_INTERVAL_SECONDS: int = 24 * 60 * 60 +SCHEDULE_INTERVAL_SECONDS: int = 60 * 60 HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") RETRY_ARGS = dict( wait=tenacity.wait_none(), @@ -21,7 +21,7 @@ def main(**context): """ schedule_interval = context["dag"].schedule_interval # If we change the schedule_interval, we need to update the logic in condition_filter_callback - assert schedule_interval == "0 23 * * *" # nosec + assert schedule_interval == "0 * * * *" # nosec ts_datetime_obj = parse(context["ts"]) year = ts_datetime_obj.year timestamp = ts_datetime_obj.timestamp() diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index 8ec761f..f067bba 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -27,8 +27,6 @@ def main(**context): timestamp = ts_datetime_obj.timestamp() event_raw_data_array = _extract(year=year, timestamp=timestamp,) # load name and email to mailer before data has been hashed - # wait for other services - # klaviyo_loader.load(event_raw_data_array) transformed_event_raw_data_array = kktix_transformer.transform(event_raw_data_array) kktix_loader.load(transformed_event_raw_data_array) print(f"Loaded {len(transformed_event_raw_data_array)} rows to BigQuery!") From 1b8b1504296406b3797eed2f692a171282f57195 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Wed, 31 Aug 2022 21:00:04 +0800 Subject: [PATCH 49/89] fix: dependencies installation error --- poetry.lock | 1332 +++++++----------------------------------------- pyproject.toml | 1 + 2 files changed, 192 insertions(+), 1141 deletions(-) diff --git a/poetry.lock b/poetry.lock index 015953f..0bb4626 100644 --- a/poetry.lock +++ b/poetry.lock @@ -73,7 +73,7 @@ werkzeug = "<1.0.0" "zope.deprecation" = ">=4.0,<5.0" [package.extras] -all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[kerberos,avro,dataframe] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] +all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[avro,kerberos,dataframe] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] all_dbs = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "snakebite (>=2.7.8)", "snakebite-py3"] amazon = ["boto3 (>=1.10,<2.0)"] "apache.atlas" = ["atlasclient (>=0.1.2)"] @@ -83,7 +83,7 @@ amazon = ["boto3 (>=1.10,<2.0)"] "apache.hive" = ["hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)"] "apache.pinot" = ["pinotdb (==0.1.1)"] "apache.presto" = ["presto-python-client (>=0.7.0,<0.8)"] -"apache.webhdfs" = ["hdfs[kerberos,avro,dataframe] (>=2.0.4)"] +"apache.webhdfs" = ["hdfs[avro,kerberos,dataframe] (>=2.0.4)"] async = ["eventlet (>=0.9.7)", "gevent (>=0.13)", "greenlet (>=0.4.9)"] atlas = ["atlasclient (>=0.1.2)"] aws = ["boto3 (>=1.10,<2.0)"] @@ -103,10 +103,10 @@ dask = ["distributed (>=1.17.1,<2)"] databricks = ["requests (>=2.20.0,<3)"] datadog = ["datadog (>=0.14.0)"] devel = ["boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "sphinx (==1.8.5)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "sphinx-copybutton"] -devel_all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[kerberos,avro,dataframe] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] +devel_all = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[avro,kerberos,dataframe] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] devel_azure = ["azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "sphinx (==1.8.5)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "sphinx-copybutton"] -devel_ci = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[kerberos,avro,dataframe] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] -devel_hadoop = ["boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "presto-python-client (>=0.7.0,<0.8)", "hdfs[kerberos,avro,dataframe] (>=2.0.4)", "sphinx (==1.8.5)", "snakebite (>=2.7.8)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "snakebite-py3", "sphinx-copybutton"] +devel_ci = ["cassandra-driver (>=3.13.0,<3.21.0)", "cloudant (>=0.5.9,<2.0)", "pydruid (>=0.4.1,<=0.5.8)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "dnspython (>=1.13.0,<2.0.0)", "pymongo (>=3.6.0,<3.11.0)", "pymssql (>=2.1.1,<2.2.0)", "mysqlclient (>=1.3.6,<1.4)", "pinotdb (==0.1.1)", "psycopg2-binary (>=2.7.4)", "presto-python-client (>=0.7.0,<0.8)", "vertica-python (>=0.5.1)", "atlasclient (>=0.1.2)", "boto3 (>=1.10,<2.0)", "azure-storage (>=0.34.0,<0.37.0)", "azure-storage-blob (<12.0)", "azure-mgmt-containerinstance (>=1.5.0,<2)", "azure-cosmos (>=3.0.1,<4)", "azure-datalake-store (>=0.0.45azure-mgmt-datalake-store)", "azure-mgmt-resource (>=2.2.0)", "azure-identity (>=1.3.1)", "azure-keyvault (>=4.1.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "celery (>=4.3,<5.0)", "flower (>=0.7.3,<1.0)", "tornado (>=4.2.0,<6.0)", "vine (>=1.3,<2.0)", "datadog (>=0.14.0)", "docker (>=3.0,<4.0)", "elasticsearch (>=5.0.0,<6.0.0)", "elasticsearch-dsl (>=5.0.0,<6.0.0)", "pyopenssl", "google-api-python-client (>=1.6.0,<2.0.0)", "google-auth (>=1.0.0,<2.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-bigtable (>=1.0.0,<2.0.0)", "google-cloud-container (>=0.1.1,<2.0.0)", "google-cloud-dlp (>=0.11.0,<2.0.0)", "google-cloud-language (>=1.1.1,<2.0.0)", "google-cloud-secret-manager (>=0.2.0,<2.0.0)", "google-cloud-spanner (>=1.10.0,<2.0.0)", "google-cloud-speech (>=0.36.3,<2.0.0)", "google-cloud-storage (>=1.16,<2.0.0)", "google-cloud-texttospeech (>=0.4.0,<2)", "google-cloud-translate (>=1.3.3,<2.0.0)", "google-cloud-videointelligence (>=1.7.0,<2.0.0)", "google-cloud-vision (>=0.35.2,<2.0.0)", "grpcio-gcp (>=0.2.2)", "pandas-gbq", "grpcio (>=1.15.0)", "hvac (>=0.10,<1.0)", "JPype1 (==0.7.1)", "jaydebeapi (>=1.1.1)", "python-jenkins (>=1.0.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "ldap3 (>=2.5.1)", "papermill[all] (>=1.0.0)", "nteract-scrapbook[all] (>=0.2.1)", "pyarrow (<1.0.0)", "amqp", "redis (>=3.2,<4.0)", "pysmbclient (>=0.1.3)", "analytics-python (>=1.2.9)", "sendgrid (>=5.2.0,<6)", "blinker (>=1.1)", "sentry-sdk (>=0.8.0)", "slackclient (>=1.0.0,<2.0.0)", "snowflake-connector-python (>=1.5.2)", "snowflake-sqlalchemy (>=1.1.0)", "paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)", "virtualenv", "hdfs[avro,kerberos,dataframe] (>=2.0.4)", "zdesk", "snakebite (>=2.7.8)", "sphinx (==1.8.5)", "kombu (==4.6.3)", "cryptography (>=0.9.3,<3.2)", "cx-Oracle (>=5.1.2,<8.0)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "fsspec (<0.8.0)", "snakebite-py3", "sphinx (>=2.1.2)", "cryptography (>=0.9.3)", "cx-Oracle (>=5.1.2)", "sphinx-copybutton"] +devel_hadoop = ["boto3 (>=1.10,<2.0)", "cgroupspy (>=0.1.4)", "beautifulsoup4 (>=4.7.1,<4.8.0)", "click (==6.7)", "coverage", "flake8 (>=3.6.0)", "flake8-colors", "flaky", "freezegun", "gitpython", "ipdb", "jira", "mongomock", "moto (==1.3.14)", "packaging", "parameterized", "paramiko", "pre-commit", "pysftp", "pytest (<6.0.0)", "pytest-cov", "pytest-instafail", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "yamllint", "mypy (==0.720)", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "cryptography (>=2.0.0)", "kubernetes (>=3.0.0,<12.0.0)", "mysqlclient (>=1.3.6,<1.4)", "bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)", "hmsclient (>=0.1.0)", "pyhive[hive] (>=0.6.0)", "pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)", "presto-python-client (>=0.7.0,<0.8)", "hdfs[avro,kerberos,dataframe] (>=2.0.4)", "sphinx (==1.8.5)", "snakebite (>=2.7.8)", "mock", "contextdecorator", "importlib-metadata (>=2.0,<3.0)", "sphinx (>=2.1.2)", "snakebite-py3", "sphinx-copybutton"] doc = ["sphinx-argparse (>=0.1.13)", "sphinx-autoapi (==1.0.0)", "sphinx-jinja (>=1.1,<2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinx (==1.8.5)", "sphinx (>=2.1.2)", "sphinx-copybutton"] docker = ["docker (>=3.0,<4.0)"] druid = ["pydruid (>=0.4.1,<=0.5.8)"] @@ -153,7 +153,7 @@ ssh = ["paramiko (>=2.1.1)", "pysftp (>=0.2.9)", "sshtunnel (>=0.1.4,<0.2)"] statsd = ["statsd (>=3.3.0,<4.0)"] vertica = ["vertica-python (>=0.5.1)"] virtualenv = ["virtualenv"] -webhdfs = ["hdfs[kerberos,avro,dataframe] (>=2.0.4)"] +webhdfs = ["hdfs[avro,kerberos,dataframe] (>=2.0.4)"] winrm = ["pywinrm (>=0.4,<1.0)"] [[package]] @@ -388,6 +388,14 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" natsort = "*" python-dateutil = "*" +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + [[package]] name = "dill" version = "0.3.4" @@ -408,11 +416,11 @@ optional = false python-versions = ">=3.6" [package.extras] -dnssec = ["cryptography (>=2.6)"] -doh = ["requests", "requests-toolbelt"] +trio = ["sniffio (>=1.1)", "trio (>=0.14.0)"] +curio = ["sniffio (>=1.1)", "curio (>=1.2)"] idna = ["idna (>=2.1)"] -curio = ["curio (>=1.2)", "sniffio (>=1.1)"] -trio = ["trio (>=0.14.0)", "sniffio (>=1.1)"] +doh = ["requests-toolbelt", "requests"] +dnssec = ["cryptography (>=2.6)"] [[package]] name = "docutils" @@ -479,9 +487,9 @@ Jinja2 = ">=2.10.1,<3.0" Werkzeug = ">=0.15,<2.0" [package.extras] -dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"] -docs = ["sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"] dotenv = ["python-dotenv"] +docs = ["sphinx-issues", "sphinxcontrib-log-cabinet", "pallets-sphinx-themes", "sphinx"] +dev = ["sphinx-issues", "sphinxcontrib-log-cabinet", "pallets-sphinx-themes", "sphinx", "tox", "coverage", "pytest"] [[package]] name = "flask-admin" @@ -597,15 +605,15 @@ requests-oauthlib = ">=0.6.2,<1.2.0" [[package]] name = "flask-openid" -version = "1.2.5" +version = "1.3.0" description = "OpenID support for Flask" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.0" [package.dependencies] -Flask = ">=0.3" -python-openid = ">=2.0" +Flask = ">=0.10.1" +python3-openid = ">=2.0" [[package]] name = "flask-sqlalchemy" @@ -699,9 +707,9 @@ protobuf = ">=3.12.0" requests = ">=2.18.0,<3.0.0dev" [package.extras] -grpc = ["grpcio (>=1.33.2,<2.0dev)"] -grpcgcp = ["grpcio-gcp (>=0.2.2)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2)"] +grpcgcp = ["grpcio-gcp (>=0.2.2)"] +grpc = ["grpcio (>=1.33.2,<2.0dev)"] [[package]] name = "google-api-python-client" @@ -732,9 +740,9 @@ pyasn1-modules = ">=0.2.1" rsa = ">=3.1.4,<5" [package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] -pyopenssl = ["pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] +pyopenssl = ["pyopenssl (>=20.0.0)"] +aiohttp = ["requests (>=2.20.0,<3.0.0dev)", "aiohttp (>=3.6.2,<4.0.0dev)"] [[package]] name = "google-auth-httplib2" @@ -831,8 +839,8 @@ python-versions = ">= 3.6" google-crc32c = ">=1.0,<2.0dev" [package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"] requests = ["requests (>=2.18.0,<3.0.0dev)"] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"] [[package]] name = "googleapis-common-protos" @@ -920,8 +928,8 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" zipp = ">=0.5" [package.extras] -docs = ["sphinx", "rst.linker"] -testing = ["packaging", "pep517", "unittest2", "importlib-resources (>=1.3)"] +testing = ["importlib-resources (>=1.3)", "unittest2", "pep517", "packaging"] +docs = ["rst.linker", "sphinx"] [[package]] name = "iso8601" @@ -940,10 +948,10 @@ optional = false python-versions = ">=3.6.1,<4.0" [package.extras] +plugins = ["setuptools"] +colors = ["colorama (>=0.4.3,<0.5.0)"] pipfile_deprecated_finder = ["pipreqs", "requirementslib"] requirements_deprecated_finder = ["pipreqs", "pip-api"] -colors = ["colorama (>=0.4.3,<0.5.0)"] -plugins = ["setuptools"] [[package]] name = "itsdangerous" @@ -1239,7 +1247,7 @@ python-versions = "*" six = "*" [package.extras] -dev = ["nose", "pipreqs", "twine"] +dev = ["twine", "pipreqs", "nose"] [[package]] name = "proto-plus" @@ -1443,7 +1451,7 @@ docutils = "*" lockfile = ">=0.10" [package.extras] -test = ["coverage", "docutils", "testscenarios (>=0.4)", "testtools"] +test = ["testtools", "testscenarios (>=0.4)", "docutils", "coverage"] [[package]] name = "python-dateutil" @@ -1508,14 +1516,6 @@ python-versions = "*" Jinja2 = ">=2.8" python-slugify = ">=1.2.5" -[[package]] -name = "python-openid" -version = "2.2.5" -description = "OpenID support for servers and consumers." -category = "main" -optional = false -python-versions = "*" - [[package]] name = "python-slugify" version = "4.0.1" @@ -1530,6 +1530,21 @@ text-unidecode = ">=1.3" [package.extras] unidecode = ["Unidecode (>=1.1.1)"] +[[package]] +name = "python3-openid" +version = "3.2.0" +description = "OpenID support for modern servers and consumers." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +defusedxml = "*" + +[package.extras] +mysql = ["mysql-connector-python"] +postgresql = ["psycopg2"] + [[package]] name = "pytz" version = "2021.1" @@ -1926,795 +1941,117 @@ test = ["zope.testrunner"] [metadata] lock-version = "1.1" python-versions = "^3.7.1" -content-hash = "b679347e0eac32734d072a02170510b455d4498953b2e1565fb5c8b545e2c322" +content-hash = "38ed366f6d7284daf57ee9fb3ca13ee3ef37456d780d86534980f9419e647d35" [metadata.files] -alembic = [ - {file = "alembic-1.6.5-py2.py3-none-any.whl", hash = "sha256:e78be5b919f5bb184e3e0e2dd1ca986f2362e29a2bc933c446fe89f39dbe4e9c"}, - {file = "alembic-1.6.5.tar.gz", hash = "sha256:a21fedebb3fb8f6bbbba51a11114f08c78709377051384c9c5ead5705ee93a51"}, -] -apache-airflow = [ - {file = "apache-airflow-1.10.13.tar.gz", hash = "sha256:bb637f95a2aef7b2f7d622ecda150d6a5794011bd9e8d610ab0e9a1f518325e9"}, - {file = "apache_airflow-1.10.13-py2.py3-none-any.whl", hash = "sha256:7aa176a159d90b4e93a15c1920201ffd136dcdc351a840d2ace8739b6b893f71"}, -] -apispec = [ - {file = "apispec-1.3.3-py2.py3-none-any.whl", hash = "sha256:13088129b657789671d18e5022f4f9e6ec9ec38742d301285232f11d1d35976c"}, - {file = "apispec-1.3.3.tar.gz", hash = "sha256:de3c6cb97b50e16a0123ddd449002f10a48fafdd789fcfe7771d60d36b700ea1"}, -] -appdirs = [ - {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, - {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, -] -argcomplete = [ - {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"}, - {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, - {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, -] -babel = [ - {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, - {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, -] -bandit = [ - {file = "bandit-1.7.0-py3-none-any.whl", hash = "sha256:216be4d044209fa06cf2a3e51b319769a51be8318140659719aa7a115c35ed07"}, - {file = "bandit-1.7.0.tar.gz", hash = "sha256:8a4c7415254d75df8ff3c3b15cfe9042ecee628a1e40b44c15a98890fbfc2608"}, -] -black = [ - {file = "black-19.10b0-py36-none-any.whl", hash = "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b"}, - {file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"}, -] -cached-property = [ - {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, - {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, -] -cachelib = [ - {file = "cachelib-0.6.0-py3-none-any.whl", hash = "sha256:6da323fdb16c9f53424a229132646a469b2d046e687fa353b92303910c99bc18"}, - {file = "cachelib-0.6.0.tar.gz", hash = "sha256:0baa926a23924c04ae1354091478b15b3b24e6cf5931dd159452afda5f65babd"}, -] -cachetools = [ - {file = "cachetools-4.2.2-py3-none-any.whl", hash = "sha256:2cc0b89715337ab6dbba85b5b50effe2b0c74e035d83ee8ed637cf52f12ae001"}, - {file = "cachetools-4.2.2.tar.gz", hash = "sha256:61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff"}, -] -cattrs = [ - {file = "cattrs-1.6.0-py3-none-any.whl", hash = "sha256:c8de53900e3acad94ca83750eb12bb38aa85ce9114be47177c943e2f0eca63b0"}, - {file = "cattrs-1.6.0.tar.gz", hash = "sha256:3e2cd5dc8a1006d5da53ddcbf4f0b1dd3a21e294323b257678d0a96721f8253a"}, -] +alembic = [] +apache-airflow = [] +apispec = [] +appdirs = [] +argcomplete = [] +atomicwrites = [] +attrs = [] +babel = [] +bandit = [] +black = [] +cached-property = [] +cachelib = [] +cachetools = [] +cattrs = [] certifi = [ {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"}, {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"}, ] -cffi = [ - {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"}, - {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"}, - {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"}, - {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"}, - {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"}, - {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"}, - {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"}, - {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"}, - {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"}, - {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"}, - {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"}, - {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"}, - {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"}, - {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"}, - {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"}, - {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"}, - {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"}, - {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"}, - {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"}, - {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"}, - {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"}, - {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"}, - {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"}, - {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"}, - {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"}, - {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"}, -] -click = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -colorlog = [ - {file = "colorlog-4.0.2-py2.py3-none-any.whl", hash = "sha256:450f52ea2a2b6ebb308f034ea9a9b15cea51e65650593dca1da3eb792e4e4981"}, - {file = "colorlog-4.0.2.tar.gz", hash = "sha256:3cf31b25cbc8f86ec01fef582ef3b840950dea414084ed19ab922c8b493f9b42"}, -] -configparser = [ - {file = "configparser-3.5.3-py2-none-any.whl", hash = "sha256:561d6a2303a3e9afaafbaa9f459b2a16e5d49f5390954cd4e6ce1a4bfbd8f726"}, - {file = "configparser-3.5.3-py3-none-any.whl", hash = "sha256:18873eb33d111429143eef0ad334f76abdf9736d5da1219de513d74b0a559674"}, - {file = "configparser-3.5.3.tar.gz", hash = "sha256:adaba55d292e94fac7a1080de30ea776139ea48b65db869659e87357f10c55d2"}, -] -coverage = [ - {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, - {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, - {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"}, - {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"}, - {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"}, - {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"}, - {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"}, - {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"}, - {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"}, - {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"}, - {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"}, - {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"}, - {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"}, - {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"}, - {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"}, - {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"}, - {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"}, - {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"}, - {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"}, - {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"}, - {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"}, - {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"}, - {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"}, - {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"}, - {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"}, - {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"}, - {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"}, - {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"}, - {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"}, - {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"}, - {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"}, - {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"}, - {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"}, - {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"}, - {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"}, - {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"}, - {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"}, - {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"}, - {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"}, - {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"}, - {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"}, - {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"}, - {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"}, - {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"}, - {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"}, - {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"}, - {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, - {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, -] -croniter = [ - {file = "croniter-0.3.37-py2.py3-none-any.whl", hash = "sha256:8f573a889ca9379e08c336193435c57c02698c2dd22659cdbe04fee57426d79b"}, - {file = "croniter-0.3.37.tar.gz", hash = "sha256:12ced475dfc107bf7c6c1440af031f34be14cd97bbbfaf0f62221a9c11e86404"}, -] -dill = [ - {file = "dill-0.3.4-py2.py3-none-any.whl", hash = "sha256:7e40e4a70304fd9ceab3535d36e58791d9c4a776b38ec7f7ec9afc8d3dca4d4f"}, - {file = "dill-0.3.4.zip", hash = "sha256:9f9734205146b2b353ab3fec9af0070237b6ddae78452af83d2fca84d739e675"}, -] -dnspython = [ - {file = "dnspython-2.1.0-py3-none-any.whl", hash = "sha256:95d12f6ef0317118d2a1a6fc49aac65ffec7eb8087474158f42f26a639135216"}, - {file = "dnspython-2.1.0.zip", hash = "sha256:e4a87f0b573201a0f3727fa18a516b055fd1107e0e5477cded4a2de497df1dd4"}, -] -docutils = [ - {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, - {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, -] -dparse = [ - {file = "dparse-0.5.1-py3-none-any.whl", hash = "sha256:e953a25e44ebb60a5c6efc2add4420c177f1d8404509da88da9729202f306994"}, - {file = "dparse-0.5.1.tar.gz", hash = "sha256:a1b5f169102e1c894f9a7d5ccf6f9402a836a5d24be80a986c7ce9eaed78f367"}, -] -email-validator = [ - {file = "email_validator-1.1.3-py2.py3-none-any.whl", hash = "sha256:5675c8ceb7106a37e40e2698a57c056756bf3f272cfa8682a4f87ebd95d8440b"}, - {file = "email_validator-1.1.3.tar.gz", hash = "sha256:aa237a65f6f4da067119b7df3f13e89c25c051327b2b5b66dc075f33d62480d7"}, -] -flake8 = [ - {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, - {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, -] -flask = [ - {file = "Flask-1.1.4-py2.py3-none-any.whl", hash = "sha256:c34f04500f2cbbea882b1acb02002ad6fe6b7ffa64a6164577995657f50aed22"}, - {file = "Flask-1.1.4.tar.gz", hash = "sha256:0fbeb6180d383a9186d0d6ed954e0042ad9f18e0e8de088b2b419d526927d196"}, -] -flask-admin = [ - {file = "Flask-Admin-1.5.4.tar.gz", hash = "sha256:ed7b256471dba0f3af74f1a315733c3b36244592f2002c3bbdc65fd7c2aa807a"}, -] -flask-appbuilder = [ - {file = "Flask-AppBuilder-2.3.0.tar.gz", hash = "sha256:2cdf552f115eafe36456c9015162d4cae0275c68792015806a58a97622d77a11"}, - {file = "Flask_AppBuilder-2.3.0-py3-none-any.whl", hash = "sha256:92d3d088c475138cf455b9516e969d9a2b54039a3c9143f65b84b8d0d5cd5d41"}, -] -flask-babel = [ - {file = "Flask-Babel-1.0.0.tar.gz", hash = "sha256:d6a70468f9a8919d59fba2a291a003da3a05ff884275dddbd965f3b98b09ab3e"}, - {file = "Flask_Babel-1.0.0-py3-none-any.whl", hash = "sha256:247f4ec34cf605d03781f480bccb1a5acb719df1d1a2a743c091ab3db5d5fde2"}, -] -flask-caching = [ - {file = "Flask-Caching-1.3.3.tar.gz", hash = "sha256:5af1759e5ae3424abec918537f0201a1476ae9442452bcb5c8787468a9de0f5a"}, - {file = "Flask_Caching-1.3.3-py2.py3-none-any.whl", hash = "sha256:21236d2b4567deb9fc95e474a604602097189e834629c24f4d62937abc963636"}, -] -flask-jwt-extended = [ - {file = "Flask-JWT-Extended-3.25.1.tar.gz", hash = "sha256:bbf4467f41c56cf1fd8a5870d2556f419c572aad2b4085757581c3f9b4d7767a"}, -] -flask-login = [ - {file = "Flask-Login-0.4.1.tar.gz", hash = "sha256:c815c1ac7b3e35e2081685e389a665f2c74d7e077cb93cecabaea352da4752ec"}, -] -flask-oauthlib = [ - {file = "Flask-OAuthlib-0.9.6.tar.gz", hash = "sha256:5bb79c8a8e670c2eb4cb553dfc3283b6c8d1202f674934676dc173cee94fe39c"}, - {file = "Flask_OAuthlib-0.9.6-py3-none-any.whl", hash = "sha256:a5c3b62959aa1922470a62b6ebf4273b75f1c29561a7eb4a69cde85d45a1d669"}, -] -flask-openid = [ - {file = "Flask-OpenID-1.2.5.tar.gz", hash = "sha256:5a8ffe1c8c0ad1cc1f5030e1223ea27f8861ee0215a2a58a528cc61379e5ccab"}, -] -flask-sqlalchemy = [ - {file = "Flask-SQLAlchemy-2.5.1.tar.gz", hash = "sha256:2bda44b43e7cacb15d4e05ff3cc1f8bc97936cc464623424102bfc2c35e95912"}, - {file = "Flask_SQLAlchemy-2.5.1-py2.py3-none-any.whl", hash = "sha256:f12c3d4cc5cc7fdcc148b9527ea05671718c3ea45d50c7e732cceb33f574b390"}, -] -flask-swagger = [ - {file = "flask-swagger-0.2.14.tar.gz", hash = "sha256:b4085f5bc36df4c20b6548cd1413adc9cf35719b0f0695367cd542065145294d"}, - {file = "flask_swagger-0.2.14-py2-none-any.whl", hash = "sha256:3caddb1311388eafc86f82f8e64ba386a5df6b84e5f16dfae19ca08173eba216"}, -] -flask-wtf = [ - {file = "Flask-WTF-0.14.3.tar.gz", hash = "sha256:d417e3a0008b5ba583da1763e4db0f55a1269d9dd91dcc3eb3c026d3c5dbd720"}, - {file = "Flask_WTF-0.14.3-py2.py3-none-any.whl", hash = "sha256:57b3faf6fe5d6168bda0c36b0df1d05770f8e205e18332d0376ddb954d17aef2"}, -] -funcsigs = [ - {file = "funcsigs-1.0.2-py2.py3-none-any.whl", hash = "sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca"}, - {file = "funcsigs-1.0.2.tar.gz", hash = "sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"}, -] -future = [ - {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, -] -gitdb = [ - {file = "gitdb-4.0.7-py3-none-any.whl", hash = "sha256:6c4cc71933456991da20917998acbe6cf4fb41eeaab7d6d67fbc05ecd4c865b0"}, - {file = "gitdb-4.0.7.tar.gz", hash = "sha256:96bf5c08b157a666fec41129e6d327235284cca4c81e92109260f353ba138005"}, -] -gitpython = [ - {file = "GitPython-3.1.20-py3-none-any.whl", hash = "sha256:b1e1c269deab1b08ce65403cf14e10d2ef1f6c89e33ea7c5e5bb0222ea593b8a"}, - {file = "GitPython-3.1.20.tar.gz", hash = "sha256:df0e072a200703a65387b0cfdf0466e3bab729c0458cf6b7349d0e9877636519"}, -] -google-api-core = [ - {file = "google-api-core-2.0.0.tar.gz", hash = "sha256:bd9eb0709f4e10dd6fddb32fd0788a190b434426c258be6e00ef40da136d768d"}, - {file = "google_api_core-2.0.0-py2.py3-none-any.whl", hash = "sha256:428805de17b48ca1af2fdb5bbfc2334e1bbcb0ea4a16506fa1337fb29c8f37c8"}, -] -google-api-python-client = [ - {file = "google-api-python-client-2.17.0.tar.gz", hash = "sha256:20bc8f711883f9f8f96d96bc44b40ad0e2b0a9ef7df53e7c738948584fddd1c2"}, - {file = "google_api_python_client-2.17.0-py2.py3-none-any.whl", hash = "sha256:26402b51b21480e5f2de2650f4dc41d19db031ce28d26047f30dad0803fbf27d"}, -] -google-auth = [ - {file = "google-auth-2.0.1.tar.gz", hash = "sha256:ea1af050b3e06eb73e4470f704d23007307bc0e87c13e015f6b90460f1407bd3"}, - {file = "google_auth-2.0.1-py2.py3-none-any.whl", hash = "sha256:c012c8be7c442c8309ca8fa0876fef33f5fd977c467be1e1c1c2f721e8ebd73c"}, -] -google-auth-httplib2 = [ - {file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"}, - {file = "google_auth_httplib2-0.1.0-py2.py3-none-any.whl", hash = "sha256:31e49c36c6b5643b57e82617cb3e021e3e1d2df9da63af67252c02fa9c1f4a10"}, -] -google-auth-oauthlib = [ - {file = "google-auth-oauthlib-0.4.5.tar.gz", hash = "sha256:4ab58e6c3dc6ccf112f921fcced40e5426fba266768986ea502228488276eaba"}, - {file = "google_auth_oauthlib-0.4.5-py2.py3-none-any.whl", hash = "sha256:b5a1ce7c617d247ccb2dfbba9d4bfc734b41096803d854a2c52592ae80150a67"}, -] -google-cloud-bigquery = [ - {file = "google-cloud-bigquery-2.24.1.tar.gz", hash = "sha256:8111d23e2af87a96c0646a82a83f62d694b6c8829e7881eb4e437b754471649f"}, - {file = "google_cloud_bigquery-2.24.1-py2.py3-none-any.whl", hash = "sha256:f9d118a0e408d213f00eb3b5bfb07027a79a6604b078dae86276f6c4938a9c9a"}, -] -google-cloud-core = [ - {file = "google-cloud-core-2.0.0.tar.gz", hash = "sha256:90ee99648ccf9e11a16781a7fc58d13e58f662b439c737d48c24ef18662c2702"}, - {file = "google_cloud_core-2.0.0-py2.py3-none-any.whl", hash = "sha256:31785d1e1d02f90ad3f1b020d4aed63db4865c3394ff7c128a296b6995eef31f"}, -] -google-crc32c = [ - {file = "google-crc32c-1.1.2.tar.gz", hash = "sha256:dff5bd1236737f66950999d25de7a78144548ebac7788d30ada8c1b6ead60b27"}, - {file = "google_crc32c-1.1.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:8ed8f6dc4f55850cba2eb22b78902ad37f397ee02692d3b8e00842e9af757321"}, - {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:110157fb19ab5db15603debfaf5fcfbac9627576787d9caf8618ff96821a7a1f"}, - {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:80abca603187093ea089cd1215c3779040dda55d3cdabc0cd5ea0e10df7bff99"}, - {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:6789db0b12aab12a0f04de22ed8412dfa5f6abd5a342ea19f15355064e1cc387"}, - {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:ea170341a4a9078a067b431044cd56c73553425833a7c2bb81734777a230ad4b"}, - {file = "google_crc32c-1.1.2-cp36-cp36m-win32.whl", hash = "sha256:a64e0e8ed6076a8d867fc4622ad821c55eba8dff1b48b18f56b7c2392e22ab9d"}, - {file = "google_crc32c-1.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9372211acbcc207f63ffaffea1d05f3244a21311e4710721ffff3e8b7a0d24d0"}, - {file = "google_crc32c-1.1.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:0ae3cf54e0d4d83c8af1afe96fc0970fbf32f1b29275f3bfd44ce25c4b622a2b"}, - {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:34a97937f164147aefa53c3277364fd3bfa7fd244cbebbd5a976fa8325fb496b"}, - {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:91ad96ee2958311d0bb75ffe5c25c87fb521ef547c09e04a8bb6143e75fb1367"}, - {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b5ea1055fe470334ced844270e7c808b04fe31e3e6394675daa77f6789ca9eff"}, - {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:e6458c41236d37cb982120b070ebcc115687c852bee24cdd18792da2640cf44d"}, - {file = "google_crc32c-1.1.2-cp37-cp37m-win32.whl", hash = "sha256:e5af77656e8d367701f40f80a91c985ca43319f322f0a36ba9f93909d0bc4cb2"}, - {file = "google_crc32c-1.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ae7b9e7e2ca1b06c3a68b6ef223947a52c30ffae329b1a2be3402756073f2732"}, - {file = "google_crc32c-1.1.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:7c5138ed2e815189ba524756e027ac5833365e86115b1c2e6d9e833974a58d82"}, - {file = "google_crc32c-1.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a6c8a712ffae56c805ca732b735af02860b246bed2c1acb38ea954a8b2dc4581"}, - {file = "google_crc32c-1.1.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:49838ede42592154f9fcd21d07c7a43a67b00a36e252f82ae72542fde09dc51f"}, - {file = "google_crc32c-1.1.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:ef2ed6d0ac4de4ac602903e203eccd25ec8e37f1446fe1a3d2953a658035e0a5"}, - {file = "google_crc32c-1.1.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:51f4aa06125bf0641f65fb83268853545dbeb36b98ccfec69ef57dcb6b73b176"}, - {file = "google_crc32c-1.1.2-cp38-cp38-win32.whl", hash = "sha256:1dc6904c0d958f43102c85d70792cca210d3d051ddbeecd0eff10abcd981fdfa"}, - {file = "google_crc32c-1.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:298a9a922d35b123a73be80233d0f19c6ea01f008743561a8937f9dd83fb586b"}, - {file = "google_crc32c-1.1.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:ab2b31395fbeeae6d15c98bd7f8b9fb76a18f18f87adc11b1f6dbe8f90d8382f"}, - {file = "google_crc32c-1.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d4a0d4fb938c2c3c0076445c9bd1215a3bd3df557b88d8b05ec2889ca0c92f8d"}, - {file = "google_crc32c-1.1.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:d0630670d27785d7e610e72752dc8087436d00d2c7115e149c0a754babb56d3e"}, - {file = "google_crc32c-1.1.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:364eb36e8d9d34542c17b0c410035b0557edd4300a92ed736b237afaa0fd6dae"}, - {file = "google_crc32c-1.1.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:0dd9b61d0c63043b013349c9ec8a83ec2b05c96410c5bc257da5d0de743fc171"}, - {file = "google_crc32c-1.1.2-cp39-cp39-win32.whl", hash = "sha256:92ed6062792b989e84621e07a5f3d37da9cc3153b77d23a582921f14863af31d"}, - {file = "google_crc32c-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:78cf5b1bd30f3a6033b41aa4ce8c796870bc4645a15d3ef47a4b05d31b0a6dc1"}, -] -google-resumable-media = [ - {file = "google-resumable-media-2.0.0.tar.gz", hash = "sha256:094c0381734649ac939083ea3833bd239b7fba904d246342d1268984029f2167"}, - {file = "google_resumable_media-2.0.0-py2.py3-none-any.whl", hash = "sha256:c65f9e08a4fe1df532138c8f00eeafcd7fe0d4db35dff70d7428b6ea659b2888"}, -] -googleapis-common-protos = [ - {file = "googleapis-common-protos-1.53.0.tar.gz", hash = "sha256:a88ee8903aa0a81f6c3cec2d5cf62d3c8aa67c06439b0496b49048fb1854ebf4"}, - {file = "googleapis_common_protos-1.53.0-py2.py3-none-any.whl", hash = "sha256:f6d561ab8fb16b30020b940e2dd01cd80082f4762fa9f3ee670f4419b4b8dbd0"}, -] -graphviz = [ - {file = "graphviz-0.17-py3-none-any.whl", hash = "sha256:5dadec94046d82adaae6019311a30e0487536d9d5a60d85451f0ba32f9fc6559"}, - {file = "graphviz-0.17.zip", hash = "sha256:ef6e2c5deb9cdcc0c7eece1d89625fd07b0f2208ea2bcb483520907ddf8b4e12"}, -] -grpcio = [ - {file = "grpcio-1.39.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:4163e022f365406be2da78db890035463371effea172300ce5af8a768142baf3"}, - {file = "grpcio-1.39.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:02e8a8b41db8e13df53078355b439363e4ac46d0ac9a8a461a39e42829e2bcf8"}, - {file = "grpcio-1.39.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:050901a5baa6c4ca445e1781ef4c32d864f965ccec70c46cd5ad92d15e282c6a"}, - {file = "grpcio-1.39.0-cp27-cp27m-win32.whl", hash = "sha256:1ab44dde4e1b225d3fc873535ca6e642444433131dd2891a601b75fb46c87c11"}, - {file = "grpcio-1.39.0-cp27-cp27m-win_amd64.whl", hash = "sha256:25731b2c20a4ed51bea7e3952d5e83d408a5df32d03c7553457b2e6eb8bcb16c"}, - {file = "grpcio-1.39.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:a2733994b05ee5382da1d0378f6312b72c5cb202930c7fa20c794a24e96a1a34"}, - {file = "grpcio-1.39.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4039645b8b5d19064766f3a6fa535f1db52a61c4d4de97a6a8945331a354d527"}, - {file = "grpcio-1.39.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:7b95b3329446408e2fe6db9b310d263303fa1a94649d08ec1e1cc12506743d26"}, - {file = "grpcio-1.39.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:2a4308875b9b986000513c6b04c2e7424f436a127f15547036c42d3cf8289374"}, - {file = "grpcio-1.39.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:4b3fcc1878a1a5b71e1ecdfe82c74f7cd9eadaa43e25be0d67676dcec0c9d39f"}, - {file = "grpcio-1.39.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:6d51be522b573cec14798d4742efaa69d234bedabce122fec2d5489abb3724d4"}, - {file = "grpcio-1.39.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:43c57987e526d1b893b85099424387b22de6e3eee4ea7188443de8d657d11cc0"}, - {file = "grpcio-1.39.0-cp35-cp35m-win32.whl", hash = "sha256:cd2e39a199bcbefb3f4b9fa6677c72b0e67332915550fed3bd7c28b454bf917d"}, - {file = "grpcio-1.39.0-cp35-cp35m-win_amd64.whl", hash = "sha256:5628e7cc69079159f9465388ff21fde1e1a780139f76dd99d319119d45156f45"}, - {file = "grpcio-1.39.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:3c14e2087f809973d5ee8ca64f772a089ead0167286f3f21fdda8b6029b50abb"}, - {file = "grpcio-1.39.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:d5a105f5a595b89a0e394e5b147430b115333d07c55efb0c0eddc96055f0d951"}, - {file = "grpcio-1.39.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:366b6b35b3719c5570588e21d866460c5666ae74e3509c2a5a73ca79997abdaf"}, - {file = "grpcio-1.39.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:544e1c1a133b43893e03e828c8325be5b82e20d3b0ef0ee3942d32553052a1b5"}, - {file = "grpcio-1.39.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:a659f7c634cacfcf14657687a9fa3265b0a1844b1c19d140f3b66aebfba1a66b"}, - {file = "grpcio-1.39.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:b0ff14dd872030e6b2fce8a6811642bd30d93833f794d3782c7e9eb2f01234cc"}, - {file = "grpcio-1.39.0-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:2a958ad794292e12d8738a06754ebaf71662e635a89098916c18715b27ca2b5b"}, - {file = "grpcio-1.39.0-cp36-cp36m-win32.whl", hash = "sha256:ed845ba6253c4032d5a01b7fb9db8fe80299e9a437e695a698751b0b191174be"}, - {file = "grpcio-1.39.0-cp36-cp36m-win_amd64.whl", hash = "sha256:b236eb4b50d83754184b248b8b1041bb1546287fff7618c4b7001b9f257bb903"}, - {file = "grpcio-1.39.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:27e2c6213fc04e71a862bacccb51f3c8e722255933f01736ace183e92d860ee6"}, - {file = "grpcio-1.39.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5127f4ba1f52fda28037ae465cf4b0e5fabe89d5ac1d64d15b073b46b7db5e16"}, - {file = "grpcio-1.39.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:a6211150765cc2343e69879dfb856718b0f7477a4618b5f9a8f6c3ee84c047c0"}, - {file = "grpcio-1.39.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:691f5b3a75f072dfb7b093f46303f493b885b7a42f25a831868ffaa22ee85f9d"}, - {file = "grpcio-1.39.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:c8fe430add656b92419f6cd0680b64fbe6347c831d89a7788324f5037dfb3359"}, - {file = "grpcio-1.39.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:3cccf470fcaab65a1b0a826ff34bd7c0861eb82ed957a83c6647a983459e4ecd"}, - {file = "grpcio-1.39.0-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:2bc7eebb405aac2d7eecfaa881fd73b489f99c01470d7193b4431a6ce199b9c3"}, - {file = "grpcio-1.39.0-cp37-cp37m-win32.whl", hash = "sha256:52100d800390d58492ed1093de6faccd957de6fc29b1a0e5948c84f275d9228f"}, - {file = "grpcio-1.39.0-cp37-cp37m-win_amd64.whl", hash = "sha256:20f57c5d09a36e0d0c8fe16ee1905f4307edb1d04f6034b56320f7fbc1a1071a"}, - {file = "grpcio-1.39.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:6ba6ad60009da2258cf15a72c51b7e0c2f58c8da517e97550881e488839e56c6"}, - {file = "grpcio-1.39.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a1fb9936b86b5efdea417fe159934bcad82a6f8c6ab7d1beec4bf3a78324d975"}, - {file = "grpcio-1.39.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:46cfb0f2b757673bfd36ab4b0e3d61988cc1a0d47e0597e91462dcbef7528f35"}, - {file = "grpcio-1.39.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f2621c82fbbff1496993aa5fbf60e235583c7f970506e818671ad52000b6f310"}, - {file = "grpcio-1.39.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:e98aca5cfe05ca29950b3d99006b9ddb54fde6451cd12cb2db1443ae3b9fa076"}, - {file = "grpcio-1.39.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:8ed1e52ad507a54d20e6aaedf4b3edcab18cc12031eafe6de898f97513d8997b"}, - {file = "grpcio-1.39.0-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:3c57fa7fec932767bc553bfb956759f45026890255bd232b2f797c3bc4dfeba2"}, - {file = "grpcio-1.39.0-cp38-cp38-win32.whl", hash = "sha256:88dbef504b491b96e3238a6d5360b04508c34c62286080060c85fddd3caf7137"}, - {file = "grpcio-1.39.0-cp38-cp38-win_amd64.whl", hash = "sha256:cffdccc94e63710dd6ead01849443390632c8e0fec52dc26e4fddf9f28ac9280"}, - {file = "grpcio-1.39.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:43e0f5c49f985c94332794aa6c4f15f3a1ced336f0c6a6c8946c67b5ab111ae9"}, - {file = "grpcio-1.39.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:dc3a24022a90c1754e54315009da6f949b48862c1d06daa54f9a28f89a5efacb"}, - {file = "grpcio-1.39.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:476fa94ba8efb09213baabd757f6f93e839794d8ae0eaa371347d6899e8f57a0"}, - {file = "grpcio-1.39.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:46d510a7af777d2f38ef4c1d25491add37cad24143012f3eebe72dc5c6d0fc4c"}, - {file = "grpcio-1.39.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:5091b4a5ee8454a8f0c8ac45946ca25d6142c3be4b1fba141f1d62a6e0b5c696"}, - {file = "grpcio-1.39.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:de83a045005703e7b9e67b61c38bb72cd49f68d9d2780d2c675353a3a3f2816f"}, - {file = "grpcio-1.39.0-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:4258b778ce09ffa3b7c9a26971c216a34369e786771afbf4f98afe223f27d248"}, - {file = "grpcio-1.39.0-cp39-cp39-win32.whl", hash = "sha256:c44958a24559f875d902d5c1acb0ae43faa5a84f6120d1d0d800acb52f96516e"}, - {file = "grpcio-1.39.0-cp39-cp39-win_amd64.whl", hash = "sha256:2068a2b896ac67103c4a5453d5435fafcbb1a2f41eaf25148d08780096935cee"}, - {file = "grpcio-1.39.0.tar.gz", hash = "sha256:57974361a459d6fe04c9ae0af1845974606612249f467bbd2062d963cb90f407"}, -] -gunicorn = [ - {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, - {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, -] -httplib2 = [ - {file = "httplib2-0.19.1-py3-none-any.whl", hash = "sha256:2ad195faf9faf079723f6714926e9a9061f694d07724b846658ce08d40f522b4"}, - {file = "httplib2-0.19.1.tar.gz", hash = "sha256:0b12617eeca7433d4c396a100eaecfa4b08ee99aa881e6df6e257a7aad5d533d"}, -] +cffi = [] +charset-normalizer = [] +click = [] +colorama = [] +colorlog = [] +configparser = [] +coverage = [] +croniter = [] +defusedxml = [] +dill = [] +dnspython = [] +docutils = [] +dparse = [] +email-validator = [] +flake8 = [] +flask = [] +flask-admin = [] +flask-appbuilder = [] +flask-babel = [] +flask-caching = [] +flask-jwt-extended = [] +flask-login = [] +flask-oauthlib = [] +flask-openid = [] +flask-sqlalchemy = [] +flask-swagger = [] +flask-wtf = [] +funcsigs = [] +future = [] +gitdb = [] +gitpython = [] +google-api-core = [] +google-api-python-client = [] +google-auth = [] +google-auth-httplib2 = [] +google-auth-oauthlib = [] +google-cloud-bigquery = [] +google-cloud-core = [] +google-crc32c = [] +google-resumable-media = [] +googleapis-common-protos = [] +graphviz = [] +grpcio = [] +gunicorn = [] +httplib2 = [] idna = [ {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"}, {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, ] -importlib-metadata = [ - {file = "importlib_metadata-2.1.1-py2.py3-none-any.whl", hash = "sha256:c2d6341ff566f609e89a2acb2db190e5e1d23d5409d6cc8d2fe34d72443876d4"}, - {file = "importlib_metadata-2.1.1.tar.gz", hash = "sha256:b8de9eff2b35fb037368f28a7df1df4e6436f578fa74423505b6c6a778d5b5dd"}, -] -iso8601 = [ - {file = "iso8601-0.1.16-py2.py3-none-any.whl", hash = "sha256:906714829fedbc89955d52806c903f2332e3948ed94e31e85037f9e0226b8376"}, - {file = "iso8601-0.1.16.tar.gz", hash = "sha256:36532f77cc800594e8f16641edae7f1baf7932f05d8e508545b95fc53c6dc85b"}, -] -isort = [ - {file = "isort-5.9.3-py3-none-any.whl", hash = "sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2"}, - {file = "isort-5.9.3.tar.gz", hash = "sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899"}, -] -itsdangerous = [ - {file = "itsdangerous-1.1.0-py2.py3-none-any.whl", hash = "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"}, - {file = "itsdangerous-1.1.0.tar.gz", hash = "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"}, -] -jinja2 = [ - {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, - {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, -] -json-merge-patch = [ - {file = "json-merge-patch-0.2.tar.gz", hash = "sha256:09898b6d427c08754e2a97c709cf2dfd7e28bd10c5683a538914975eab778d39"}, -] -jsonschema = [ - {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, - {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, -] -lazy-object-proxy = [ - {file = "lazy-object-proxy-1.6.0.tar.gz", hash = "sha256:489000d368377571c6f982fba6497f2aa13c6d1facc40660963da62f5c379726"}, - {file = "lazy_object_proxy-1.6.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:c6938967f8528b3668622a9ed3b31d145fab161a32f5891ea7b84f6b790be05b"}, - {file = "lazy_object_proxy-1.6.0-cp27-cp27m-win32.whl", hash = "sha256:ebfd274dcd5133e0afae738e6d9da4323c3eb021b3e13052d8cbd0e457b1256e"}, - {file = "lazy_object_proxy-1.6.0-cp27-cp27m-win_amd64.whl", hash = "sha256:ed361bb83436f117f9917d282a456f9e5009ea12fd6de8742d1a4752c3017e93"}, - {file = "lazy_object_proxy-1.6.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d900d949b707778696fdf01036f58c9876a0d8bfe116e8d220cfd4b15f14e741"}, - {file = "lazy_object_proxy-1.6.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5743a5ab42ae40caa8421b320ebf3a998f89c85cdc8376d6b2e00bd12bd1b587"}, - {file = "lazy_object_proxy-1.6.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:bf34e368e8dd976423396555078def5cfc3039ebc6fc06d1ae2c5a65eebbcde4"}, - {file = "lazy_object_proxy-1.6.0-cp36-cp36m-win32.whl", hash = "sha256:b579f8acbf2bdd9ea200b1d5dea36abd93cabf56cf626ab9c744a432e15c815f"}, - {file = "lazy_object_proxy-1.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:4f60460e9f1eb632584c9685bccea152f4ac2130e299784dbaf9fae9f49891b3"}, - {file = "lazy_object_proxy-1.6.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d7124f52f3bd259f510651450e18e0fd081ed82f3c08541dffc7b94b883aa981"}, - {file = "lazy_object_proxy-1.6.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:22ddd618cefe54305df49e4c069fa65715be4ad0e78e8d252a33debf00f6ede2"}, - {file = "lazy_object_proxy-1.6.0-cp37-cp37m-win32.whl", hash = "sha256:9d397bf41caad3f489e10774667310d73cb9c4258e9aed94b9ec734b34b495fd"}, - {file = "lazy_object_proxy-1.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a5045889cc2729033b3e604d496c2b6f588c754f7a62027ad4437a7ecc4837"}, - {file = "lazy_object_proxy-1.6.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:17e0967ba374fc24141738c69736da90e94419338fd4c7c7bef01ee26b339653"}, - {file = "lazy_object_proxy-1.6.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:410283732af311b51b837894fa2f24f2c0039aa7f220135192b38fcc42bd43d3"}, - {file = "lazy_object_proxy-1.6.0-cp38-cp38-win32.whl", hash = "sha256:85fb7608121fd5621cc4377a8961d0b32ccf84a7285b4f1d21988b2eae2868e8"}, - {file = "lazy_object_proxy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:d1c2676e3d840852a2de7c7d5d76407c772927addff8d742b9808fe0afccebdf"}, - {file = "lazy_object_proxy-1.6.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b865b01a2e7f96db0c5d12cfea590f98d8c5ba64ad222300d93ce6ff9138bcad"}, - {file = "lazy_object_proxy-1.6.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:4732c765372bd78a2d6b2150a6e99d00a78ec963375f236979c0626b97ed8e43"}, - {file = "lazy_object_proxy-1.6.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9698110e36e2df951c7c36b6729e96429c9c32b3331989ef19976592c5f3c77a"}, - {file = "lazy_object_proxy-1.6.0-cp39-cp39-win32.whl", hash = "sha256:1fee665d2638491f4d6e55bd483e15ef21f6c8c2095f235fef72601021e64f61"}, - {file = "lazy_object_proxy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:f5144c75445ae3ca2057faac03fda5a902eff196702b0a24daf1d6ce0650514b"}, -] -lockfile = [ - {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, - {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, -] -mako = [ - {file = "Mako-1.1.5-py2.py3-none-any.whl", hash = "sha256:6804ee66a7f6a6416910463b00d76a7b25194cd27f1918500c5bd7be2a088a23"}, - {file = "Mako-1.1.5.tar.gz", hash = "sha256:169fa52af22a91900d852e937400e79f535496191c63712e3b9fda5a9bed6fc3"}, -] -markdown = [ - {file = "Markdown-2.6.11-py2.py3-none-any.whl", hash = "sha256:9ba587db9daee7ec761cfc656272be6aabe2ed300fece21208e4aab2e457bc8f"}, - {file = "Markdown-2.6.11.tar.gz", hash = "sha256:a856869c7ff079ad84a3e19cd87a64998350c2b94e9e08e44270faef33400f81"}, -] -markupsafe = [ - {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-win32.whl", hash = "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-win_amd64.whl", hash = "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e"}, - {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f"}, - {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-win32.whl", hash = "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-win_amd64.whl", hash = "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-win32.whl", hash = "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8"}, - {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, -] -marshmallow = [ - {file = "marshmallow-3.13.0-py2.py3-none-any.whl", hash = "sha256:dd4724335d3c2b870b641ffe4a2f8728a1380cd2e7e2312756715ffeaa82b842"}, - {file = "marshmallow-3.13.0.tar.gz", hash = "sha256:c67929438fd73a2be92128caa0325b1b5ed8b626d91a094d2f7f2771bf1f1c0e"}, -] -marshmallow-enum = [ - {file = "marshmallow-enum-1.5.1.tar.gz", hash = "sha256:38e697e11f45a8e64b4a1e664000897c659b60aa57bfa18d44e226a9920b6e58"}, - {file = "marshmallow_enum-1.5.1-py2.py3-none-any.whl", hash = "sha256:57161ab3dbfde4f57adeb12090f39592e992b9c86d206d02f6bd03ebec60f072"}, -] -marshmallow-sqlalchemy = [ - {file = "marshmallow-sqlalchemy-0.23.1.tar.gz", hash = "sha256:0ef59c8da8da2e18e808e3880158049e9d72f3031c84cc804b6c533a0eb668a9"}, - {file = "marshmallow_sqlalchemy-0.23.1-py2.py3-none-any.whl", hash = "sha256:03a555b610bb307689b821b64e2416593ec21a85925c8c436c2cd08ebc6bb85e"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -more-itertools = [ - {file = "more-itertools-8.8.0.tar.gz", hash = "sha256:83f0308e05477c68f56ea3a888172c78ed5d5b3c282addb67508e7ba6c8f813a"}, - {file = "more_itertools-8.8.0-py3-none-any.whl", hash = "sha256:2cf89ec599962f2ddc4d568a05defc40e0a587fbc10d5989713638864c36be4d"}, -] -mypy = [ - {file = "mypy-0.770-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:a34b577cdf6313bf24755f7a0e3f3c326d5c1f4fe7422d1d06498eb25ad0c600"}, - {file = "mypy-0.770-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:86c857510a9b7c3104cf4cde1568f4921762c8f9842e987bc03ed4f160925754"}, - {file = "mypy-0.770-cp35-cp35m-win_amd64.whl", hash = "sha256:a8ffcd53cb5dfc131850851cc09f1c44689c2812d0beb954d8138d4f5fc17f65"}, - {file = "mypy-0.770-cp36-cp36m-macosx_10_6_x86_64.whl", hash = "sha256:7687f6455ec3ed7649d1ae574136835a4272b65b3ddcf01ab8704ac65616c5ce"}, - {file = "mypy-0.770-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:3beff56b453b6ef94ecb2996bea101a08f1f8a9771d3cbf4988a61e4d9973761"}, - {file = "mypy-0.770-cp36-cp36m-win_amd64.whl", hash = "sha256:15b948e1302682e3682f11f50208b726a246ab4e6c1b39f9264a8796bb416aa2"}, - {file = "mypy-0.770-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:b90928f2d9eb2f33162405f32dde9f6dcead63a0971ca8a1b50eb4ca3e35ceb8"}, - {file = "mypy-0.770-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:c56ffe22faa2e51054c5f7a3bc70a370939c2ed4de308c690e7949230c995913"}, - {file = "mypy-0.770-cp37-cp37m-win_amd64.whl", hash = "sha256:8dfb69fbf9f3aeed18afffb15e319ca7f8da9642336348ddd6cab2713ddcf8f9"}, - {file = "mypy-0.770-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:219a3116ecd015f8dca7b5d2c366c973509dfb9a8fc97ef044a36e3da66144a1"}, - {file = "mypy-0.770-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7ec45a70d40ede1ec7ad7f95b3c94c9cf4c186a32f6bacb1795b60abd2f9ef27"}, - {file = "mypy-0.770-cp38-cp38-win_amd64.whl", hash = "sha256:f91c7ae919bbc3f96cd5e5b2e786b2b108343d1d7972ea130f7de27fdd547cf3"}, - {file = "mypy-0.770-py3-none-any.whl", hash = "sha256:3b1fc683fb204c6b4403a1ef23f0b1fac8e4477091585e0c8c54cbdf7d7bb164"}, - {file = "mypy-0.770.tar.gz", hash = "sha256:8a627507ef9b307b46a1fea9513d5c98680ba09591253082b4c48697ba05a4ae"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -natsort = [ - {file = "natsort-7.1.1-py3-none-any.whl", hash = "sha256:d0f4fc06ca163fa4a5ef638d9bf111c67f65eedcc7920f98dec08e489045b67e"}, - {file = "natsort-7.1.1.tar.gz", hash = "sha256:00c603a42365830c4722a2eb7663a25919551217ec09a243d3399fa8dd4ac403"}, -] -numpy = [ - {file = "numpy-1.21.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38e8648f9449a549a7dfe8d8755a5979b45b3538520d1e735637ef28e8c2dc50"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fd7d7409fa643a91d0a05c7554dd68aa9c9bb16e186f6ccfe40d6e003156e33a"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a75b4498b1e93d8b700282dc8e655b8bd559c0904b3910b144646dbbbc03e062"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1412aa0aec3e00bc23fbb8664d76552b4efde98fb71f60737c83efbac24112f1"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e46ceaff65609b5399163de5893d8f2a82d3c77d5e56d976c8b5fb01faa6b671"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c6a2324085dd52f96498419ba95b5777e40b6bcbc20088fddb9e8cbb58885e8e"}, - {file = "numpy-1.21.1-cp37-cp37m-win32.whl", hash = "sha256:73101b2a1fef16602696d133db402a7e7586654682244344b8329cdcbbb82172"}, - {file = "numpy-1.21.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7a708a79c9a9d26904d1cca8d383bf869edf6f8e7650d85dbc77b041e8c5a0f8"}, - {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95b995d0c413f5d0428b3f880e8fe1660ff9396dcd1f9eedbc311f37b5652e16"}, - {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:635e6bd31c9fb3d475c8f44a089569070d10a9ef18ed13738b03049280281267"}, - {file = "numpy-1.21.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a3d5fb89bfe21be2ef47c0614b9c9c707b7362386c9a3ff1feae63e0267ccb6"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a326af80e86d0e9ce92bcc1e65c8ff88297de4fa14ee936cb2293d414c9ec63"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:791492091744b0fe390a6ce85cc1bf5149968ac7d5f0477288f78c89b385d9af"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0318c465786c1f63ac05d7c4dbcecd4d2d7e13f0959b01b534ea1e92202235c5"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a513bd9c1551894ee3d31369f9b07460ef223694098cf27d399513415855b68"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91c6f5fc58df1e0a3cc0c3a717bb3308ff850abdaa6d2d802573ee2b11f674a8"}, - {file = "numpy-1.21.1-cp38-cp38-win32.whl", hash = "sha256:978010b68e17150db8765355d1ccdd450f9fc916824e8c4e35ee620590e234cd"}, - {file = "numpy-1.21.1-cp38-cp38-win_amd64.whl", hash = "sha256:9749a40a5b22333467f02fe11edc98f022133ee1bfa8ab99bda5e5437b831214"}, - {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d7a4aeac3b94af92a9373d6e77b37691b86411f9745190d2c351f410ab3a791f"}, - {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9e7912a56108aba9b31df688a4c4f5cb0d9d3787386b87d504762b6754fbb1b"}, - {file = "numpy-1.21.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:25b40b98ebdd272bc3020935427a4530b7d60dfbe1ab9381a39147834e985eac"}, - {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a92c5aea763d14ba9d6475803fc7904bda7decc2a0a68153f587ad82941fec1"}, - {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05a0f648eb28bae4bcb204e6fd14603de2908de982e761a2fc78efe0f19e96e1"}, - {file = "numpy-1.21.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f01f28075a92eede918b965e86e8f0ba7b7797a95aa8d35e1cc8821f5fc3ad6a"}, - {file = "numpy-1.21.1-cp39-cp39-win32.whl", hash = "sha256:88c0b89ad1cc24a5efbb99ff9ab5db0f9a86e9cc50240177a571fbe9c2860ac2"}, - {file = "numpy-1.21.1-cp39-cp39-win_amd64.whl", hash = "sha256:01721eefe70544d548425a07c80be8377096a54118070b8a62476866d5208e33"}, - {file = "numpy-1.21.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d4d1de6e6fb3d28781c73fbde702ac97f03d79e4ffd6598b880b2d95d62ead4"}, - {file = "numpy-1.21.1.zip", hash = "sha256:dff4af63638afcc57a3dfb9e4b26d434a7a602d225b42d746ea7fe2edf1342fd"}, -] -oauthlib = [ - {file = "oauthlib-2.1.0-py2.py3-none-any.whl", hash = "sha256:d883b36b21a6ad813953803edfa563b1b579d79ca758fe950d1bc9e8b326025b"}, - {file = "oauthlib-2.1.0.tar.gz", hash = "sha256:ac35665a61c1685c56336bda97d5eefa246f1202618a1d6f34fccb1bdd404162"}, -] -packaging = [ - {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, - {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, -] -pandas = [ - {file = "pandas-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ba7ceb8abc6dbdb1e34612d1173d61e4941f1a1eb7e6f703b2633134ae6a6c89"}, - {file = "pandas-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb71b1935249de80e3a808227189eee381d4d74a31760ced2df21eedc92a8e3"}, - {file = "pandas-1.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa54dc1d3e5d004a09ab0b1751473698011ddf03e14f1f59b84ad9a6ac630975"}, - {file = "pandas-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34ced9ce5d5b17b556486da7256961b55b471d64a8990b56e67a84ebeb259416"}, - {file = "pandas-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:a56246de744baf646d1f3e050c4653d632bc9cd2e0605f41051fea59980e880a"}, - {file = "pandas-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:53b17e4debba26b7446b1e4795c19f94f0c715e288e08145e44bdd2865e819b3"}, - {file = "pandas-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f07a9745ca075ae73a5ce116f5e58f691c0dc9de0bff163527858459df5c176f"}, - {file = "pandas-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9e8e0ce5284ebebe110efd652c164ed6eab77f5de4c3533abc756302ee77765"}, - {file = "pandas-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a78d7066d1c921a77e3306aa0ebf6e55396c097d5dfcc4df8defe3dcecb735"}, - {file = "pandas-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:132def05e73d292c949b02e7ef873debb77acc44a8b119d215921046f0c3a91d"}, - {file = "pandas-1.3.2-cp38-cp38-win32.whl", hash = "sha256:69e1b2f5811f46827722fd641fdaeedb26002bd1e504eacc7a8ec36bdc25393e"}, - {file = "pandas-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:7996d311413379136baf0f3cf2a10e331697657c87ced3f17ac7c77f77fe34a3"}, - {file = "pandas-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1738154049062156429a5cf2fd79a69c9f3fa4f231346a7ec6fd156cd1a9a621"}, - {file = "pandas-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cce01f6d655b4add966fcd36c32c5d1fe84628e200626b3f5e2f40db2d16a0f"}, - {file = "pandas-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1099e2a0cd3a01ec62cca183fc1555833a2d43764950ef8cb5948c8abfc51014"}, - {file = "pandas-1.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cd5776be891331a3e6b425b5abeab9596abea18435c5982191356f9b24ae731"}, - {file = "pandas-1.3.2-cp39-cp39-win32.whl", hash = "sha256:66a95361b81b4ba04b699ecd2416b0591f40cd1e24c60a8bfe0d19009cfa575a"}, - {file = "pandas-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:89f40e5d21814192802421df809f948247d39ffe171e45fe2ab4abf7bd4279d8"}, - {file = "pandas-1.3.2.tar.gz", hash = "sha256:cbcb84d63867af3411fa063af3de64902665bb5b3d40b25b2059e40603594e87"}, -] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -pbr = [ - {file = "pbr-5.6.0-py2.py3-none-any.whl", hash = "sha256:c68c661ac5cc81058ac94247278eeda6d2e6aecb3e227b0387c30d277e7ef8d4"}, - {file = "pbr-5.6.0.tar.gz", hash = "sha256:42df03e7797b796625b1029c0400279c7c34fd7df24a7d7818a1abb5b38710dd"}, -] -pendulum = [ - {file = "pendulum-1.4.4-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:501670f3b1d581395ec4094aff7c13dca6b699d1810cf15c446433b9e736eb4a"}, - {file = "pendulum-1.4.4-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:b9a7ef02ad6255292f35218c595f8be35e0ca3c7ac19e633ff2de96480f26ab3"}, - {file = "pendulum-1.4.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:3d8b280a903fb25bdba258203bbcd0533c5c04a65878f6e0700931dedd2bae72"}, - {file = "pendulum-1.4.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f30fb1149e4f67b3aaa9eae874dca7bbf49788ac121d702486f5b9fe549e7920"}, - {file = "pendulum-1.4.4-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:4c945ed6a3b0afab8c2f1b1e3e26bb23ad0a9be6f201604111a8217cea78e7ab"}, - {file = "pendulum-1.4.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:253983de6d64a01909c2524e4ab27febd0d3987d001ea6ab93a7b945fdc0e6c6"}, - {file = "pendulum-1.4.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:76ee830b4b57a3f8244a228505bf9c55285cc92f1a200c8578b0ca54f8185861"}, - {file = "pendulum-1.4.4.tar.gz", hash = "sha256:601e52cb0425e94b1784b6613a9085e0066ae1fa1915d18771884b67e93cac5c"}, -] -pluggy = [ - {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, - {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, -] -prison = [ - {file = "prison-0.1.3-py2.py3-none-any.whl", hash = "sha256:58e972709e9e2feabc1aa06cb6493f9c43b55a8afd7d653cf0aa82e3923fbd35"}, - {file = "prison-0.1.3.tar.gz", hash = "sha256:a02b55719d033c4e7efc1d1660ed884a73743d89effb48205c5743c3c658b799"}, -] -proto-plus = [ - {file = "proto-plus-1.19.0.tar.gz", hash = "sha256:ce6695ce804383ad6f392c4bb1874c323896290a1f656560de36416ba832d91e"}, - {file = "proto_plus-1.19.0-py3-none-any.whl", hash = "sha256:df7c71c08dc06403bdb0fba58cf9bf5f217198f6488c26b768f81e03a738c059"}, -] -protobuf = [ - {file = "protobuf-3.17.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ab6bb0e270c6c58e7ff4345b3a803cc59dbee19ddf77a4719c5b635f1d547aa8"}, - {file = "protobuf-3.17.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:13ee7be3c2d9a5d2b42a1030976f760f28755fcf5863c55b1460fd205e6cd637"}, - {file = "protobuf-3.17.3-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:1556a1049ccec58c7855a78d27e5c6e70e95103b32de9142bae0576e9200a1b0"}, - {file = "protobuf-3.17.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f0e59430ee953184a703a324b8ec52f571c6c4259d496a19d1cabcdc19dabc62"}, - {file = "protobuf-3.17.3-cp35-cp35m-win32.whl", hash = "sha256:a981222367fb4210a10a929ad5983ae93bd5a050a0824fc35d6371c07b78caf6"}, - {file = "protobuf-3.17.3-cp35-cp35m-win_amd64.whl", hash = "sha256:6d847c59963c03fd7a0cd7c488cadfa10cda4fff34d8bc8cba92935a91b7a037"}, - {file = "protobuf-3.17.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:145ce0af55c4259ca74993ddab3479c78af064002ec8227beb3d944405123c71"}, - {file = "protobuf-3.17.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ce4d8bf0321e7b2d4395e253f8002a1a5ffbcfd7bcc0a6ba46712c07d47d0b4"}, - {file = "protobuf-3.17.3-cp36-cp36m-win32.whl", hash = "sha256:7a4c97961e9e5b03a56f9a6c82742ed55375c4a25f2692b625d4087d02ed31b9"}, - {file = "protobuf-3.17.3-cp36-cp36m-win_amd64.whl", hash = "sha256:a22b3a0dbac6544dacbafd4c5f6a29e389a50e3b193e2c70dae6bbf7930f651d"}, - {file = "protobuf-3.17.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ffea251f5cd3c0b9b43c7a7a912777e0bc86263436a87c2555242a348817221b"}, - {file = "protobuf-3.17.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:9b7a5c1022e0fa0dbde7fd03682d07d14624ad870ae52054849d8960f04bc764"}, - {file = "protobuf-3.17.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8727ee027157516e2c311f218ebf2260a18088ffb2d29473e82add217d196b1c"}, - {file = "protobuf-3.17.3-cp37-cp37m-win32.whl", hash = "sha256:14c1c9377a7ffbeaccd4722ab0aa900091f52b516ad89c4b0c3bb0a4af903ba5"}, - {file = "protobuf-3.17.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c56c050a947186ba51de4f94ab441d7f04fcd44c56df6e922369cc2e1a92d683"}, - {file = "protobuf-3.17.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2ae692bb6d1992afb6b74348e7bb648a75bb0d3565a3f5eea5bec8f62bd06d87"}, - {file = "protobuf-3.17.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99938f2a2d7ca6563c0ade0c5ca8982264c484fdecf418bd68e880a7ab5730b1"}, - {file = "protobuf-3.17.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6902a1e4b7a319ec611a7345ff81b6b004b36b0d2196ce7a748b3493da3d226d"}, - {file = "protobuf-3.17.3-cp38-cp38-win32.whl", hash = "sha256:59e5cf6b737c3a376932fbfb869043415f7c16a0cf176ab30a5bbc419cd709c1"}, - {file = "protobuf-3.17.3-cp38-cp38-win_amd64.whl", hash = "sha256:ebcb546f10069b56dc2e3da35e003a02076aaa377caf8530fe9789570984a8d2"}, - {file = "protobuf-3.17.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ffbd23640bb7403574f7aff8368e2aeb2ec9a5c6306580be48ac59a6bac8bde"}, - {file = "protobuf-3.17.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:26010f693b675ff5a1d0e1bdb17689b8b716a18709113288fead438703d45539"}, - {file = "protobuf-3.17.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e76d9686e088fece2450dbc7ee905f9be904e427341d289acbe9ad00b78ebd47"}, - {file = "protobuf-3.17.3-cp39-cp39-win32.whl", hash = "sha256:a38bac25f51c93e4be4092c88b2568b9f407c27217d3dd23c7a57fa522a17554"}, - {file = "protobuf-3.17.3-cp39-cp39-win_amd64.whl", hash = "sha256:85d6303e4adade2827e43c2b54114d9a6ea547b671cb63fafd5011dc47d0e13d"}, - {file = "protobuf-3.17.3-py2.py3-none-any.whl", hash = "sha256:2bfb815216a9cd9faec52b16fd2bfa68437a44b67c56bee59bc3926522ecb04e"}, - {file = "protobuf-3.17.3.tar.gz", hash = "sha256:72804ea5eaa9c22a090d2803813e280fb273b62d5ae497aaf3553d141c4fdd7b"}, -] -psutil = [ - {file = "psutil-5.8.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0066a82f7b1b37d334e68697faba68e5ad5e858279fd6351c8ca6024e8d6ba64"}, - {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0ae6f386d8d297177fd288be6e8d1afc05966878704dad9847719650e44fc49c"}, - {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:12d844996d6c2b1d3881cfa6fa201fd635971869a9da945cf6756105af73d2df"}, - {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:02b8292609b1f7fcb34173b25e48d0da8667bc85f81d7476584d889c6e0f2131"}, - {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6ffe81843131ee0ffa02c317186ed1e759a145267d54fdef1bc4ea5f5931ab60"}, - {file = "psutil-5.8.0-cp27-none-win32.whl", hash = "sha256:ea313bb02e5e25224e518e4352af4bf5e062755160f77e4b1767dd5ccb65f876"}, - {file = "psutil-5.8.0-cp27-none-win_amd64.whl", hash = "sha256:5da29e394bdedd9144c7331192e20c1f79283fb03b06e6abd3a8ae45ffecee65"}, - {file = "psutil-5.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:74fb2557d1430fff18ff0d72613c5ca30c45cdbfcddd6a5773e9fc1fe9364be8"}, - {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:74f2d0be88db96ada78756cb3a3e1b107ce8ab79f65aa885f76d7664e56928f6"}, - {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:99de3e8739258b3c3e8669cb9757c9a861b2a25ad0955f8e53ac662d66de61ac"}, - {file = "psutil-5.8.0-cp36-cp36m-win32.whl", hash = "sha256:36b3b6c9e2a34b7d7fbae330a85bf72c30b1c827a4366a07443fc4b6270449e2"}, - {file = "psutil-5.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:52de075468cd394ac98c66f9ca33b2f54ae1d9bff1ef6b67a212ee8f639ec06d"}, - {file = "psutil-5.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c6a5fd10ce6b6344e616cf01cc5b849fa8103fbb5ba507b6b2dee4c11e84c935"}, - {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:61f05864b42fedc0771d6d8e49c35f07efd209ade09a5afe6a5059e7bb7bf83d"}, - {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0dd4465a039d343925cdc29023bb6960ccf4e74a65ad53e768403746a9207023"}, - {file = "psutil-5.8.0-cp37-cp37m-win32.whl", hash = "sha256:1bff0d07e76114ec24ee32e7f7f8d0c4b0514b3fae93e3d2aaafd65d22502394"}, - {file = "psutil-5.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:fcc01e900c1d7bee2a37e5d6e4f9194760a93597c97fee89c4ae51701de03563"}, - {file = "psutil-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6223d07a1ae93f86451d0198a0c361032c4c93ebd4bf6d25e2fb3edfad9571ef"}, - {file = "psutil-5.8.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d225cd8319aa1d3c85bf195c4e07d17d3cd68636b8fc97e6cf198f782f99af28"}, - {file = "psutil-5.8.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:28ff7c95293ae74bf1ca1a79e8805fcde005c18a122ca983abf676ea3466362b"}, - {file = "psutil-5.8.0-cp38-cp38-win32.whl", hash = "sha256:ce8b867423291cb65cfc6d9c4955ee9bfc1e21fe03bb50e177f2b957f1c2469d"}, - {file = "psutil-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:90f31c34d25b1b3ed6c40cdd34ff122b1887a825297c017e4cbd6796dd8b672d"}, - {file = "psutil-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6323d5d845c2785efb20aded4726636546b26d3b577aded22492908f7c1bdda7"}, - {file = "psutil-5.8.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:245b5509968ac0bd179287d91210cd3f37add77dad385ef238b275bad35fa1c4"}, - {file = "psutil-5.8.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:90d4091c2d30ddd0a03e0b97e6a33a48628469b99585e2ad6bf21f17423b112b"}, - {file = "psutil-5.8.0-cp39-cp39-win32.whl", hash = "sha256:ea372bcc129394485824ae3e3ddabe67dc0b118d262c568b4d2602a7070afdb0"}, - {file = "psutil-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f4634b033faf0d968bb9220dd1c793b897ab7f1189956e1aa9eae752527127d3"}, - {file = "psutil-5.8.0.tar.gz", hash = "sha256:0c9ccb99ab76025f2f0bbecf341d4656e9c1351db8cc8a03ccd62e318ab4b5c6"}, -] -py = [ - {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, - {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, -] -pyarrow = [ - {file = "pyarrow-5.0.0-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:e9ec80f4a77057498cf4c5965389e42e7f6a618b6859e6dd615e57505c9167a6"}, - {file = "pyarrow-5.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1453c2411b5062ba6bf6832dbc4df211ad625f678c623a2ee177aee158f199b"}, - {file = "pyarrow-5.0.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:9e04d3621b9f2f23898eed0d044203f66c156d880f02c5534a7f9947ebb1a4af"}, - {file = "pyarrow-5.0.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:64f30aa6b28b666a925d11c239344741850eb97c29d3aa0f7187918cf82494f7"}, - {file = "pyarrow-5.0.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:99c8b0f7e2ce2541dd4c0c0101d9944bb8e592ae3295fe7a2f290ab99222666d"}, - {file = "pyarrow-5.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:456a4488ae810a0569d1adf87dbc522bcc9a0e4a8d1809b934ca28c163d8edce"}, - {file = "pyarrow-5.0.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:c5493d2414d0d690a738aac8dd6d38518d1f9b870e52e24f89d8d7eb3afd4161"}, - {file = "pyarrow-5.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1832709281efefa4f199c639e9f429678286329860188e53beeda71750775923"}, - {file = "pyarrow-5.0.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:b6387d2058d95fa48ccfedea810a768187affb62f4a3ef6595fa30bf9d1a65cf"}, - {file = "pyarrow-5.0.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:bbe2e439bec2618c74a3bb259700c8a7353dc2ea0c5a62686b6cf04a50ab1e0d"}, - {file = "pyarrow-5.0.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5c0d1b68e67bb334a5af0cecdf9b6a702aaa4cc259c5cbb71b25bbed40fcedaf"}, - {file = "pyarrow-5.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6e937ce4a40ea0cc7896faff96adecadd4485beb53fbf510b46858e29b2e75ae"}, - {file = "pyarrow-5.0.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:7560332e5846f0e7830b377c14c93624e24a17f91c98f0b25dafb0ca1ea6ba02"}, - {file = "pyarrow-5.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53e550dec60d1ab86cba3afa1719dc179a8bc9632a0e50d9fe91499cf0a7f2bc"}, - {file = "pyarrow-5.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2d26186ca9748a1fb89ae6c1fa04fb343a4279b53f118734ea8096f15d66c820"}, - {file = "pyarrow-5.0.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:7c4edd2bacee3eea6c8c28bddb02347f9d41a55ec9692c71c6de6e47c62a7f0d"}, - {file = "pyarrow-5.0.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:601b0aabd6fb066429e706282934d4d8d38f53bdb8d82da9576be49f07eedf5c"}, - {file = "pyarrow-5.0.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:ff21711f6ff3b0bc90abc8ca8169e676faeb2401ddc1a0bc1c7dc181708a3406"}, - {file = "pyarrow-5.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:ed135a99975380c27077f9d0e210aea8618ed9fadcec0e71f8a3190939557afe"}, - {file = "pyarrow-5.0.0-cp39-cp39-macosx_10_13_universal2.whl", hash = "sha256:6e1f0e4374061116f40e541408a8a170c170d0a070b788717e18165ebfdd2a54"}, - {file = "pyarrow-5.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:4341ac0f552dc04c450751e049976940c7f4f8f2dae03685cc465ebe0a61e231"}, - {file = "pyarrow-5.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c3fc856f107ca2fb3c9391d7ea33bbb33f3a1c2b4a0e2b41f7525c626214cc03"}, - {file = "pyarrow-5.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:357605665fbefb573d40939b13a684c2490b6ed1ab4a5de8dd246db4ab02e5a4"}, - {file = "pyarrow-5.0.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:f4db312e9ba80e730cefcae0a05b63ea5befc7634c28df56682b628ad8e1c25c"}, - {file = "pyarrow-5.0.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:1d9485741e497ccc516cb0a0c8f56e22be55aea815be185c3f9a681323b0e614"}, - {file = "pyarrow-5.0.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:b3115df938b8d7a7372911a3cb3904196194bcea8bb48911b4b3eafee3ab8d90"}, - {file = "pyarrow-5.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:4d8adda1892ef4553c4804af7f67cce484f4d6371564e2d8374b8e2bc85293e2"}, - {file = "pyarrow-5.0.0.tar.gz", hash = "sha256:24e64ea33eed07441cc0e80c949e3a1b48211a1add8953268391d250f4d39922"}, -] -pyasn1 = [ - {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"}, - {file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"}, - {file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"}, - {file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"}, - {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, - {file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"}, - {file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"}, - {file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"}, - {file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"}, - {file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"}, - {file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"}, - {file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"}, - {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, -] -pyasn1-modules = [ - {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"}, - {file = "pyasn1_modules-0.2.8-py2.4.egg", hash = "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199"}, - {file = "pyasn1_modules-0.2.8-py2.5.egg", hash = "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405"}, - {file = "pyasn1_modules-0.2.8-py2.6.egg", hash = "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb"}, - {file = "pyasn1_modules-0.2.8-py2.7.egg", hash = "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8"}, - {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"}, - {file = "pyasn1_modules-0.2.8-py3.1.egg", hash = "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d"}, - {file = "pyasn1_modules-0.2.8-py3.2.egg", hash = "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45"}, - {file = "pyasn1_modules-0.2.8-py3.3.egg", hash = "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4"}, - {file = "pyasn1_modules-0.2.8-py3.4.egg", hash = "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811"}, - {file = "pyasn1_modules-0.2.8-py3.5.egg", hash = "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed"}, - {file = "pyasn1_modules-0.2.8-py3.6.egg", hash = "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0"}, - {file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"}, -] +importlib-metadata = [] +iso8601 = [] +isort = [] +itsdangerous = [] +jinja2 = [] +json-merge-patch = [] +jsonschema = [] +lazy-object-proxy = [] +lockfile = [] +mako = [] +markdown = [] +markupsafe = [] +marshmallow = [] +marshmallow-enum = [] +marshmallow-sqlalchemy = [] +mccabe = [] +more-itertools = [] +mypy = [] +mypy-extensions = [] +natsort = [] +numpy = [] +oauthlib = [] +packaging = [] +pandas = [] +pathspec = [] +pbr = [] +pendulum = [] +pluggy = [] +prison = [] +proto-plus = [] +protobuf = [] +psutil = [] +py = [] +pyarrow = [] +pyasn1 = [] +pyasn1-modules = [] pycodestyle = [ {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, ] -pycparser = [ - {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, - {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, -] +pycparser = [] pydantic = [ {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"}, {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"}, @@ -2739,351 +2076,64 @@ pydantic = [ {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"}, {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, ] -pyflakes = [ - {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, - {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, -] -pygments = [ - {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"}, - {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"}, -] -pyjwt = [ - {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"}, - {file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"}, -] -pyparsing = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, -] -pyrsistent = [ - {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"}, - {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"}, - {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"}, - {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"}, - {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"}, - {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"}, - {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"}, - {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"}, - {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"}, - {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"}, - {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"}, - {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"}, -] -pytest = [ - {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"}, - {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"}, -] -pytest-cov = [ - {file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"}, - {file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"}, -] -python-daemon = [ - {file = "python-daemon-2.3.0.tar.gz", hash = "sha256:bda993f1623b1197699716d68d983bb580043cf2b8a66a01274d9b8297b0aeaf"}, - {file = "python_daemon-2.3.0-py2.py3-none-any.whl", hash = "sha256:191c7b67b8f7aac58849abf54e19fe1957ef7290c914210455673028ad454989"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] +pyflakes = [] +pygments = [] +pyjwt = [] +pyparsing = [] +pyrsistent = [] +pytest = [] +pytest-cov = [] +python-daemon = [] +python-dateutil = [] python-dotenv = [ {file = "python-dotenv-0.18.0.tar.gz", hash = "sha256:effaac3c1e58d89b3ccb4d04a40dc7ad6e0275fda25fd75ae9d323e2465e202d"}, {file = "python_dotenv-0.18.0-py2.py3-none-any.whl", hash = "sha256:dd8fe852847f4fbfadabf6183ddd4c824a9651f02d51714fa075c95561959c7d"}, ] -python-editor = [ - {file = "python-editor-1.0.4.tar.gz", hash = "sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b"}, - {file = "python_editor-1.0.4-py2-none-any.whl", hash = "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8"}, - {file = "python_editor-1.0.4-py2.7.egg", hash = "sha256:ea87e17f6ec459e780e4221f295411462e0d0810858e055fc514684350a2f522"}, - {file = "python_editor-1.0.4-py3-none-any.whl", hash = "sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d"}, - {file = "python_editor-1.0.4-py3.5.egg", hash = "sha256:c3da2053dbab6b29c94e43c486ff67206eafbe7eb52dbec7390b5e2fb05aac77"}, -] +python-editor = [] python-fb-page-insights-client = [] -python-nvd3 = [ - {file = "python-nvd3-0.15.0.tar.gz", hash = "sha256:fbd75ff47e0ef255b4aa4f3a8b10dc8b4024aa5a9a7abed5b2406bd3cb817715"}, -] -python-openid = [ - {file = "python-openid-2.2.5.tar.gz", hash = "sha256:92c51c3ecec846cbec4aeff11f9ff47303d4a63f93b0e6ac0ec02a091fed70ef"}, - {file = "python-openid-2.2.5.zip", hash = "sha256:c2d133e47e0a7705c9272eef00d7a09c174f5bf17a127fed8e2c6499556cc782"}, -] -python-slugify = [ - {file = "python-slugify-4.0.1.tar.gz", hash = "sha256:69a517766e00c1268e5bbfc0d010a0a8508de0b18d30ad5a1ff357f8ae724270"}, -] -pytz = [ - {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, - {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, -] -pytzdata = [ - {file = "pytzdata-2020.1-py2.py3-none-any.whl", hash = "sha256:e1e14750bcf95016381e4d472bad004eef710f2d6417240904070b3d6654485f"}, - {file = "pytzdata-2020.1.tar.gz", hash = "sha256:3efa13b335a00a8de1d345ae41ec78dd11c9f8807f522d39850f2dd828681540"}, -] -pyyaml = [ - {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, - {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, - {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, - {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, - {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, - {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, - {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, - {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, - {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, -] -regex = [ - {file = "regex-2021.8.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8764a78c5464ac6bde91a8c87dd718c27c1cabb7ed2b4beaf36d3e8e390567f9"}, - {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4551728b767f35f86b8e5ec19a363df87450c7376d7419c3cac5b9ceb4bce576"}, - {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:577737ec3d4c195c4aef01b757905779a9e9aee608fa1cf0aec16b5576c893d3"}, - {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c856ec9b42e5af4fe2d8e75970fcc3a2c15925cbcc6e7a9bcb44583b10b95e80"}, - {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3835de96524a7b6869a6c710b26c90e94558c31006e96ca3cf6af6751b27dca1"}, - {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cea56288eeda8b7511d507bbe7790d89ae7049daa5f51ae31a35ae3c05408531"}, - {file = "regex-2021.8.3-cp36-cp36m-win32.whl", hash = "sha256:a4eddbe2a715b2dd3849afbdeacf1cc283160b24e09baf64fa5675f51940419d"}, - {file = "regex-2021.8.3-cp36-cp36m-win_amd64.whl", hash = "sha256:57fece29f7cc55d882fe282d9de52f2f522bb85290555b49394102f3621751ee"}, - {file = "regex-2021.8.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a5c6dbe09aff091adfa8c7cfc1a0e83fdb8021ddb2c183512775a14f1435fe16"}, - {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff4a8ad9638b7ca52313d8732f37ecd5fd3c8e3aff10a8ccb93176fd5b3812f6"}, - {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b63e3571b24a7959017573b6455e05b675050bbbea69408f35f3cb984ec54363"}, - {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fbc20975eee093efa2071de80df7f972b7b35e560b213aafabcec7c0bd00bd8c"}, - {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14caacd1853e40103f59571f169704367e79fb78fac3d6d09ac84d9197cadd16"}, - {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb350eb1060591d8e89d6bac4713d41006cd4d479f5e11db334a48ff8999512f"}, - {file = "regex-2021.8.3-cp37-cp37m-win32.whl", hash = "sha256:18fdc51458abc0a974822333bd3a932d4e06ba2a3243e9a1da305668bd62ec6d"}, - {file = "regex-2021.8.3-cp37-cp37m-win_amd64.whl", hash = "sha256:026beb631097a4a3def7299aa5825e05e057de3c6d72b139c37813bfa351274b"}, - {file = "regex-2021.8.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:16d9eaa8c7e91537516c20da37db975f09ac2e7772a0694b245076c6d68f85da"}, - {file = "regex-2021.8.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3905c86cc4ab6d71635d6419a6f8d972cab7c634539bba6053c47354fd04452c"}, - {file = "regex-2021.8.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937b20955806381e08e54bd9d71f83276d1f883264808521b70b33d98e4dec5d"}, - {file = "regex-2021.8.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:28e8af338240b6f39713a34e337c3813047896ace09d51593d6907c66c0708ba"}, - {file = "regex-2021.8.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c09d88a07483231119f5017904db8f60ad67906efac3f1baa31b9b7f7cca281"}, - {file = "regex-2021.8.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:85f568892422a0e96235eb8ea6c5a41c8ccbf55576a2260c0160800dbd7c4f20"}, - {file = "regex-2021.8.3-cp38-cp38-win32.whl", hash = "sha256:bf6d987edd4a44dd2fa2723fca2790f9442ae4de2c8438e53fcb1befdf5d823a"}, - {file = "regex-2021.8.3-cp38-cp38-win_amd64.whl", hash = "sha256:8fe58d9f6e3d1abf690174fd75800fda9bdc23d2a287e77758dc0e8567e38ce6"}, - {file = "regex-2021.8.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7976d410e42be9ae7458c1816a416218364e06e162b82e42f7060737e711d9ce"}, - {file = "regex-2021.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9569da9e78f0947b249370cb8fadf1015a193c359e7e442ac9ecc585d937f08d"}, - {file = "regex-2021.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459bbe342c5b2dec5c5223e7c363f291558bc27982ef39ffd6569e8c082bdc83"}, - {file = "regex-2021.8.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4f421e3cdd3a273bace013751c345f4ebeef08f05e8c10757533ada360b51a39"}, - {file = "regex-2021.8.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea212df6e5d3f60341aef46401d32fcfded85593af1d82b8b4a7a68cd67fdd6b"}, - {file = "regex-2021.8.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3b73390511edd2db2d34ff09aa0b2c08be974c71b4c0505b4a048d5dc128c2b"}, - {file = "regex-2021.8.3-cp39-cp39-win32.whl", hash = "sha256:f35567470ee6dbfb946f069ed5f5615b40edcbb5f1e6e1d3d2b114468d505fc6"}, - {file = "regex-2021.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:bfa6a679410b394600eafd16336b2ce8de43e9b13f7fb9247d84ef5ad2b45e91"}, - {file = "regex-2021.8.3.tar.gz", hash = "sha256:8935937dad2c9b369c3d932b0edbc52a62647c2afb2fafc0c280f14a8bf56a6a"}, -] +python-nvd3 = [] +python-slugify = [] +python3-openid = [] +pytz = [] +pytzdata = [] +pyyaml = [] +regex = [] requests = [ {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, ] -requests-oauthlib = [ - {file = "requests-oauthlib-1.1.0.tar.gz", hash = "sha256:eabd8eb700ebed81ba080c6ead96d39d6bdc39996094bd23000204f6965786b0"}, - {file = "requests_oauthlib-1.1.0-py2.py3-none-any.whl", hash = "sha256:be76f2bb72ca5525998e81d47913e09b1ca8b7957ae89b46f787a79e68ad5e61"}, - {file = "requests_oauthlib-1.1.0-py3.7.egg", hash = "sha256:490229d14a98e1b69612dcc1a22887ec14f5487dc1b8c6d7ba7f77a42ce7347b"}, -] -rsa = [ - {file = "rsa-4.7.2-py3-none-any.whl", hash = "sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2"}, - {file = "rsa-4.7.2.tar.gz", hash = "sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9"}, -] -safety = [ - {file = "safety-1.10.3-py2.py3-none-any.whl", hash = "sha256:5f802ad5df5614f9622d8d71fedec2757099705c2356f862847c58c6dfe13e84"}, - {file = "safety-1.10.3.tar.gz", hash = "sha256:30e394d02a20ac49b7f65292d19d38fa927a8f9582cdfd3ad1adbbc66c641ad5"}, -] -searchconsole = [ - {file = "searchconsole-0.0.4.tar.gz", hash = "sha256:74b3c1603ed00fc3aaa45d99cd9c12db62db60dbfb0ac8e2c4a3cb28d37247d6"}, -] -setproctitle = [ - {file = "setproctitle-1.2.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9106bcbacae534b6f82955b176723f1b2ca6514518aab44dffec05a583f8dca8"}, - {file = "setproctitle-1.2.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:30bc7a769a4451639a0adcbc97bdf7a6e9ac0ef3ddad8d63eb1e338edb3ebeda"}, - {file = "setproctitle-1.2.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e8ef655eab26e83ec105ce79036bb87e5f2bf8ba2d6f48afdd9595ef7647fcf4"}, - {file = "setproctitle-1.2.2-cp36-cp36m-win32.whl", hash = "sha256:0df728d0d350e6b1ad8436cc7add052faebca6f4d03257182d427d86d4422065"}, - {file = "setproctitle-1.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:5260e8700c5793d48e79c5e607e8e552e795b698491a4b9bb9111eb74366a450"}, - {file = "setproctitle-1.2.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ba1fb32e7267330bd9f72e69e076777a877f1cb9be5beac5e62d1279e305f37f"}, - {file = "setproctitle-1.2.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e696c93d93c23f377ccd2d72e38908d3dbfc90e45561602b805f53f2627d42ea"}, - {file = "setproctitle-1.2.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:fbf914179dc4540ee6bfd8228b4cc1f1f6fb12dad66b72b5c9b955b222403220"}, - {file = "setproctitle-1.2.2-cp37-cp37m-win32.whl", hash = "sha256:28b884e1cb9a53974e15838864283f9bad774b5c7db98c9609416bd123cb9fd1"}, - {file = "setproctitle-1.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a11d329f33221443317e2aeaee9442f22fcae25be3aa4fb8489e4f7b1f65cdd2"}, - {file = "setproctitle-1.2.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e13a5c1d9c369cb11cdfc4b75be432b83eb3205c95a69006008ffd4366f87b9e"}, - {file = "setproctitle-1.2.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:c611f65bc9de5391a1514de556f71101e6531bb0715d240efd3e9732626d5c9e"}, - {file = "setproctitle-1.2.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:bc4393576ed3ac87ddac7d1bd0faaa2fab24840a025cc5f3c21d14cf0c9c8a12"}, - {file = "setproctitle-1.2.2-cp38-cp38-win32.whl", hash = "sha256:17598f38be9ef499d74f2380bf76b558be72e87da75d66b153350e586649171b"}, - {file = "setproctitle-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:0d160d46c8f3567e0aa27b26b1f36e03122e3de475aacacc14a92b8fe45b648a"}, - {file = "setproctitle-1.2.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:077943272d0490b3f43d17379432d5e49c263f608fdf4cf624b419db762ca72b"}, - {file = "setproctitle-1.2.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:970798d948f0c90a3eb0f8750f08cb215b89dcbee1b55ffb353ad62d9361daeb"}, - {file = "setproctitle-1.2.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:3f6136966c81daaf5b4b010613fe33240a045a4036132ef040b623e35772d998"}, - {file = "setproctitle-1.2.2-cp39-cp39-win32.whl", hash = "sha256:249526a06f16d493a2cb632abc1b1fdfaaa05776339a50dd9f27c941f6ff1383"}, - {file = "setproctitle-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:4fc5bebd34f451dc87d2772ae6093adea1ea1dc29afc24641b250140decd23bb"}, - {file = "setproctitle-1.2.2.tar.gz", hash = "sha256:7dfb472c8852403d34007e01d6e3c68c57eb66433fb8a5c77b13b89a160d97df"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -smmap = [ - {file = "smmap-4.0.0-py2.py3-none-any.whl", hash = "sha256:a9a7479e4c572e2e775c404dcd3080c8dc49f39918c2cf74913d30c4c478e3c2"}, - {file = "smmap-4.0.0.tar.gz", hash = "sha256:7e65386bd122d45405ddf795637b7f7d2b532e7e401d46bbe3fb49b9986d5182"}, -] -sqlalchemy = [ - {file = "SQLAlchemy-1.3.24-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:87a2725ad7d41cd7376373c15fd8bf674e9c33ca56d0b8036add2d634dba372e"}, - {file = "SQLAlchemy-1.3.24-cp27-cp27m-win32.whl", hash = "sha256:f597a243b8550a3a0b15122b14e49d8a7e622ba1c9d29776af741f1845478d79"}, - {file = "SQLAlchemy-1.3.24-cp27-cp27m-win_amd64.whl", hash = "sha256:fc4cddb0b474b12ed7bdce6be1b9edc65352e8ce66bc10ff8cbbfb3d4047dbf4"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:f1149d6e5c49d069163e58a3196865e4321bad1803d7886e07d8710de392c548"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:14f0eb5db872c231b20c18b1e5806352723a3a89fb4254af3b3e14f22eaaec75"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:e98d09f487267f1e8d1179bf3b9d7709b30a916491997137dd24d6ae44d18d79"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:fc1f2a5a5963e2e73bac4926bdaf7790c4d7d77e8fc0590817880e22dd9d0b8b"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-win32.whl", hash = "sha256:f3c5c52f7cb8b84bfaaf22d82cb9e6e9a8297f7c2ed14d806a0f5e4d22e83fb7"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-win_amd64.whl", hash = "sha256:0352db1befcbed2f9282e72843f1963860bf0e0472a4fa5cf8ee084318e0e6ab"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:2ed6343b625b16bcb63c5b10523fd15ed8934e1ed0f772c534985e9f5e73d894"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:34fcec18f6e4b24b4a5f6185205a04f1eab1e56f8f1d028a2a03694ebcc2ddd4"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:e47e257ba5934550d7235665eee6c911dc7178419b614ba9e1fbb1ce6325b14f"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:816de75418ea0953b5eb7b8a74933ee5a46719491cd2b16f718afc4b291a9658"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-win32.whl", hash = "sha256:26155ea7a243cbf23287f390dba13d7927ffa1586d3208e0e8d615d0c506f996"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-win_amd64.whl", hash = "sha256:f03bd97650d2e42710fbe4cf8a59fae657f191df851fc9fc683ecef10746a375"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:a006d05d9aa052657ee3e4dc92544faae5fcbaafc6128217310945610d862d39"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1e2f89d2e5e3c7a88e25a3b0e43626dba8db2aa700253023b82e630d12b37109"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0d5d862b1cfbec5028ce1ecac06a3b42bc7703eb80e4b53fceb2738724311443"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:0172423a27fbcae3751ef016663b72e1a516777de324a76e30efa170dbd3dd2d"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-win32.whl", hash = "sha256:d37843fb8df90376e9e91336724d78a32b988d3d20ab6656da4eb8ee3a45b63c"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-win_amd64.whl", hash = "sha256:c10ff6112d119f82b1618b6dc28126798481b9355d8748b64b9b55051eb4f01b"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:861e459b0e97673af6cc5e7f597035c2e3acdfb2608132665406cded25ba64c7"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5de2464c254380d8a6c20a2746614d5a436260be1507491442cf1088e59430d2"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d375d8ccd3cebae8d90270f7aa8532fe05908f79e78ae489068f3b4eee5994e8"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:014ea143572fee1c18322b7908140ad23b3994036ef4c0d630110faf942652f8"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-win32.whl", hash = "sha256:6607ae6cd3a07f8a4c3198ffbf256c261661965742e2b5265a77cd5c679c9bba"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-win_amd64.whl", hash = "sha256:fcb251305fa24a490b6a9ee2180e5f8252915fb778d3dafc70f9cc3f863827b9"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:01aa5f803db724447c1d423ed583e42bf5264c597fd55e4add4301f163b0be48"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:4d0e3515ef98aa4f0dc289ff2eebb0ece6260bbf37c2ea2022aad63797eacf60"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:bce28277f308db43a6b4965734366f533b3ff009571ec7ffa583cb77539b84d6"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:8110e6c414d3efc574543109ee618fe2c1f96fa31833a1ff36cc34e968c4f233"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-win32.whl", hash = "sha256:ee5f5188edb20a29c1cc4a039b074fdc5575337c9a68f3063449ab47757bb064"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-win_amd64.whl", hash = "sha256:09083c2487ca3c0865dc588e07aeaa25416da3d95f7482c07e92f47e080aa17b"}, - {file = "SQLAlchemy-1.3.24.tar.gz", hash = "sha256:ebbb777cbf9312359b897bf81ba00dae0f5cb69fba2a18265dcc18a6f5ef7519"}, -] -sqlalchemy-jsonfield = [ - {file = "SQLAlchemy-JSONField-0.9.0.tar.gz", hash = "sha256:1cb760abf186a97beb5acdfd47dc2f98829070f679a838869162cd7c0b447e0d"}, - {file = "SQLAlchemy_JSONField-0.9.0-py2.py3-none-any.whl", hash = "sha256:1abf295f7215c8f1c0b0d30d659f4372870fc83755874ef21cad7e2f2d6419ba"}, -] -sqlalchemy-utils = [ - {file = "SQLAlchemy-Utils-0.37.8.tar.gz", hash = "sha256:a6aaee154f798be4e479af0ceffaa5034d35fcf6f40707c0947d21bde64e05e5"}, - {file = "SQLAlchemy_Utils-0.37.8-py3-none-any.whl", hash = "sha256:b1bf67d904fed16b16ef1dc07f03e5e93a6b23899f920f6b41c09be45fbb85f2"}, -] -stevedore = [ - {file = "stevedore-3.4.0-py3-none-any.whl", hash = "sha256:920ce6259f0b2498aaa4545989536a27e4e4607b8318802d7ddc3a533d3d069e"}, - {file = "stevedore-3.4.0.tar.gz", hash = "sha256:59b58edb7f57b11897f150475e7bc0c39c5381f0b8e3fa9f5c20ce6c89ec4aa1"}, -] -strenum = [ - {file = "StrEnum-0.4.6-py3-none-any.whl", hash = "sha256:957ced6742c6719e4c816f8218cdfcd7e7758fa8257c45304a3b88026793306e"}, - {file = "StrEnum-0.4.6.tar.gz", hash = "sha256:fbcdba3aad17bb00bd28023ad24813314ed95662b2055ee8d07f8bff0486c726"}, -] -tabulate = [ - {file = "tabulate-0.8.9-py3-none-any.whl", hash = "sha256:d7c013fe7abbc5e491394e10fa845f8f32fe54f8dc60c6622c6cf482d25d47e4"}, - {file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"}, -] -tenacity = [ - {file = "tenacity-4.12.0-py2.py3-none-any.whl", hash = "sha256:0dff43d3faa411ebb8506b6adc174ef725df18322eef8437aabf4f63e478ec11"}, - {file = "tenacity-4.12.0.tar.gz", hash = "sha256:dcd7646fe731b21b73870ead85a965a4202abeaf56e0588e6a8b38375110098f"}, -] -text-unidecode = [ - {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, - {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, -] -thrift = [ - {file = "thrift-0.13.0.tar.gz", hash = "sha256:9af1c86bf73433afc6010ed376a6c6aca2b54099cc0d61895f640870a9ae7d89"}, -] -tinydb = [ - {file = "tinydb-4.5.2-py3-none-any.whl", hash = "sha256:3c5e5c72c98db07e707be4e25f9e135a8a14b96938e4745b1b7187fec523ff58"}, - {file = "tinydb-4.5.2.tar.gz", hash = "sha256:7d18b2d0217827c188f177cd23df60e5cd5316a717e836a8e21c8c2488262cf5"}, -] +requests-oauthlib = [] +rsa = [] +safety = [] +searchconsole = [] +setproctitle = [] +six = [] +smmap = [] +sqlalchemy = [] +sqlalchemy-jsonfield = [] +sqlalchemy-utils = [] +stevedore = [] +strenum = [] +tabulate = [] +tenacity = [] +text-unidecode = [] +thrift = [] +tinydb = [] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] -typed-ast = [ - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6"}, - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075"}, - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528"}, - {file = "typed_ast-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428"}, - {file = "typed_ast-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3"}, - {file = "typed_ast-1.4.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f"}, - {file = "typed_ast-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363"}, - {file = "typed_ast-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7"}, - {file = "typed_ast-1.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899"}, - {file = "typed_ast-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c"}, - {file = "typed_ast-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805"}, - {file = "typed_ast-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39"}, - {file = "typed_ast-1.4.3-cp38-cp38-win32.whl", hash = "sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927"}, - {file = "typed_ast-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40"}, - {file = "typed_ast-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3"}, - {file = "typed_ast-1.4.3-cp39-cp39-win32.whl", hash = "sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808"}, - {file = "typed_ast-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c"}, - {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"}, -] -typing-extensions = [ - {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"}, - {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"}, - {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"}, -] -tzlocal = [ - {file = "tzlocal-1.5.1.tar.gz", hash = "sha256:4ebeb848845ac898da6519b9b31879cf13b6626f7184c496037b818e238f2c4e"}, -] -unicodecsv = [ - {file = "unicodecsv-0.14.1.tar.gz", hash = "sha256:018c08037d48649a0412063ff4eda26eaa81eff1546dbffa51fa5293276ff7fc"}, -] -uritemplate = [ - {file = "uritemplate-3.0.1-py2.py3-none-any.whl", hash = "sha256:07620c3f3f8eed1f12600845892b0e036a2420acf513c53f7de0abd911a5894f"}, - {file = "uritemplate-3.0.1.tar.gz", hash = "sha256:5af8ad10cec94f215e3f48112de2022e1d5a37ed427fbd88652fa908f2ab7cae"}, -] +typed-ast = [] +typing-extensions = [] +tzlocal = [] +unicodecsv = [] +uritemplate = [] urllib3 = [ {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"}, {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"}, ] -wcwidth = [ - {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, - {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, -] -werkzeug = [ - {file = "Werkzeug-0.16.1-py2.py3-none-any.whl", hash = "sha256:1e0dedc2acb1f46827daa2e399c1485c8fa17c0d8e70b6b875b4e7f54bf408d2"}, - {file = "Werkzeug-0.16.1.tar.gz", hash = "sha256:b353856d37dec59d6511359f97f6a4b2468442e454bd1c98298ddce53cac1f04"}, -] -wtforms = [ - {file = "WTForms-2.3.3-py2.py3-none-any.whl", hash = "sha256:7b504fc724d0d1d4d5d5c114e778ec88c37ea53144683e084215eed5155ada4c"}, - {file = "WTForms-2.3.3.tar.gz", hash = "sha256:81195de0ac94fbc8368abbaf9197b88c4f3ffd6c2719b5bf5fc9da744f3d829c"}, -] -zipp = [ - {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"}, - {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"}, -] -"zope.deprecation" = [ - {file = "zope.deprecation-4.4.0-py2.py3-none-any.whl", hash = "sha256:f1480b74995958b24ce37b0ef04d3663d2683e5d6debc96726eff18acf4ea113"}, - {file = "zope.deprecation-4.4.0.tar.gz", hash = "sha256:0d453338f04bacf91bbfba545d8bcdf529aa829e67b705eac8c1a7fdce66e2df"}, -] +wcwidth = [] +werkzeug = [] +wtforms = [] +zipp = [] +"zope.deprecation" = [] diff --git a/pyproject.toml b/pyproject.toml index 2297e94..50debdd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,6 +16,7 @@ pyarrow = "^5.0.0" StrEnum = "^0.4.6" python-fb-page-insights-client = {git = "https://github.com/pycontw/python-fb-page-insights-client.git", rev = "bd221ff"} Flask-OAuthlib = "^0.9.6" +Flask-OpenID = "1.3.0" [tool.poetry.dev-dependencies] safety = "^1.9.0" From 810096e2b8bbd711bd8e98b99744cd16356bdf50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Wed, 31 Aug 2022 21:18:44 +0800 Subject: [PATCH 50/89] :bug: (gather town) should use deepcopy (#100) * :bug: (gather town) should use deepcopy python's default behavior is pass-by-reference, therefore the raw data would be contaminated by transformer --- .github/workflows/python.yml | 2 +- dags/ods/kktix_ticket_orders/udfs/kktix_api.py | 9 +++++++-- dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py | 3 +-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 8ee9482..39fe9f0 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -21,7 +21,7 @@ jobs: - name: Install dependencies run: | - pip install poetry + pip install poetry==1.1.14 poetry install - name: Run linters diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index 8ec761f..dba1eca 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -1,3 +1,4 @@ +import copy from typing import Callable, Dict, List import requests @@ -29,12 +30,16 @@ def main(**context): # load name and email to mailer before data has been hashed # wait for other services # klaviyo_loader.load(event_raw_data_array) - transformed_event_raw_data_array = kktix_transformer.transform(event_raw_data_array) + transformed_event_raw_data_array = kktix_transformer.transform( + copy.deepcopy(event_raw_data_array) + ) kktix_loader.load(transformed_event_raw_data_array) print(f"Loaded {len(transformed_event_raw_data_array)} rows to BigQuery!") # pass these unhashed data through xcom to next airflow task - return kktix_transformer._extract_sensitive_unhashed_raw_data(event_raw_data_array) + return kktix_transformer._extract_sensitive_unhashed_raw_data( + copy.deepcopy(event_raw_data_array) + ) def _extract(year: int, timestamp: float) -> List[Dict]: diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py b/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py index aea2e0d..5dc9b8b 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_transformer.py @@ -1,5 +1,4 @@ import hashlib -import json from typing import Dict, List SENSITIVE_KEY_NAME_SET = { @@ -36,7 +35,7 @@ def _extract_sensitive_unhashed_raw_data(event_raw_data_array: List) -> List[Dic for event in event_raw_data_array: attendee_info = event["attendee_info"] payload = {} - for (key, value) in json.loads(attendee_info)["data"]: + for (key, value) in attendee_info["data"]: if key in SENSITIVE_KEY_NAME_SET: payload[key] = value sensitive_unhashed_raw_data_array.append(payload) From 5c115b215526dba7748f9ba7e81eda6172863dfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Fri, 2 Sep 2022 00:08:29 +0800 Subject: [PATCH 51/89] :bug: (kktix) dedupe bq records in case we backfill (#102) --- dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py b/dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py index f4bbf4a..f306aa0 100644 --- a/dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py +++ b/dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py @@ -4,6 +4,15 @@ from google.cloud import bigquery TABLE = f"{os.getenv('BIGQUERY_PROJECT')}.ods.ods_kktix_attendeeId_datetime" +# since backfill would insert duplicate records, we need this dedupe to make it idempotent +DEDUPE_SQL = f""" +CREATE OR REPLACE TABLE + `{TABLE}` AS +SELECT + DISTINCT * +FROM + `{TABLE}` +""" # nosec def create_table_if_needed() -> None: @@ -14,3 +23,4 @@ def create_table_if_needed() -> None: .format(TABLE) ) client.query(sql) + client.query(DEDUPE_SQL) From 17aeb623c4285c3f94b9d7c71de4e08560692d57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sun, 11 Sep 2022 22:24:41 +0800 Subject: [PATCH 52/89] :lock: (kktix) store kktix api into Variable (#103) * :lock: (kktix) store kktix api into Variable --- README.md | 1 + dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py | 9 +++++---- dags/ods/kktix_ticket_orders/udfs/kktix_api.py | 9 +++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 66a1bc2..532e648 100644 --- a/README.md +++ b/README.md @@ -126,6 +126,7 @@ Please use Gitlab Flow, otherwise you cannot pass dockerhub CI * KLAVIYO_KEY: Create from https://www.klaviyo.com/account#api-keys-tab * KLAVIYO_LIST_ID: Create from https://www.klaviyo.com/lists * KLAVIYO_CAMPAIGN_ID: Create from https://www.klaviyo.com/campaigns + * kktix_events_endpoint: url path of kktix's `hosting_events`, ask @gtb for details! ### CI/CD diff --git a/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py b/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py index 855a946..0119c5f 100644 --- a/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py +++ b/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py @@ -3,6 +3,7 @@ import requests import tenacity from airflow.hooks.http_hook import HttpHook +from airflow.models import Variable from dateutil.parser import parse from ods.kktix_ticket_orders.udfs import klaviyo_loader @@ -71,7 +72,7 @@ def get_event_metadatas(condition_filter: Callable) -> List[Dict]: Fetch all the ongoing events """ event_list_resp = HTTP_HOOK.run_with_advanced_retry( - endpoint="/api/v2/hosting_events?only_not_ended_event=true", + endpoint=f"{Variable.get('kktix_events_endpoint')}?only_not_ended_event=true", _retry_args=RETRY_ARGS, ).json() event_metadatas: List[dict] = [] @@ -86,7 +87,7 @@ def _get_attendance_book_id(event_id: int) -> int: Fetch attendance books """ attendance_books_resp = HTTP_HOOK.run_with_advanced_retry( - endpoint=f"/api/v2/hosting_events/{event_id}/attendance_books", + endpoint=f"{Variable.get('kktix_events_endpoint')}/{event_id}/attendance_books", _retry_args=RETRY_ARGS, ).json() return attendance_books_resp[0]["id"] @@ -98,7 +99,7 @@ def _get_attendee_ids(event_id: int, attendance_book_id: int) -> List[int]: """ attendee_ids = [] attendees_resp = HTTP_HOOK.run_with_advanced_retry( - endpoint=f"/api/v2/hosting_events/{event_id}/attendance_books/{attendance_book_id}", + endpoint=f"{Variable.get('kktix_events_endpoint')}/{event_id}/attendance_books/{attendance_book_id}", _retry_args=RETRY_ARGS, ).json() for signin_status_tuple in attendees_resp["signin_status"]: @@ -115,7 +116,7 @@ def _get_attendee_infos( attendee_infos = [] for attendee_id in attendee_ids: attendee_info = HTTP_HOOK.run_with_advanced_retry( - endpoint=f"/api/v2/hosting_events/{event_id}/attendees/{attendee_id}", + endpoint=f"{Variable.get('kktix_events_endpoint')}/{event_id}/attendees/{attendee_id}", _retry_args=RETRY_ARGS, ).json() if not attendee_info["is_paid"]: diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index 97d8679..ea4f97e 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -4,6 +4,7 @@ import requests import tenacity from airflow.hooks.http_hook import HttpHook +from airflow.models import Variable from dateutil.parser import parse from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer @@ -79,7 +80,7 @@ def get_event_metadatas(condition_filter: Callable) -> List[Dict]: Fetch all the ongoing events """ event_list_resp = HTTP_HOOK.run_with_advanced_retry( - endpoint="/api/v2/hosting_events?only_not_ended_event=true", + endpoint=f"{Variable.get('kktix_events_endpoint')}?only_not_ended_event=true", _retry_args=RETRY_ARGS, ).json() event_metadatas: List[dict] = [] @@ -94,7 +95,7 @@ def _get_attendance_book_id(event_id: int) -> int: Fetch attendance books """ attendance_books_resp = HTTP_HOOK.run_with_advanced_retry( - endpoint=f"/api/v2/hosting_events/{event_id}/attendance_books", + endpoint=f"{Variable.get('kktix_events_endpoint')}/{event_id}/attendance_books", _retry_args=RETRY_ARGS, ).json() return attendance_books_resp[0]["id"] @@ -106,7 +107,7 @@ def _get_attendee_ids(event_id: int, attendance_book_id: int) -> List[int]: """ attendee_ids = [] attendees_resp = HTTP_HOOK.run_with_advanced_retry( - endpoint=f"/api/v2/hosting_events/{event_id}/attendance_books/{attendance_book_id}", + endpoint=f"{Variable.get('kktix_events_endpoint')}/{event_id}/attendance_books/{attendance_book_id}", _retry_args=RETRY_ARGS, ).json() for signin_status_tuple in attendees_resp["signin_status"]: @@ -123,7 +124,7 @@ def _get_attendee_infos( attendee_infos = [] for attendee_id in attendee_ids: attendee_info = HTTP_HOOK.run_with_advanced_retry( - endpoint=f"/api/v2/hosting_events/{event_id}/attendees/{attendee_id}", + endpoint=f"{Variable.get('kktix_events_endpoint')}/{event_id}/attendees/{attendee_id}", _retry_args=RETRY_ARGS, ).json() if not attendee_info["is_paid"]: From 5bbc85f66360895e2ded874f295f582b847db2a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Tue, 20 Sep 2022 09:32:31 +0800 Subject: [PATCH 53/89] :pencil: (cli) print out hint msg (#104) --- contrib/survey_cake/upload-survey-cake-csv-to-bigquery.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contrib/survey_cake/upload-survey-cake-csv-to-bigquery.py b/contrib/survey_cake/upload-survey-cake-csv-to-bigquery.py index 7bb44c5..ec1a23c 100644 --- a/contrib/survey_cake/upload-survey-cake-csv-to-bigquery.py +++ b/contrib/survey_cake/upload-survey-cake-csv-to-bigquery.py @@ -30,6 +30,9 @@ ) PARSER.add_argument("-p", "--prod", action="store_true") ARGS = PARSER.parse_args() + print( + "HINT: the default mode would load data to dataset `test`. To load data to bigquery's `ods` dataset, please add `--prod` flag!" + ) for filename, metadata in FILENAMES.items(): SURVEY_CAKE_CSV_UPLOADER = SurveyCakeCSVUploader( year=ARGS.year, filename=filename From c09c35b16475a673a9d61ce3a0a310fb3d054dca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Fri, 23 Sep 2022 10:37:15 +0800 Subject: [PATCH 54/89] (kktix): document this kktix data ingestion flow up (#105) * (kktix): document this kktix data ingestion flow up --- .github/workflows/python.yml | 1 + contrib/README.md | 6 ++++++ docs/kktix.png | Bin 0 -> 487548 bytes 3 files changed, 7 insertions(+) create mode 100644 docs/kktix.png diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 39fe9f0..2b1e784 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -22,6 +22,7 @@ jobs: - name: Install dependencies run: | pip install poetry==1.1.14 + poetry config experimental.new-installer false poetry install - name: Run linters diff --git a/contrib/README.md b/contrib/README.md index 7d9cb04..ec800e4 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -2,6 +2,12 @@ ## Upload KKTIX +![](../docs/kktix.png) + +1. Navigate to KKTIX's attendees page +2. Download the CSV +3. `upload-kktix-ticket-csv-to-bigquery.py -p pycontw-225217 -d ods -t ods_kktix_ticket__attendees --upload` + ## Survey Cake [Demo Video](https://www.loom.com/share/4c494f1d3ce443c6a43ed514c53b70ff) diff --git a/docs/kktix.png b/docs/kktix.png new file mode 100644 index 0000000000000000000000000000000000000000..87114d776445bc31c653c0a49a2951cb115876fb GIT binary patch literal 487548 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%0AuMBc!uQ(SBC3qj_NI#v+~|! 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 ww7ypNK>Y_3tPyT%iQ)kQnJHPRviZmQ(YIg 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 )${|p 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%0A{PdbO{zY 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�JrN#n{+H9>V^ha(Tp2r-O@acTxt=+J}!UrZXK5>|@u{mc? zY3nr|5at<1C@+&a6g7k~0c+ghp6leSB|B%Z<#|SVU2A+$1-+N#s}P(K6{_t>ooa|U zra><|)OR#52*Y=rr8=E1_573p;rZ8Ff^tH#kU9HyU%bj+NKF->m4FuueoER6H4y0u zO_-qco-~mlaV|GuH*_@C5=LwAiU*0x>gPkyw&hj1C^LGvbX;p?>Q7F>shc(S6uW|j z2Hkxb`wQ0F zX~DQMQD()>YQ)K*&{GSGPlqlrFpRb}nMs(%9$C;2>cK;{O)~c<=N>X>iQ6_hFeoEl zor@>R9w0z0lq{?^1$#fKau}j5Kq-~Ic=~^4EidovrQt+tK$@SHA;djyL(_?p#mBM% z#Dj5%&2hN)Q~oUaOg~+E8(+MLr{z7T)ygZq-aeIakxXRdp!+9TYw6&7%b{TOnT2@) zqH_T$3|Y09IqGhDz-u;p;XmbeSD2?zdJnnu18N|8GB0tpoKs1O#>Unl?WzLy7^c|L7vM8oShu_c&HXlmnFdyU;@Au%(W+hMx zpf|UOw8A0WnRR)j6M$l|wrb|1iieuQhg?@7%Xy@wW*fG}Ekl;XCJ`tegdg_!q|nr& zW23Q@mc!dLw2Or~m|5&f@Ke8t(r;MCyUF2+Z{R_nSFJnx!0Zis#q#jx0>cch=e9%o zawOy>L3`^DT+5YFJYIOFvL11IyD`fWK&2KpeSaWh2T{DlDl{m8!DxwpAT^ z>_`SrMn*=iDDf{Bdm`+iG1T9Ac;J&ONu=J|m7!D`iL>NTgL&+lai}>bxGv;61N?R3 zCVP5kxxQD(^-v9Cdx&4y5TCnX?63GJ1Y)T;to{c_<0~eieKB>3v$OM7XfULoEck4- zeCMAZ;OS&c<=#15Gs>NetoCw?a`|#%mzuW7x~^7W*utjF|=g{6TdPg-~L&+=bHb^gR)158IQfD?PV2)vy}bm ocV8i9p?qT^zw!R*X%y=Uy_3J@Bjb+ literal 0 HcmV?d00001 From c787e428a520bfd1d1193a163dcda4d0180724e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Mon, 31 Oct 2022 10:15:17 +0800 Subject: [PATCH 55/89] :bug: (kktix-uploader) handled edge cases (#106) --- contrib/upload-kktix-ticket-csv-to-bigquery.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/contrib/upload-kktix-ticket-csv-to-bigquery.py b/contrib/upload-kktix-ticket-csv-to-bigquery.py index da557ab..4f24086 100755 --- a/contrib/upload-kktix-ticket-csv-to-bigquery.py +++ b/contrib/upload-kktix-ticket-csv-to-bigquery.py @@ -204,9 +204,11 @@ def upload_dataframe_to_bigquery( job_config.schema_update_options = [ bigquery.SchemaUpdateOption.ALLOW_FIELD_ADDITION ] + if "vat_number" in df.columns: + df["vat_number"] = df["vat_number"].astype("string") # dump the csv into bigquery - job = client.load_table_from_dataframe(df, table_ref, job_config=job_config,) + job = client.load_table_from_dataframe(df, table_ref, job_config=job_config,) job.result() logging.info( @@ -343,7 +345,7 @@ def sanitize_column_names(df: pd.DataFrame) -> pd.DataFrame: def hash_string(string_to_hash: str) -> str: sha = hashlib.sha256() - sha.update(string_to_hash.encode("utf-8")) + sha.update(str(string_to_hash).encode("utf-8")) string_hashed = sha.hexdigest() return string_hashed @@ -386,6 +388,10 @@ def main(): # load the csv into bigquery df = pd.read_csv(args.csv_file) + if "Email" in df.columns: + # BUG: theoretically, column name should be `Contact Email` not `Email` + # hope registration team would remove `Email` column in 2023 + df = df.drop(columns=["Email"]) sanitized_df = sanitize_column_names(df) hash_privacy_info(sanitized_df) From 6a2c55869583dec79ecfafd7807fb4371d423157 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Fri, 13 Jan 2023 11:46:59 +0800 Subject: [PATCH 56/89] [ci]: set up time-limit in case out of quota (#107) --- .github/workflows/python.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 2b1e784..6686a2c 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -11,7 +11,7 @@ env: jobs: build: runs-on: ubuntu-latest - + timeout-minutes: 10 steps: - uses: actions/checkout@v2 - name: Set up Python 3.8 From a103b7b7a2d1a7cfb7303fb48504aa878f0287f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sun, 29 Jan 2023 22:23:32 +0800 Subject: [PATCH 57/89] :sparkles: (discord) add new reminder (#108) --- dags/app/channel_reminder/dag.py | 30 ++++++++++------------- dags/app/channel_reminder/udfs/discord.py | 7 +++--- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/dags/app/channel_reminder/dag.py b/dags/app/channel_reminder/dag.py index 3f5f252..594e36f 100644 --- a/dags/app/channel_reminder/dag.py +++ b/dags/app/channel_reminder/dag.py @@ -10,33 +10,29 @@ DEFAULT_ARGS = { "owner": "davidtnfsh", "depends_on_past": False, - "start_date": datetime(2020, 12, 9), + "start_date": datetime(2022, 9, 15), "retries": 2, "retry_delay": timedelta(minutes=5), "on_failure_callback": lambda x: "Need to send notification to Discord", } dag = DAG( - "DISCORD_REMINDER", + "DISCORD_CHORES_REMINDER", default_args=DEFAULT_ARGS, - schedule_interval=timedelta(weeks=2), + schedule_interval="@yearly", max_active_runs=1, catchup=False, ) with dag: - for team in ("DATATEAM",): - REMINDER_OF_THIS_TEAM = PythonOperator( - task_id=f"REMINDER_OF_TEAM_{team}", - python_callable=discord.main, - op_kwargs={ - "team": team, - "msg": """ -1. Data Team 這一季最重要的目標是讓大家多 social 以及多舉辦 sharing session \n -(新朋友可以想一下主題,鼓勵分享讓大家認識你XD) -2. 其次是建好 PyCon TW 的 Data Infra -3. 雙周會前請在 Hackmd 上更新自己的近況:[Hackmd](https://hackmd.io/hAO4NFR3SfWt1fodHtI_nA) -4. 認領任務:[Trello](https://trello.com/b/Rxtrpqxi/data-squad)""", - }, - ) + REMINDER_OF_THIS_TEAM = PythonOperator( + task_id="KLAIVYO_REMINDER", + python_callable=discord.main, + op_kwargs={ + "msg": """ +<@&790739794148982796> <@&755827317904769184> <@&791157626099859487> +記得大會結束後,要有一個人負責去取消 Klaviyo 的訂閱,不然我們每個月會一直繳 $NTD2000 喔! +""", + }, + ) if __name__ == "__main__": dag.cli() diff --git a/dags/app/channel_reminder/udfs/discord.py b/dags/app/channel_reminder/udfs/discord.py index bf3d195..e3b912f 100644 --- a/dags/app/channel_reminder/udfs/discord.py +++ b/dags/app/channel_reminder/udfs/discord.py @@ -1,10 +1,9 @@ -import os - import requests +from airflow.models import Variable -def main(team: str, msg: str) -> None: +def main(msg: str) -> None: requests.post( - os.getenv(f"{team}_DISCORD_WEBHOOK", ""), + Variable.get("DISCORD_CHORES_REMINDER_WEBHOOK"), json={"username": "Data Team Airflow reminder", "content": msg}, ) From f4578357292e054a85b48ba7ffc81399064ff7ed Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Wed, 8 Mar 2023 23:35:05 +0800 Subject: [PATCH 58/89] feat(app): add program proposal discord reminder --- dags/app/proposal_reminder/__init__.py | 0 dags/app/proposal_reminder/dag.py | 32 ++++++++++++++++++++++++++ dags/app/proposal_reminder/udf.py | 28 ++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 dags/app/proposal_reminder/__init__.py create mode 100644 dags/app/proposal_reminder/dag.py create mode 100644 dags/app/proposal_reminder/udf.py diff --git a/dags/app/proposal_reminder/__init__.py b/dags/app/proposal_reminder/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dags/app/proposal_reminder/dag.py b/dags/app/proposal_reminder/dag.py new file mode 100644 index 0000000..b1389e5 --- /dev/null +++ b/dags/app/proposal_reminder/dag.py @@ -0,0 +1,32 @@ +""" +Send Proposal Summary to Discord +""" +from datetime import datetime, timedelta + +from airflow import DAG +from airflow.operators.python_operator import PythonOperator + +DEFAULT_ARGS = { + "owner": "Henry Lee", + "depends_on_past": False, + "start_date": datetime(2023, 3, 1), + "end_date": datetime(2023, 4, 1), + "retries": 2, + "retry_delay": timedelta(minutes=5), +} + +with DAG( + "DISCORD_PROPOSAL_REMINDER", + default_args=DEFAULT_ARGS, + schedule_interval="0 16 * * 5", # At 16:00 (00:00 +8) on Friday + max_active_runs=1, + catchup=False, +) as dag: + from app.proposal_reminder import udf + + PythonOperator( + task_id="SEND_PROPOSAL_SUMMARY", python_callable=udf.main, + ) + +if __name__ == "__main__": + dag.cli() diff --git a/dags/app/proposal_reminder/udf.py b/dags/app/proposal_reminder/udf.py new file mode 100644 index 0000000..d4fbc48 --- /dev/null +++ b/dags/app/proposal_reminder/udf.py @@ -0,0 +1,28 @@ +import requests +from airflow.models import Variable + + +def main(): + summary = get_proposal_summary() + send_discord_reminder( + n_talk=summary["num_proposed_talk"], + n_tutorial=summary["num_proposed_tutorial"], + ) + + +def get_proposal_summary() -> dict: + url = "https://tw.pycon.org/prs/api/proposals/summary/" + headers = { + "Content-Type": "application/json", + "authorization": Variable.get("PYCON_API_TOKEN"), + } + response = requests.get(url, headers=headers) + return response.json() + + +def send_discord_reminder(n_talk: int, n_tutorial: int) -> None: + webhook_url = Variable.get("DISCORD_PROGRAM_REMINDER_WEBHOOK") + msg = f"目前投稿議程數: {n_talk}; 課程數: {n_tutorial}" + requests.post( + url=webhook_url, json={"username": "Program talk reminder", "content": msg}, + ) From b1edd10672c2bd02edd045743d8de24f9e249e23 Mon Sep 17 00:00:00 2001 From: henry410213028 Date: Tue, 28 Mar 2023 20:22:06 +0800 Subject: [PATCH 59/89] increase program talk notify frequency --- dags/app/proposal_reminder/dag.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dags/app/proposal_reminder/dag.py b/dags/app/proposal_reminder/dag.py index b1389e5..7eb4191 100644 --- a/dags/app/proposal_reminder/dag.py +++ b/dags/app/proposal_reminder/dag.py @@ -16,9 +16,9 @@ } with DAG( - "DISCORD_PROPOSAL_REMINDER", + "DISCORD_PROPOSAL_REMINDER_v2", default_args=DEFAULT_ARGS, - schedule_interval="0 16 * * 5", # At 16:00 (00:00 +8) on Friday + schedule_interval="0 16 * * *", # At 16:00 (00:00 +8) max_active_runs=1, catchup=False, ) as dag: From d74567dbf4eea52e8446e7de176099262d1f1511 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Thu, 13 Apr 2023 22:14:12 +0800 Subject: [PATCH 60/89] [chores]: update dag start date for 2023 (#113) --- README.md | 1 + dags/ods/kktix_ticket_orders/kktix_dag.py | 4 ++-- dags/ods/kktix_ticket_orders/udfs/discord_bot.py | 11 ++++++++--- dags/ods/kktix_ticket_orders/udfs/kktix_api.py | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 532e648..4f2f756 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,7 @@ Please use Gitlab Flow, otherwise you cannot pass dockerhub CI * Airflow: * Connections: * kktix_api: `conn_id=kktix_api`, `host` and `extra(header)` are confidential since its KKTIX's private endpoint. Please DM @GTB or data team's teammembers for these credentials. + * extra: `{"Authorization": "bearer xxx"}` * klaviyo_api: `conn_id=klaviyo_api`, `host` is https://a.klaviyo.com/api * Variables: * KLAVIYO_KEY: Create from https://www.klaviyo.com/account#api-keys-tab diff --git a/dags/ods/kktix_ticket_orders/kktix_dag.py b/dags/ods/kktix_ticket_orders/kktix_dag.py index ffdf7a6..074074e 100644 --- a/dags/ods/kktix_ticket_orders/kktix_dag.py +++ b/dags/ods/kktix_ticket_orders/kktix_dag.py @@ -10,13 +10,13 @@ DEFAULT_ARGS = { "owner": "davidtnfsh@gmail.com", "depends_on_past": False, - "start_date": datetime(2022, 7, 23), + "start_date": datetime(2023, 4, 1), "retries": 2, "retry_delay": timedelta(minutes=5), "on_failure_callback": lambda x: "Need to send notification to Discord!", } dag = DAG( - "KKTIX_TICKET_ORDERS_V3", + "KKTIX_TICKET_ORDERS_V4", default_args=DEFAULT_ARGS, schedule_interval="*/5 * * * *", max_active_runs=1, diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index a609f72..cbc2adc 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -46,12 +46,17 @@ def _check_if_refunded_ticket_exists() -> List[int]: f""" SELECT ID, - CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, - '$.id'), '"', '') AS INT64) AS ATTENDEE_ID + CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, '$.id'), '"', '') AS INT64) AS ATTENDEE_ID FROM `{TABLE}` WHERE - REFUNDED IS NULL OR REFUNDED = FALSE + (REFUNDED IS NULL + OR REFUNDED = FALSE) + AND EXTRACT(YEAR + FROM + TIMESTAMP_SECONDS(CAST(CAST(JSON_EXTRACT(ATTENDEE_INFO, '$.updated_at') AS FLOAT64) AS int64))) = EXTRACT(year + FROM + CURRENT_DATE()) """ # nosec ) event_ids_and_attendee_ids = query_job.result() diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index ea4f97e..b86f3d4 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -95,7 +95,7 @@ def _get_attendance_book_id(event_id: int) -> int: Fetch attendance books """ attendance_books_resp = HTTP_HOOK.run_with_advanced_retry( - endpoint=f"{Variable.get('kktix_events_endpoint')}/{event_id}/attendance_books", + endpoint=f"{Variable.get('kktix_events_endpoint')}/{event_id}/attendance_books?only_not_ended_event=true", _retry_args=RETRY_ARGS, ).json() return attendance_books_resp[0]["id"] From 6edd185bd30792610bc242b2f3328da2d247ba0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Thu, 13 Apr 2023 22:45:37 +0800 Subject: [PATCH 61/89] [chores]: update start date to accelerate the extraction (#114) --- dags/ods/kktix_ticket_orders/kktix_dag.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/kktix_dag.py b/dags/ods/kktix_ticket_orders/kktix_dag.py index 074074e..7b3d23f 100644 --- a/dags/ods/kktix_ticket_orders/kktix_dag.py +++ b/dags/ods/kktix_ticket_orders/kktix_dag.py @@ -10,13 +10,13 @@ DEFAULT_ARGS = { "owner": "davidtnfsh@gmail.com", "depends_on_past": False, - "start_date": datetime(2023, 4, 1), + "start_date": datetime(2023, 4, 10, 4), "retries": 2, "retry_delay": timedelta(minutes=5), "on_failure_callback": lambda x: "Need to send notification to Discord!", } dag = DAG( - "KKTIX_TICKET_ORDERS_V4", + "KKTIX_TICKET_ORDERS_V5", default_args=DEFAULT_ARGS, schedule_interval="*/5 * * * *", max_active_runs=1, From 14145fac0ce4ffc0a83d4c91daf94cae5289329e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Thu, 13 Apr 2023 22:49:44 +0800 Subject: [PATCH 62/89] [docs]: add year-to-year jobs block (#111) * [docs]: add year-to-year jobs block * docs(kktix): update README --------- Co-authored-by: Henry Lee --- README.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4f2f756..42b2c27 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,17 @@ Using Airflow to implement our ETL pipelines +## Year to Year Jobs + +這三個 job 什麼時候打開需要人工確認(麻煩當年的組長大大了),理論上是售票開始前我們要測試一下然後打開 + +1. `gcloud beta compute ssh --zone asia-east1-b data-team --project pycontw-225217 -- -NL 8080:localhost:8080` +2. Navigate to +3. 打開下列的 Airflow tasks: + 1. `KKTIX_DISCORD_BOT_FOR_TEAM_REGISTRATION`: 每天送賣票的銷量資訊到 discord 給註冊組看 + 2. `KKTIX_TICKET_ORDERS_V3`: 每五分鐘就去抓最新的 kktix 資料進 BigQuery, 更新後 metabase 相關連的 dashboard 就會更新(售票完之後可以關掉) + 3. `KLAVIYO_SEND_MAIL_V3`: 每年寄發行前信時啓動隨買即用, 已購票的用戶會批次寄發信件, 新的購票者也會批次派發送信 + ## Dags * Dag 的命名規則請看這篇 [阿里巴巴大數據實戰](https://medium.com/@davidtnfsh/%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B9%8B%E8%B7%AF-%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%AE%9E%E8%B7%B5-%E8%AE%80%E6%9B%B8%E5%BF%83%E5%BE%97-54e795c2b8c) @@ -114,10 +125,13 @@ Please use Gitlab Flow, otherwise you cannot pass dockerhub CI ## Deployment & Setting Up Credentials/Env -1. Manually deploy to Google compute instance - 1. `cd /home/zhangtaiwei/pycon-etl` - 2. `sudo git pull` -2. Credentials: +1. Login to data team's server: + 1. `gcloud compute ssh --zone "asia-east1-b" "data-team" --project "pycontw-225217"` + 2. service: + * ETL: `/home/zhangtaiwei/pycon-etl` + * btw, metabase is located here: `/mnt/disks/data-team-additional-disk/pycontw-infra-scripts/data_team/metabase_server` +2. Pull the latest codebase to this server: `sudo git pull` +3. Add Credentials (only need to do once): * Airflow: * Connections: * kktix_api: `conn_id=kktix_api`, `host` and `extra(header)` are confidential since its KKTIX's private endpoint. Please DM @GTB or data team's teammembers for these credentials. From 0bbabd32801ae12aa95d05943c072b17337e6429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Fri, 14 Apr 2023 00:11:16 +0800 Subject: [PATCH 63/89] [fix]: miss a filter condition to filter out wrong year (#115) --- dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py | 2 +- dags/ods/kktix_ticket_orders/udfs/discord_bot.py | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py b/dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py index f306aa0..28330da 100644 --- a/dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py +++ b/dags/ods/kktix_ticket_orders/udfs/bigquery_loader.py @@ -3,7 +3,7 @@ from google.cloud import bigquery -TABLE = f"{os.getenv('BIGQUERY_PROJECT')}.ods.ods_kktix_attendeeId_datetime" +TABLE = f"{os.getenv('BIGQUERY_PROJECT', 'pycontw-225217')}.ods.ods_kktix_attendeeId_datetime" # since backfill would insert duplicate records, we need this dedupe to make it idempotent DEDUPE_SQL = f""" CREATE OR REPLACE TABLE diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index cbc2adc..c08859f 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -106,9 +106,16 @@ def _get_statistics_from_bigquery() -> Dict: FROM `{TABLE}` WHERE - REFUNDED IS NULL OR REFUNDED = FALSE + (REFUNDED IS NULL + OR REFUNDED = FALSE) + AND EXTRACT(YEAR + FROM + TIMESTAMP_SECONDS(CAST(CAST(JSON_EXTRACT(ATTENDEE_INFO, '$.updated_at') AS FLOAT64) AS int64))) = EXTRACT(year + FROM + CURRENT_DATE()) GROUP BY - NAME, TICKET_NAME; + NAME, + TICKET_NAME; """ # nosec ) result = query_job.result() From dbc04388ccef1fb29c69fad36a74d465793b1043 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Tue, 2 May 2023 22:05:06 +0800 Subject: [PATCH 64/89] fix(ods): wrong kktix order stats --- .../kktix_ticket_orders/udfs/discord_bot.py | 49 +++++++------------ 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py index c08859f..b6bca7a 100644 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py @@ -46,17 +46,12 @@ def _check_if_refunded_ticket_exists() -> List[int]: f""" SELECT ID, - CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, '$.id'), '"', '') AS INT64) AS ATTENDEE_ID + CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, + '$.id'), '"', '') AS INT64) AS ATTENDEE_ID FROM `{TABLE}` WHERE - (REFUNDED IS NULL - OR REFUNDED = FALSE) - AND EXTRACT(YEAR - FROM - TIMESTAMP_SECONDS(CAST(CAST(JSON_EXTRACT(ATTENDEE_INFO, '$.updated_at') AS FLOAT64) AS int64))) = EXTRACT(year - FROM - CURRENT_DATE()) + REFUNDED IS NULL OR REFUNDED = FALSE """ # nosec ) event_ids_and_attendee_ids = query_job.result() @@ -99,23 +94,24 @@ def _mark_tickets_as_refunded(refunded_attendee_ids: List[int]) -> None: def _get_statistics_from_bigquery() -> Dict: query_job = CLIENT.query( f""" + WITH UNIQUE_RECORDS AS ( + SELECT DISTINCT + NAME, + JSON_EXTRACT(ATTENDEE_INFO, '$.id') AS ORDER_ID, + REPLACE(JSON_EXTRACT(ATTENDEE_INFO, '$.ticket_name'), '"', '') AS TICKET_NAME, + FROM + `{TABLE}` + WHERE + ((REFUNDED IS NULL) OR (REFUNDED = FALSE)) AND (NAME LIKE "PyCon TW 2023 Registration%") + ) + SELECT NAME, - REPLACE(JSON_EXTRACT(ATTENDEE_INFO, '$.ticket_name'), '"', '') AS TICKET_NAME, + TICKET_NAME, COUNT(1) AS COUNTS - FROM - `{TABLE}` - WHERE - (REFUNDED IS NULL - OR REFUNDED = FALSE) - AND EXTRACT(YEAR - FROM - TIMESTAMP_SECONDS(CAST(CAST(JSON_EXTRACT(ATTENDEE_INFO, '$.updated_at') AS FLOAT64) AS int64))) = EXTRACT(year - FROM - CURRENT_DATE()) + FROM UNIQUE_RECORDS GROUP BY - NAME, - TICKET_NAME; + NAME, TICKET_NAME; """ # nosec ) result = query_job.result() @@ -134,16 +130,9 @@ def _send_webhook_to_discord(payload: Text) -> None: def _compose_discord_msg(payload) -> Text: msg = f"Hi 這是今天 {datetime.now().date()} 的票種統計資料,售票期結束後,請 follow README 的 `gcloud` 指令進去把 Airflow DAG 關掉\n\n" total = 0 - msg_dict = defaultdict(list) for name, ticket_name, counts in payload: - msg_dict[name].append((ticket_name, counts)) - for name, ticket_name_counts_tuples in sorted(msg_dict.items(), key=lambda x: x[0]): - msg += f"{name}\n" - for ticket_name, counts in sorted( - ticket_name_counts_tuples, key=lambda x: x[0] - ): - msg += f" * 票種:{ticket_name}\t{counts}張\n" - total += counts + msg += f" * 票種:{ticket_name}\t{counts}張\n" + total += counts msg += "dashboard: https://metabase.pycon.tw/question/142\n" msg += f"總共賣出 {total} 張喔~" return msg From 075f37d895ba06de255b7fd84018013bedb855d7 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sat, 6 May 2023 21:23:28 +0800 Subject: [PATCH 65/89] refactor(ods): create kktix refund dag, move discord bot to app module --- dags/app/channel_reminder/__init__.py | 0 dags/app/channel_reminder/dag.py | 11 +- dags/app/channel_reminder/udf.py | 13 ++ dags/app/channel_reminder/udfs/discord.py | 9 -- dags/app/discord.py | 17 ++ dags/app/proposal_reminder/dag.py | 2 +- dags/app/proposal_reminder/udf.py | 24 ++- dags/app/team_registration_bot/__init__.py | 0 .../team_registration_bot/dag.py} | 6 +- dags/app/team_registration_bot/udf.py | 61 +++++++ .../kktix_ticket_orders/kktix_refund_dag.py | 34 ++++ .../udfs/batch_kktix2mailer.py | 117 +------------- .../kktix_ticket_orders/udfs/discord_bot.py | 149 ------------------ .../kktix_ticket_orders/udfs/kktix_refund.py | 75 +++++++++ 14 files changed, 218 insertions(+), 300 deletions(-) create mode 100644 dags/app/channel_reminder/__init__.py create mode 100644 dags/app/channel_reminder/udf.py delete mode 100644 dags/app/channel_reminder/udfs/discord.py create mode 100644 dags/app/discord.py create mode 100644 dags/app/team_registration_bot/__init__.py rename dags/{ods/kktix_ticket_orders/discord_team_registration_bot_dag.py => app/team_registration_bot/dag.py} (76%) create mode 100644 dags/app/team_registration_bot/udf.py create mode 100644 dags/ods/kktix_ticket_orders/kktix_refund_dag.py delete mode 100644 dags/ods/kktix_ticket_orders/udfs/discord_bot.py create mode 100644 dags/ods/kktix_ticket_orders/udfs/kktix_refund.py diff --git a/dags/app/channel_reminder/__init__.py b/dags/app/channel_reminder/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dags/app/channel_reminder/dag.py b/dags/app/channel_reminder/dag.py index 594e36f..43a40c0 100644 --- a/dags/app/channel_reminder/dag.py +++ b/dags/app/channel_reminder/dag.py @@ -5,7 +5,7 @@ from airflow import DAG from airflow.operators.python_operator import PythonOperator -from app.channel_reminder.udfs import discord +from app.channel_reminder import udfs DEFAULT_ARGS = { "owner": "davidtnfsh", @@ -24,14 +24,7 @@ ) with dag: REMINDER_OF_THIS_TEAM = PythonOperator( - task_id="KLAIVYO_REMINDER", - python_callable=discord.main, - op_kwargs={ - "msg": """ -<@&790739794148982796> <@&755827317904769184> <@&791157626099859487> -記得大會結束後,要有一個人負責去取消 Klaviyo 的訂閱,不然我們每個月會一直繳 $NTD2000 喔! -""", - }, + task_id="KLAIVYO_REMINDER", python_callable=udfs.main ) if __name__ == "__main__": diff --git a/dags/app/channel_reminder/udf.py b/dags/app/channel_reminder/udf.py new file mode 100644 index 0000000..9e6ee96 --- /dev/null +++ b/dags/app/channel_reminder/udf.py @@ -0,0 +1,13 @@ +from app import discord +from airflow.models import Variable + +def main() -> None: + kwargs = { + "webhook_url": Variable.get("DISCORD_CHORES_REMINDER_WEBHOOK"), + "username": "Data Team Airflow reminder", + "msg": ( + "<@&790739794148982796> <@&755827317904769184> <@&791157626099859487>\n", + "記得大會結束後,要有一個人負責去取消 Klaviyo 的訂閱,不然我們每個月會一直繳 $NTD2000 喔!" + ) + } + discord.send_webhook_message(**kwargs) diff --git a/dags/app/channel_reminder/udfs/discord.py b/dags/app/channel_reminder/udfs/discord.py deleted file mode 100644 index e3b912f..0000000 --- a/dags/app/channel_reminder/udfs/discord.py +++ /dev/null @@ -1,9 +0,0 @@ -import requests -from airflow.models import Variable - - -def main(msg: str) -> None: - requests.post( - Variable.get("DISCORD_CHORES_REMINDER_WEBHOOK"), - json={"username": "Data Team Airflow reminder", "content": msg}, - ) diff --git a/dags/app/discord.py b/dags/app/discord.py new file mode 100644 index 0000000..7181e05 --- /dev/null +++ b/dags/app/discord.py @@ -0,0 +1,17 @@ +import requests +import tenacity + +session = requests.session() + +RETRY_ARGS = dict( + wait=tenacity.wait_random(min=1, max=10), + stop=tenacity.stop_after_attempt(10), + retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError), +) + +@tenacity.retry(**RETRY_ARGS) +def send_webhook_message(webhook_url: str, username: str, msg: str) -> None: + session.post( + webhook_url, + json={"username": username, "content": msg}, + ) diff --git a/dags/app/proposal_reminder/dag.py b/dags/app/proposal_reminder/dag.py index 7eb4191..27e1f3c 100644 --- a/dags/app/proposal_reminder/dag.py +++ b/dags/app/proposal_reminder/dag.py @@ -5,6 +5,7 @@ from airflow import DAG from airflow.operators.python_operator import PythonOperator +from app.proposal_reminder import udf DEFAULT_ARGS = { "owner": "Henry Lee", @@ -22,7 +23,6 @@ max_active_runs=1, catchup=False, ) as dag: - from app.proposal_reminder import udf PythonOperator( task_id="SEND_PROPOSAL_SUMMARY", python_callable=udf.main, diff --git a/dags/app/proposal_reminder/udf.py b/dags/app/proposal_reminder/udf.py index d4fbc48..56e6e26 100644 --- a/dags/app/proposal_reminder/udf.py +++ b/dags/app/proposal_reminder/udf.py @@ -1,13 +1,17 @@ import requests from airflow.models import Variable +from app import discord - -def main(): +def main() -> None: summary = get_proposal_summary() - send_discord_reminder( - n_talk=summary["num_proposed_talk"], - n_tutorial=summary["num_proposed_tutorial"], - ) + n_talk = summary["num_proposed_talk"] + n_tutorial = summary["num_proposed_tutorial"] + kwargs = { + "webhook_url": Variable.get("DISCORD_PROGRAM_REMINDER_WEBHOOK"), + "username": "Program talk reminder", + "msg": f"目前投稿議程數: {n_talk}; 課程數: {n_tutorial}" + } + discord.send_webhook_message(**kwargs) def get_proposal_summary() -> dict: @@ -18,11 +22,3 @@ def get_proposal_summary() -> dict: } response = requests.get(url, headers=headers) return response.json() - - -def send_discord_reminder(n_talk: int, n_tutorial: int) -> None: - webhook_url = Variable.get("DISCORD_PROGRAM_REMINDER_WEBHOOK") - msg = f"目前投稿議程數: {n_talk}; 課程數: {n_tutorial}" - requests.post( - url=webhook_url, json={"username": "Program talk reminder", "content": msg}, - ) diff --git a/dags/app/team_registration_bot/__init__.py b/dags/app/team_registration_bot/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dags/ods/kktix_ticket_orders/discord_team_registration_bot_dag.py b/dags/app/team_registration_bot/dag.py similarity index 76% rename from dags/ods/kktix_ticket_orders/discord_team_registration_bot_dag.py rename to dags/app/team_registration_bot/dag.py index d78aa98..83dd06a 100644 --- a/dags/ods/kktix_ticket_orders/discord_team_registration_bot_dag.py +++ b/dags/app/team_registration_bot/dag.py @@ -1,11 +1,11 @@ """ -send daily ordering metrics to discord channel, this feature is for team registration +send daily ordering metrics to discord channel """ from datetime import datetime, timedelta from airflow import DAG from airflow.operators.python_operator import PythonOperator -from ods.kktix_ticket_orders.udfs import discord_bot +from app.team_registration_bot import udfs DEFAULT_ARGS = { "owner": "davidtnfsh@gmail.com", @@ -24,7 +24,7 @@ ) with dag: SEND_MSG_TO_DISCORD = PythonOperator( - task_id="LOAD_TO_DISCORD", python_callable=discord_bot.send, + task_id="LOAD_TO_DISCORD", python_callable=udfs.main, ) if __name__ == "__main__": diff --git a/dags/app/team_registration_bot/udf.py b/dags/app/team_registration_bot/udf.py new file mode 100644 index 0000000..39ba85b --- /dev/null +++ b/dags/app/team_registration_bot/udf.py @@ -0,0 +1,61 @@ +import os +from datetime import datetime +from typing import Dict, Text + +import requests +from airflow.models import Variable +from app import discord +from google.cloud import bigquery + +TABLE = f"{os.getenv('BIGQUERY_PROJECT', 'pycontw-225217')}.ods.ods_kktix_attendeeId_datetime" + +CLIENT = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) + + +def main() -> None: + statistics = _get_statistics_from_bigquery() + msg = _compose_discord_msg(statistics) + kwargs = { + "webhook_url": Variable.get("discord_webhook_registration_endpoint"), + "username": "KKTIX order report", + "msg": msg + } + discord.send_webhook_message(**kwargs) + + +def _get_statistics_from_bigquery() -> Dict: + query_job = CLIENT.query( + f""" + WITH UNIQUE_RECORDS AS ( + SELECT DISTINCT + NAME, + JSON_EXTRACT(ATTENDEE_INFO, '$.id') AS ORDER_ID, + REPLACE(JSON_EXTRACT(ATTENDEE_INFO, '$.ticket_name'), '"', '') AS TICKET_NAME, + FROM + `{TABLE}` + WHERE + ((REFUNDED IS NULL) OR (REFUNDED = FALSE)) AND (NAME LIKE "PyCon TW 2023 Registration%") + ) + + SELECT + NAME, + TICKET_NAME, + COUNT(1) AS COUNTS + FROM UNIQUE_RECORDS + GROUP BY + NAME, TICKET_NAME; + """ # nosec + ) + result = query_job.result() + return result + + +def _compose_discord_msg(payload) -> Text: + msg = f"Hi 這是今天 {datetime.now().date()} 的票種統計資料,售票期結束後,請 follow README 的 `gcloud` 指令進去把 Airflow DAG 關掉\n\n" + total = 0 + for name, ticket_name, counts in payload: + msg += f" * 票種:{ticket_name}\t{counts}張\n" + total += counts + msg += "dashboard: https://metabase.pycon.tw/question/142\n" + msg += f"總共賣出 {total} 張喔~" + return msg diff --git a/dags/ods/kktix_ticket_orders/kktix_refund_dag.py b/dags/ods/kktix_ticket_orders/kktix_refund_dag.py new file mode 100644 index 0000000..c0110d9 --- /dev/null +++ b/dags/ods/kktix_ticket_orders/kktix_refund_dag.py @@ -0,0 +1,34 @@ +""" +Update KKTIX's data if attendee has been refunded +""" +from datetime import datetime, timedelta + +from airflow import DAG +from airflow.operators.python_operator import PythonOperator +from ods.kktix_ticket_orders.udfs import kktix_refund + +DEFAULT_ARGS = { + "owner": "henry410213028@gmail.com", + "depends_on_past": False, + "start_date": datetime(2023, 4, 10, 4), + "retries": 2, + "retry_delay": timedelta(minutes=5), + "on_failure_callback": lambda x: "Need to send notification to Discord!", +} +dag = DAG( + "KKTIX_TICKET_REFUND_V2", + default_args=DEFAULT_ARGS, + schedule_interval="50 23 * * *", # At 23:50 (everyday) + max_active_runs=1, + catchup=True, +) +with dag: + UPDATE_REFUNDED_ATTENDEE_IDS = PythonOperator( + task_id="UPDATE_REFUNDED_ATTENDEE_IDS", + python_callable=kktix_refund.main, + ) + + UPDATE_REFUNDED_ATTENDEE_IDS + +if __name__ == "__main__": + dag.cli() diff --git a/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py b/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py index 0119c5f..bd35664 100644 --- a/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py +++ b/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py @@ -1,20 +1,5 @@ -from typing import Callable, Dict, List - -import requests -import tenacity -from airflow.hooks.http_hook import HttpHook -from airflow.models import Variable from dateutil.parser import parse -from ods.kktix_ticket_orders.udfs import klaviyo_loader - -SCHEDULE_INTERVAL_SECONDS: int = 60 * 60 -HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") -RETRY_ARGS = dict( - wait=tenacity.wait_none(), - stop=tenacity.stop_after_attempt(3), - retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError), -) - +from ods.kktix_ticket_orders.udfs import kktix_api, klaviyo_loader def main(**context): """ @@ -26,105 +11,7 @@ def main(**context): ts_datetime_obj = parse(context["ts"]) year = ts_datetime_obj.year timestamp = ts_datetime_obj.timestamp() - event_raw_data_array = _extract(year=year, timestamp=timestamp,) + event_raw_data_array = kktix_api._extract(year=year, timestamp=timestamp,) # load name and email to mailer before data has been hashed klaviyo_loader.load(event_raw_data_array) print(f"Batch load {len(event_raw_data_array)} data to downstream task") - - -def _extract(year: int, timestamp: float) -> List[Dict]: - """ - get data from KKTIX's API - 1. condition_filter_callb: use this callbacl to filter out unwanted event! - 2. right now schedule_interval_seconds is a hardcoded value! - """ - event_raw_data_array: List[Dict] = [] - condition_filter_callback = ( - lambda event: str(year) in event["name"] - and "registration" in event["name"].lower() - ) - event_metadatas = get_event_metadatas(condition_filter_callback) - for event_metadata in event_metadatas: - event_id = event_metadata["id"] - for attendee_info in get_attendee_infos(event_id, timestamp): - event_raw_data_array.append( - { - "id": event_id, - "name": event_metadata["name"], - "attendee_info": attendee_info, - } - ) - return event_raw_data_array - - -def get_attendee_infos(event_id: int, timestamp: float) -> List: - """ - it's a public wrapper for people to get attendee infos! - """ - attendance_book_id = _get_attendance_book_id(event_id) - attendee_ids = _get_attendee_ids(event_id, attendance_book_id) - attendee_infos = _get_attendee_infos(event_id, attendee_ids, timestamp) - return attendee_infos - - -def get_event_metadatas(condition_filter: Callable) -> List[Dict]: - """ - Fetch all the ongoing events - """ - event_list_resp = HTTP_HOOK.run_with_advanced_retry( - endpoint=f"{Variable.get('kktix_events_endpoint')}?only_not_ended_event=true", - _retry_args=RETRY_ARGS, - ).json() - event_metadatas: List[dict] = [] - for event in event_list_resp["data"]: - if condition_filter(event): - event_metadatas.append(event) - return event_metadatas - - -def _get_attendance_book_id(event_id: int) -> int: - """ - Fetch attendance books - """ - attendance_books_resp = HTTP_HOOK.run_with_advanced_retry( - endpoint=f"{Variable.get('kktix_events_endpoint')}/{event_id}/attendance_books", - _retry_args=RETRY_ARGS, - ).json() - return attendance_books_resp[0]["id"] - - -def _get_attendee_ids(event_id: int, attendance_book_id: int) -> List[int]: - """ - get all attendee ids! - """ - attendee_ids = [] - attendees_resp = HTTP_HOOK.run_with_advanced_retry( - endpoint=f"{Variable.get('kktix_events_endpoint')}/{event_id}/attendance_books/{attendance_book_id}", - _retry_args=RETRY_ARGS, - ).json() - for signin_status_tuple in attendees_resp["signin_status"]: - attendee_ids.append(signin_status_tuple[0]) - return attendee_ids - - -def _get_attendee_infos( - event_id: int, attendee_ids: List[int], timestamp: float -) -> List: - """ - get attendee infos, e.g. email, phonenumber, name and etc - """ - attendee_infos = [] - for attendee_id in attendee_ids: - attendee_info = HTTP_HOOK.run_with_advanced_retry( - endpoint=f"{Variable.get('kktix_events_endpoint')}/{event_id}/attendees/{attendee_id}", - _retry_args=RETRY_ARGS, - ).json() - if not attendee_info["is_paid"]: - continue - if ( - timestamp - < attendee_info["updated_at"] - < timestamp + SCHEDULE_INTERVAL_SECONDS - ): - attendee_infos.append(attendee_info) - return attendee_infos diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py deleted file mode 100644 index c08859f..0000000 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ /dev/null @@ -1,149 +0,0 @@ -import json -import os -from collections import defaultdict -from datetime import datetime -from typing import Dict, List, Text - -import requests -import tenacity -from airflow.hooks.http_hook import HttpHook -from airflow.models import Variable -from google.cloud import bigquery -from ods.kktix_ticket_orders.udfs.bigquery_loader import TABLE -from ods.kktix_ticket_orders.udfs.kktix_api import ( - _get_attendance_book_id, - _get_attendee_ids, -) - -DISCORD_HOOK = HttpHook(http_conn_id="discord_registration", method="POST") -HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") -RETRY_ARGS = dict( - wait=tenacity.wait_random(min=1, max=10), - stop=tenacity.stop_after_attempt(10), - retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError), -) -CLIENT = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) - - -def send() -> None: - refunded_attendee_ids = _check_if_refunded_ticket_exists() - if refunded_attendee_ids: - _mark_tickets_as_refunded(refunded_attendee_ids) - statistics = _get_statistics_from_bigquery() - msg = _compose_discord_msg(statistics) - _send_webhook_to_discord(msg) - - -def _check_if_refunded_ticket_exists() -> List[int]: - """ - 1. iterate through all unrefunded tickets - 2. build up a hash map - 3. get the latest attendance book - 4. compare the difference, the diff would be refunded attendee ids - """ - refunded_attendee_ids: List[int] = [] - query_job = CLIENT.query( - f""" - SELECT - ID, - CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, '$.id'), '"', '') AS INT64) AS ATTENDEE_ID - FROM - `{TABLE}` - WHERE - (REFUNDED IS NULL - OR REFUNDED = FALSE) - AND EXTRACT(YEAR - FROM - TIMESTAMP_SECONDS(CAST(CAST(JSON_EXTRACT(ATTENDEE_INFO, '$.updated_at') AS FLOAT64) AS int64))) = EXTRACT(year - FROM - CURRENT_DATE()) - """ # nosec - ) - event_ids_and_attendee_ids = query_job.result() - - bigquery_side_event_attendee_id_dict = defaultdict(list) - for event_id, attendee_id in event_ids_and_attendee_ids: - bigquery_side_event_attendee_id_dict[event_id].append(attendee_id) - for ( - event_id, - outdated_latest_attendee_ids, - ) in bigquery_side_event_attendee_id_dict.items(): - attendance_book_id = _get_attendance_book_id(event_id) - latest_attendee_ids = _get_attendee_ids(event_id, attendance_book_id) - refunded_attendee_ids_in_this_event = set( - outdated_latest_attendee_ids - ).difference(set(latest_attendee_ids)) - refunded_attendee_ids += list(refunded_attendee_ids_in_this_event) - return refunded_attendee_ids - - -def _mark_tickets_as_refunded(refunded_attendee_ids: List[int]) -> None: - """ - set these attendee info to refunded=true, if we cannot find its attendee_info right now by using KKTIX's API! - """ - query_job = CLIENT.query( - f""" - UPDATE - `{TABLE}` - SET - refunded=TRUE - WHERE - CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, - '$.id'), '"', '') AS INT64) in ({','.join(str(i) for i in refunded_attendee_ids)}) - """ - ) - result = query_job.result() - print(f"Result of _mark_tickets_as_refunded: {result}") - - -def _get_statistics_from_bigquery() -> Dict: - query_job = CLIENT.query( - f""" - SELECT - NAME, - REPLACE(JSON_EXTRACT(ATTENDEE_INFO, '$.ticket_name'), '"', '') AS TICKET_NAME, - COUNT(1) AS COUNTS - FROM - `{TABLE}` - WHERE - (REFUNDED IS NULL - OR REFUNDED = FALSE) - AND EXTRACT(YEAR - FROM - TIMESTAMP_SECONDS(CAST(CAST(JSON_EXTRACT(ATTENDEE_INFO, '$.updated_at') AS FLOAT64) AS int64))) = EXTRACT(year - FROM - CURRENT_DATE()) - GROUP BY - NAME, - TICKET_NAME; - """ # nosec - ) - result = query_job.result() - return result - - -def _send_webhook_to_discord(payload: Text) -> None: - DISCORD_HOOK.run_with_advanced_retry( - endpoint=Variable.get("discord_webhook_registration_endpoint"), - _retry_args=RETRY_ARGS, - data=json.dumps({"content": payload}), - headers={"Accept": "application/json", "Content-Type": "application/json"}, - ) - - -def _compose_discord_msg(payload) -> Text: - msg = f"Hi 這是今天 {datetime.now().date()} 的票種統計資料,售票期結束後,請 follow README 的 `gcloud` 指令進去把 Airflow DAG 關掉\n\n" - total = 0 - msg_dict = defaultdict(list) - for name, ticket_name, counts in payload: - msg_dict[name].append((ticket_name, counts)) - for name, ticket_name_counts_tuples in sorted(msg_dict.items(), key=lambda x: x[0]): - msg += f"{name}\n" - for ticket_name, counts in sorted( - ticket_name_counts_tuples, key=lambda x: x[0] - ): - msg += f" * 票種:{ticket_name}\t{counts}張\n" - total += counts - msg += "dashboard: https://metabase.pycon.tw/question/142\n" - msg += f"總共賣出 {total} 張喔~" - return msg diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_refund.py b/dags/ods/kktix_ticket_orders/udfs/kktix_refund.py new file mode 100644 index 0000000..7e4d2ab --- /dev/null +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_refund.py @@ -0,0 +1,75 @@ +import os +from collections import defaultdict +from typing import List + +from google.cloud import bigquery +from ods.kktix_ticket_orders.udfs.bigquery_loader import TABLE +from ods.kktix_ticket_orders.udfs.kktix_api import ( + _get_attendance_book_id, + _get_attendee_ids, +) + +CLIENT = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) + + +def main() -> None: + refunded_attendee_ids = _check_if_refunded_ticket_exists() + if refunded_attendee_ids: + _mark_tickets_as_refunded(refunded_attendee_ids) + + +def _check_if_refunded_ticket_exists() -> List[int]: + """ + 1. iterate through all unrefunded tickets + 2. build up a hash map + 3. get the latest attendance book + 4. compare the difference, the diff would be refunded attendee ids + """ + refunded_attendee_ids: List[int] = [] + query_job = CLIENT.query( + f""" + SELECT + ID, + CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, + '$.id'), '"', '') AS INT64) AS ATTENDEE_ID + FROM + `{TABLE}` + WHERE + REFUNDED IS NULL OR REFUNDED = FALSE + """ # nosec + ) + event_ids_and_attendee_ids = query_job.result() + + bigquery_side_event_attendee_id_dict = defaultdict(list) + for event_id, attendee_id in event_ids_and_attendee_ids: + bigquery_side_event_attendee_id_dict[event_id].append(attendee_id) + for ( + event_id, + outdated_latest_attendee_ids, + ) in bigquery_side_event_attendee_id_dict.items(): + attendance_book_id = _get_attendance_book_id(event_id) + latest_attendee_ids = _get_attendee_ids(event_id, attendance_book_id) + refunded_attendee_ids_in_this_event = set( + outdated_latest_attendee_ids + ).difference(set(latest_attendee_ids)) + refunded_attendee_ids += list(refunded_attendee_ids_in_this_event) + return refunded_attendee_ids + + +def _mark_tickets_as_refunded(refunded_attendee_ids: List[int]) -> None: + """ + set these attendee info to refunded=true, if we cannot find its attendee_info right now by using KKTIX's API! + """ + query_job = CLIENT.query( + f""" + UPDATE + `{TABLE}` + SET + refunded=TRUE + WHERE + CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, + '$.id'), '"', '') AS INT64) in ({','.join(str(i) for i in refunded_attendee_ids)}) + """ + ) + result = query_job.result() + print(f"Result of _mark_tickets_as_refunded: {result}") From 70c91822c33a6b3025e77778f5bbebb7e77a5d68 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Sat, 6 May 2023 21:25:52 +0800 Subject: [PATCH 66/89] style(dags): format --- dags/app/channel_reminder/udf.py | 7 ++-- dags/app/discord.py | 4 +- dags/app/proposal_reminder/udf.py | 3 +- dags/app/team_registration_bot/udf.py | 3 +- .../kktix_ticket_orders/kktix_refund_dag.py | 3 +- .../udfs/batch_kktix2mailer.py | 1 + dags/ods/youtube/udfs/youtube_api.py | 40 ++++++++++++++----- 7 files changed, 41 insertions(+), 20 deletions(-) diff --git a/dags/app/channel_reminder/udf.py b/dags/app/channel_reminder/udf.py index 9e6ee96..05c673d 100644 --- a/dags/app/channel_reminder/udf.py +++ b/dags/app/channel_reminder/udf.py @@ -1,5 +1,6 @@ -from app import discord from airflow.models import Variable +from app import discord + def main() -> None: kwargs = { @@ -7,7 +8,7 @@ def main() -> None: "username": "Data Team Airflow reminder", "msg": ( "<@&790739794148982796> <@&755827317904769184> <@&791157626099859487>\n", - "記得大會結束後,要有一個人負責去取消 Klaviyo 的訂閱,不然我們每個月會一直繳 $NTD2000 喔!" - ) + "記得大會結束後,要有一個人負責去取消 Klaviyo 的訂閱,不然我們每個月會一直繳 $NTD2000 喔!", + ), } discord.send_webhook_message(**kwargs) diff --git a/dags/app/discord.py b/dags/app/discord.py index 7181e05..1ca3275 100644 --- a/dags/app/discord.py +++ b/dags/app/discord.py @@ -9,9 +9,9 @@ retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError), ) + @tenacity.retry(**RETRY_ARGS) def send_webhook_message(webhook_url: str, username: str, msg: str) -> None: session.post( - webhook_url, - json={"username": username, "content": msg}, + webhook_url, json={"username": username, "content": msg}, ) diff --git a/dags/app/proposal_reminder/udf.py b/dags/app/proposal_reminder/udf.py index 56e6e26..ab65e9b 100644 --- a/dags/app/proposal_reminder/udf.py +++ b/dags/app/proposal_reminder/udf.py @@ -2,6 +2,7 @@ from airflow.models import Variable from app import discord + def main() -> None: summary = get_proposal_summary() n_talk = summary["num_proposed_talk"] @@ -9,7 +10,7 @@ def main() -> None: kwargs = { "webhook_url": Variable.get("DISCORD_PROGRAM_REMINDER_WEBHOOK"), "username": "Program talk reminder", - "msg": f"目前投稿議程數: {n_talk}; 課程數: {n_tutorial}" + "msg": f"目前投稿議程數: {n_talk}; 課程數: {n_tutorial}", } discord.send_webhook_message(**kwargs) diff --git a/dags/app/team_registration_bot/udf.py b/dags/app/team_registration_bot/udf.py index 39ba85b..2af30ac 100644 --- a/dags/app/team_registration_bot/udf.py +++ b/dags/app/team_registration_bot/udf.py @@ -2,7 +2,6 @@ from datetime import datetime from typing import Dict, Text -import requests from airflow.models import Variable from app import discord from google.cloud import bigquery @@ -18,7 +17,7 @@ def main() -> None: kwargs = { "webhook_url": Variable.get("discord_webhook_registration_endpoint"), "username": "KKTIX order report", - "msg": msg + "msg": msg, } discord.send_webhook_message(**kwargs) diff --git a/dags/ods/kktix_ticket_orders/kktix_refund_dag.py b/dags/ods/kktix_ticket_orders/kktix_refund_dag.py index c0110d9..2d3c978 100644 --- a/dags/ods/kktix_ticket_orders/kktix_refund_dag.py +++ b/dags/ods/kktix_ticket_orders/kktix_refund_dag.py @@ -24,8 +24,7 @@ ) with dag: UPDATE_REFUNDED_ATTENDEE_IDS = PythonOperator( - task_id="UPDATE_REFUNDED_ATTENDEE_IDS", - python_callable=kktix_refund.main, + task_id="UPDATE_REFUNDED_ATTENDEE_IDS", python_callable=kktix_refund.main, ) UPDATE_REFUNDED_ATTENDEE_IDS diff --git a/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py b/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py index bd35664..c5124c4 100644 --- a/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py +++ b/dags/ods/kktix_ticket_orders/udfs/batch_kktix2mailer.py @@ -1,6 +1,7 @@ from dateutil.parser import parse from ods.kktix_ticket_orders.udfs import kktix_api, klaviyo_loader + def main(**context): """ Extract user info from kktix api and load to mailer diff --git a/dags/ods/youtube/udfs/youtube_api.py b/dags/ods/youtube/udfs/youtube_api.py index 9eee0ff..15352fe 100644 --- a/dags/ods/youtube/udfs/youtube_api.py +++ b/dags/ods/youtube/udfs/youtube_api.py @@ -1,4 +1,5 @@ import os +from datetime import datetime from pathlib import Path import pandas as pd @@ -7,12 +8,11 @@ from airflow.models import Variable from google.cloud import bigquery from utils.hook_related import RETRY_ARGS -from datetime import datetime # channel id of YouTube is public to everyone, so it's okay to commit this ID into git CHANNEL_ID = "UCHLnNgRnfGYDzPCCH8qGbQw" MAX_RESULTS = 50 -PROJECT = os.getenv('BIGQUERY_PROJECT') +PROJECT = os.getenv("BIGQUERY_PROJECT") def create_table_if_needed(): @@ -64,7 +64,15 @@ def _init(): datatype = context["datatype"] video_metadatas = task_instance.xcom_pull("GET_VIDEO_IDS", key="GET_VIDEO_IDS") result = [] - return client, http_conn, execution_date, task_instance, datatype, video_metadatas, result + return ( + client, + http_conn, + execution_date, + task_instance, + datatype, + video_metadatas, + result, + ) def _get_statistics(): for video_metadata in video_metadatas: @@ -110,10 +118,14 @@ def _get_info(): execution_date, video_id, title, - response_json["items"][0]["snippet"]["thumbnails"]["default"]["url"], + response_json["items"][0]["snippet"]["thumbnails"]["default"][ + "url" + ], response_json["items"][0]["description"], - datetime.strptime(response_json["items"][0]["publishedAt"], '%Y-%m-%dT%H:%M:%SZ'), - f"https://www.youtube.com/watch?v={response_json["items"][0]["id"]}", + datetime.strptime( + response_json["items"][0]["publishedAt"], "%Y-%m-%dT%H:%M:%SZ" + ), + f'https://www.youtube.com/watch?v={response_json["items"][0]["id"]}', ) ) return result @@ -139,12 +151,20 @@ def _insert_to_bq(df, tablename): job = client.load_table_from_dataframe(df, TABLE) job.result() - client, http_conn, execution_date, task_instance, datatype, video_metadatas, result = _init() - - if datatype == 'statistics': + ( + client, + http_conn, + execution_date, + task_instance, + datatype, + video_metadatas, + result, + ) = _init() + + if datatype == "statistics": tablename = "ods.ods_youtubeStatistics_videoId_datetime" result = _get_statistics() - elif datatype == 'info': + elif datatype == "info": tablename = "ods.ods_youtubeInfo_videoId_datetime" result = _get_info() else: From 796ddc253f0df588bec90c18b232c1698becff8a Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Thu, 8 Jun 2023 21:26:18 +0800 Subject: [PATCH 67/89] refactor(ods): remove kktix_ticket_orders/udfs/discord_bot.py --- .../kktix_ticket_orders/udfs/discord_bot.py | 138 ------------------ 1 file changed, 138 deletions(-) delete mode 100644 dags/ods/kktix_ticket_orders/udfs/discord_bot.py diff --git a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py b/dags/ods/kktix_ticket_orders/udfs/discord_bot.py deleted file mode 100644 index b6bca7a..0000000 --- a/dags/ods/kktix_ticket_orders/udfs/discord_bot.py +++ /dev/null @@ -1,138 +0,0 @@ -import json -import os -from collections import defaultdict -from datetime import datetime -from typing import Dict, List, Text - -import requests -import tenacity -from airflow.hooks.http_hook import HttpHook -from airflow.models import Variable -from google.cloud import bigquery -from ods.kktix_ticket_orders.udfs.bigquery_loader import TABLE -from ods.kktix_ticket_orders.udfs.kktix_api import ( - _get_attendance_book_id, - _get_attendee_ids, -) - -DISCORD_HOOK = HttpHook(http_conn_id="discord_registration", method="POST") -HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") -RETRY_ARGS = dict( - wait=tenacity.wait_random(min=1, max=10), - stop=tenacity.stop_after_attempt(10), - retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError), -) -CLIENT = bigquery.Client(project=os.getenv("BIGQUERY_PROJECT")) - - -def send() -> None: - refunded_attendee_ids = _check_if_refunded_ticket_exists() - if refunded_attendee_ids: - _mark_tickets_as_refunded(refunded_attendee_ids) - statistics = _get_statistics_from_bigquery() - msg = _compose_discord_msg(statistics) - _send_webhook_to_discord(msg) - - -def _check_if_refunded_ticket_exists() -> List[int]: - """ - 1. iterate through all unrefunded tickets - 2. build up a hash map - 3. get the latest attendance book - 4. compare the difference, the diff would be refunded attendee ids - """ - refunded_attendee_ids: List[int] = [] - query_job = CLIENT.query( - f""" - SELECT - ID, - CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, - '$.id'), '"', '') AS INT64) AS ATTENDEE_ID - FROM - `{TABLE}` - WHERE - REFUNDED IS NULL OR REFUNDED = FALSE - """ # nosec - ) - event_ids_and_attendee_ids = query_job.result() - - bigquery_side_event_attendee_id_dict = defaultdict(list) - for event_id, attendee_id in event_ids_and_attendee_ids: - bigquery_side_event_attendee_id_dict[event_id].append(attendee_id) - for ( - event_id, - outdated_latest_attendee_ids, - ) in bigquery_side_event_attendee_id_dict.items(): - attendance_book_id = _get_attendance_book_id(event_id) - latest_attendee_ids = _get_attendee_ids(event_id, attendance_book_id) - refunded_attendee_ids_in_this_event = set( - outdated_latest_attendee_ids - ).difference(set(latest_attendee_ids)) - refunded_attendee_ids += list(refunded_attendee_ids_in_this_event) - return refunded_attendee_ids - - -def _mark_tickets_as_refunded(refunded_attendee_ids: List[int]) -> None: - """ - set these attendee info to refunded=true, if we cannot find its attendee_info right now by using KKTIX's API! - """ - query_job = CLIENT.query( - f""" - UPDATE - `{TABLE}` - SET - refunded=TRUE - WHERE - CAST(REPLACE(JSON_EXTRACT(ATTENDEE_INFO, - '$.id'), '"', '') AS INT64) in ({','.join(str(i) for i in refunded_attendee_ids)}) - """ - ) - result = query_job.result() - print(f"Result of _mark_tickets_as_refunded: {result}") - - -def _get_statistics_from_bigquery() -> Dict: - query_job = CLIENT.query( - f""" - WITH UNIQUE_RECORDS AS ( - SELECT DISTINCT - NAME, - JSON_EXTRACT(ATTENDEE_INFO, '$.id') AS ORDER_ID, - REPLACE(JSON_EXTRACT(ATTENDEE_INFO, '$.ticket_name'), '"', '') AS TICKET_NAME, - FROM - `{TABLE}` - WHERE - ((REFUNDED IS NULL) OR (REFUNDED = FALSE)) AND (NAME LIKE "PyCon TW 2023 Registration%") - ) - - SELECT - NAME, - TICKET_NAME, - COUNT(1) AS COUNTS - FROM UNIQUE_RECORDS - GROUP BY - NAME, TICKET_NAME; - """ # nosec - ) - result = query_job.result() - return result - - -def _send_webhook_to_discord(payload: Text) -> None: - DISCORD_HOOK.run_with_advanced_retry( - endpoint=Variable.get("discord_webhook_registration_endpoint"), - _retry_args=RETRY_ARGS, - data=json.dumps({"content": payload}), - headers={"Accept": "application/json", "Content-Type": "application/json"}, - ) - - -def _compose_discord_msg(payload) -> Text: - msg = f"Hi 這是今天 {datetime.now().date()} 的票種統計資料,售票期結束後,請 follow README 的 `gcloud` 指令進去把 Airflow DAG 關掉\n\n" - total = 0 - for name, ticket_name, counts in payload: - msg += f" * 票種:{ticket_name}\t{counts}張\n" - total += counts - msg += "dashboard: https://metabase.pycon.tw/question/142\n" - msg += f"總共賣出 {total} 張喔~" - return msg From 8a066befd89efc7b5e00c62f4f8e2689dfc6f2b0 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Thu, 8 Jun 2023 22:47:26 +0800 Subject: [PATCH 68/89] fix(dags): wrong module name --- dags/app/channel_reminder/dag.py | 4 ++-- dags/app/team_registration_bot/dag.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dags/app/channel_reminder/dag.py b/dags/app/channel_reminder/dag.py index 43a40c0..cac13d0 100644 --- a/dags/app/channel_reminder/dag.py +++ b/dags/app/channel_reminder/dag.py @@ -5,7 +5,7 @@ from airflow import DAG from airflow.operators.python_operator import PythonOperator -from app.channel_reminder import udfs +from app.channel_reminder import udf DEFAULT_ARGS = { "owner": "davidtnfsh", @@ -24,7 +24,7 @@ ) with dag: REMINDER_OF_THIS_TEAM = PythonOperator( - task_id="KLAIVYO_REMINDER", python_callable=udfs.main + task_id="KLAIVYO_REMINDER", python_callable=udf.main ) if __name__ == "__main__": diff --git a/dags/app/team_registration_bot/dag.py b/dags/app/team_registration_bot/dag.py index 83dd06a..446a557 100644 --- a/dags/app/team_registration_bot/dag.py +++ b/dags/app/team_registration_bot/dag.py @@ -5,7 +5,7 @@ from airflow import DAG from airflow.operators.python_operator import PythonOperator -from app.team_registration_bot import udfs +from app.team_registration_bot import udf DEFAULT_ARGS = { "owner": "davidtnfsh@gmail.com", @@ -24,7 +24,7 @@ ) with dag: SEND_MSG_TO_DISCORD = PythonOperator( - task_id="LOAD_TO_DISCORD", python_callable=udfs.main, + task_id="LOAD_TO_DISCORD", python_callable=udf.main, ) if __name__ == "__main__": From 4a81ab82614ac737ced3c89ae02e5e9a84762759 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Thu, 8 Jun 2023 22:49:23 +0800 Subject: [PATCH 69/89] feat(app): count total ticket income --- dags/app/team_registration_bot/udf.py | 29 ++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/dags/app/team_registration_bot/udf.py b/dags/app/team_registration_bot/udf.py index 2af30ac..d5761af 100644 --- a/dags/app/team_registration_bot/udf.py +++ b/dags/app/team_registration_bot/udf.py @@ -49,12 +49,39 @@ def _get_statistics_from_bigquery() -> Dict: return result +ticket_price = { + "企業票 - 早鳥階段 (含紀念衣服) / Corporate - Early Stage (with T-Shirt)": 5500, + "企業票 - 一般階段 / Corporate - Regular Stage": 5800, + "企業票 - 晚鳥階段 / Corporate - Final Stage": 6500, + "社群優惠票 (含紀念衣服) / Community Discount (with T-Shirt)": 2790, + "OSCVPass (含紀念衣服) / OSCVPass Discount (with T-Shirt)": 2790, + "超級 Py 粉票 (含紀念衣服) / PyCon TW Stans (with T-Shirt)": 1990, + "講者票 (含紀念衣服) / Speaker (with T-Shirt)": 1290, + "投稿者票 / Submitter": 1990, + "貢獻者票 (含紀念衣服) / Contributor (with T-Shirt)": 1290, + "大會贊助票 (歡迎申請) / Sponsorship from PyCon TW (Free to Apply)": 2490, + "邀請票 (含紀念衣服) / Invited (with T-Shirt)": 0, + "獎品預留票 (含紀念衣服) / Prize Reserved (with T-Shirt)": 1895, + "企業獎品預留票 (含紀念衣服) / Corporate Prize Reserved (with T-Shirt)": 2900, + "個人尊榮票 (含紀念衣服) / Premium (with T-Shirt)": 5500, + "團體票 (歡迎申請) / Group-Buy Individual (Free to Apply)": 0, + "個人票 - 早鳥階段 (含紀念衣服) / Individual - Early Stage (with T-Shirt)": 2990, + "個人票 - 一般階段 / Individual - Regular Stage": 3790, + "個人票 - 晚鳥階段 / Individual - Final Stage": 4290, + "社群票 / Community": 3390, + "愛心優待票 / Concession": 1895, +} + + def _compose_discord_msg(payload) -> Text: msg = f"Hi 這是今天 {datetime.now().date()} 的票種統計資料,售票期結束後,請 follow README 的 `gcloud` 指令進去把 Airflow DAG 關掉\n\n" total = 0 + total_income = 0 for name, ticket_name, counts in payload: msg += f" * 票種:{ticket_name}\t{counts}張\n" total += counts + total_income += ticket_price.get(ticket_name, 0) * counts + total_income = "{:,}".format(total_income) msg += "dashboard: https://metabase.pycon.tw/question/142\n" - msg += f"總共賣出 {total} 張喔~" + msg += f"總共賣出 {total} 張喔~ (總收入 TWD${total_income})" return msg From ba0f6ea343030e06e891718daf4687f4fd872586 Mon Sep 17 00:00:00 2001 From: Henry Lee Date: Thu, 15 Jun 2023 23:55:48 +0800 Subject: [PATCH 70/89] fix(ods): increase kktix dag schedule intraval --- dags/ods/kktix_ticket_orders/kktix_dag.py | 6 +++--- dags/ods/kktix_ticket_orders/udfs/kktix_api.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dags/ods/kktix_ticket_orders/kktix_dag.py b/dags/ods/kktix_ticket_orders/kktix_dag.py index 7b3d23f..83f4987 100644 --- a/dags/ods/kktix_ticket_orders/kktix_dag.py +++ b/dags/ods/kktix_ticket_orders/kktix_dag.py @@ -10,15 +10,15 @@ DEFAULT_ARGS = { "owner": "davidtnfsh@gmail.com", "depends_on_past": False, - "start_date": datetime(2023, 4, 10, 4), + "start_date": datetime(2023, 6, 14, 0), "retries": 2, "retry_delay": timedelta(minutes=5), "on_failure_callback": lambda x: "Need to send notification to Discord!", } dag = DAG( - "KKTIX_TICKET_ORDERS_V5", + "KKTIX_TICKET_ORDERS_V6", default_args=DEFAULT_ARGS, - schedule_interval="*/5 * * * *", + schedule_interval="50 * * * *", max_active_runs=1, catchup=True, ) diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py index b86f3d4..2e66dad 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_api.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_api.py @@ -8,7 +8,7 @@ from dateutil.parser import parse from ods.kktix_ticket_orders.udfs import kktix_loader, kktix_transformer -SCHEDULE_INTERVAL_SECONDS: int = 300 +SCHEDULE_INTERVAL_SECONDS: int = 3600 HTTP_HOOK = HttpHook(http_conn_id="kktix_api", method="GET") RETRY_ARGS = dict( wait=tenacity.wait_none(), @@ -23,7 +23,7 @@ def main(**context): """ schedule_interval = context["dag"].schedule_interval # If we change the schedule_interval, we need to update the logic in condition_filter_callback - assert schedule_interval == "*/5 * * * *" # nosec + assert schedule_interval == "50 * * * *" # nosec ts_datetime_obj = parse(context["ts"]) year = ts_datetime_obj.year timestamp = ts_datetime_obj.timestamp() From 3a5c90b5df932d6e329675dc25b4e83d734ba40b Mon Sep 17 00:00:00 2001 From: Angus Yang Date: Sun, 18 Jun 2023 20:43:18 +0800 Subject: [PATCH 71/89] Add scripts extract and transform the "ods_kktix_attendeeId_datetime" table and load to the legecy tables: : ods_kktix_ticket_(corporate, individual, reserved)_attendees --- contrib/README.md | 9 +- contrib/kktix_bq_etl.py | 559 ++++++++++++++++++++++++++++++++++++++++ contrib/kktix_bq_etl.sh | 15 ++ 3 files changed, 582 insertions(+), 1 deletion(-) create mode 100755 contrib/kktix_bq_etl.py create mode 100755 contrib/kktix_bq_etl.sh diff --git a/contrib/README.md b/contrib/README.md index ec800e4..8190f75 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -17,4 +17,11 @@ 3. `python upload-survey-cake-csv-to-bigquery.py --year=<20xx> -c ` 1. it would upload data to Bigquery's `test` dataset 2. If everything looks good, you can `copy` the `fact table` and `dimension table` first - 3. Then run `python upload-survey-cake-csv-to-bigquery.py --year=<20xx> -p`. `-p` stands for `production` \ No newline at end of file + 3. Then run `python upload-survey-cake-csv-to-bigquery.py --year=<20xx> -p`. `-p` stands for `production` + +## KKTIX BigQuery Transform +1. Background: Start from 2022, we extract the KKTIX data via KKTIX API and load to "pycontw-225217.ods.ods_kktix_attendeeId_datetime". However most of the data are store in the ATTENDEE_INFO column with json format. To use metabase with SQL, users need to extract the data by json_extract with the knowledge kktix format instead of flat database. And we also need to rewrite all the SQLs build for current databases. +2. Solution: Transform the tables in backend that we could keep the same user experience by using Metabase. +3. Run: + - `./kktix_bq_etl.py -t ods_kktix_ticket_reserved_attendees_test -k reserved -y 2023 --upload` + - for 3 tables: `./kktix_bq_etl.py 2023` diff --git a/contrib/kktix_bq_etl.py b/contrib/kktix_bq_etl.py new file mode 100755 index 0000000..14d3b6b --- /dev/null +++ b/contrib/kktix_bq_etl.py @@ -0,0 +1,559 @@ +#!/usr/bin/env python3 +import argparse +import hashlib +import logging +import re +import unittest +from typing import Dict, Set, List + +import pandas as pd +import json +from datetime import datetime +from google.cloud import bigquery + +CANONICAL_COLUMN_NAMES_CORE = { + "paid_date", + "area_of_interest", + "payment_status", + "country_or_region", + "job_title", + "ticket_type", + "email", + "organization", + "price", + "dietary_habit", + "gender", + "years_of_using_python", + "registration_no", +} + + +CANONICAL_COLUMN_NAMES_2020_CORE = { + "ticket_type", + "payment_status", + "tags", + "paid_date", + "price", + "dietary_habit", + "years_of_using_python", + "area_of_interest", + "organization", + "job_title", + "country_or_region", + "departure_from_region", + "gender", + "email_from_sponsor", + "email_to_sponsor", + "ive_already_read_and_i_accept_the_epidemic_prevention_of_pycon_tw", + "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", + "email", + "registration_no", + "attendance_book", +} + +CANONICAL_COLUMN_NAMES_2020_EXTRA_CORPORATE = { + "invoice_policy", + "invoiced_company_name", + "unified_business_no", + "pynight_attendee_numbers", + "know_financial_aid", + "have_you_ever_attended_pycon_tw", + "pynight_attending_or_not", + "how_did_you_know_pycon_tw", +} + +CANONICAL_COLUMN_NAMES_2020_EXTRA_INDIVIDUAL = { + "pynight_attendee_numbers", + "know_financial_aid", + "have_you_ever_attended_pycon_tw", + "pynight_attending_or_not", + "how_did_you_know_pycon_tw", +} + +CANONICAL_COLUMN_NAMES_2020_EXTRA_RESERVED: Set = set() + + +CANONICAL_COLUMN_NAMES_2019_CORE = { + "ticket_type", + "payment_status", + "tags", + "paid_date", + "price", + "dietary_habit", + "need_shuttle_bus_service", + "size_of_tshirt", + "years_of_using_python", + "area_of_interest", + "organization", + "job_title", + "country_or_region", + "gender", + "email", + "registration_no", + "attendance_book", +} + +CANONICAL_COLUMN_NAMES_2019_EXTRA_CORPORATE = { + "invoice_policy", + "invoiced_company_name", + "unified_business_no", +} + +CANONICAL_COLUMN_NAMES_2019_EXTRA_INDIVIDUAL: Set = set() + +CANONICAL_COLUMN_NAMES_2019_EXTRA_RESERVED = { + "invoice_policy", +} + + +CANONICAL_COLUMN_NAMES_2018_CORE = { + "registration_no", + "ticket_type", + "payment_status", + "paid_date", + "price", + "invoice_policy", + "dietary_habit", + "need_shuttle_bus_service", + "size_of_tshirt", + "years_of_using_python", + "area_of_interest", + "organization", + "job_title", + "country_or_region", + "gender", + "email", + "tags", + "attendance_book", +} + +CANONICAL_COLUMN_NAMES_2018_EXTRA_CORPORATE = { + "invoiced_company_name", + "unified_business_no", +} + +CANONICAL_COLUMN_NAMES_2018_EXTRA_INDIVIDUAL: Set = set() + +CANONICAL_COLUMN_NAMES_2018_EXTRA_RESERVED = { + "invoiced_company_name", + "unified_business_no", +} + + +HEURISTIC_COMPATIBLE_MAPPING_TABLE = { + # from 2020 reformatted column names + "years_of_using_python_python": "years_of_using_python", + "company_for_students_or_teachers_fill_in_the_school_department_name": "organization", + "invoiced_company_name_optional": "invoiced_company_name", + "unified_business_no_optional": "unified_business_no", + "job_title_if_you_are_a_student_fill_in_student": "job_title", + "come_from": "country_or_region", + "departure_from_regions": "departure_from_region", + "how_did_you_find_out_pycon_tw_pycon_tw": "how_did_you_know_pycon_tw", + "have_you_ever_attended_pycon_tw_pycon_tw": "have_you_ever_attended_pycon_tw", + "privacy_policy_of_pycon_tw_2020": "privacy_policy_of_pycon_tw", + "privacy_policy_of_pycon_tw_2020_pycon_tw_2020_bitly3eipaut": "privacy_policy_of_pycon_tw", + "ive_already_read_and_i_accept_the_privacy_policy_of_pycontw_2020_pycon_tw_2020": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", + "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw_2020_pycon_tw_2020": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", + "ive_already_read_and_i_accept_the_epidemic_prevention_of_pycon_tw_2020_pycon_tw_2020_covid19": "ive_already_read_and_i_accept_the_epidemic_prevention_of_pycon_tw", + "do_you_know_we_have_financial_aid_this_year": "know_financial_aid", + "contact_email": "email", + # from 2020 reformatted column names which made it duplicate + "PyNight 參加意願僅供統計人數,實際是否舉辦需由官方另行公告": "pynight_attendee_numbers", + "PyNight 參加意願": "pynight_attending_or_not", + "是否願意收到贊助商轉發 Email 訊息": "email_from_sponsor", + "是否願意提供 Email 給贊助商": "email_to_sponsor", + # from 2018 reformatted column names + "size_of_tshirt_t": "size_of_tshirt", + # from 2021 reformatted column names + "Ive_already_read and_I_accept_the_Privacy_Policy_of_PyCon_TW_2021": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", + "privacy_policy_of_pycon_tw_2021_pycon_tw_2021_httpsbitly2qwl0am": "privacy_policy_of_pycon_tw", + "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw_2021_pycon_tw_2021": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", + # from 2022 reformatted column names + "how_did_you_know_pycon_apac_2022_pycon_apac_2022": "how_did_you_know_pycon_tw", + "Ive_already_read and_I_accept_the_Privacy_Policy_of_PyCon_TW_2022": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", + "privacy_policy_of_pycon_apac_2022_pycon_apac_2022_httpsreurlcc1zxzxw": "privacy_policy_of_pycon_tw", + "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_apac_2022_pycon_apac_2022": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", + "would_you_like_to_receive_an_email_from_sponsors_email": "email_from_sponsor", + "pyckage_address_size_of_tshirt_t_pyckage_pyckage": "address_size_of_tshirt_t", + "pyckage_address_size_of_tshirt_t": "address_size_of_tshirt_t", + "privacy_policy_of_pycon_apac_2022_pycon_apac_2022": "privacy_policy_of_pycon_tw", + "privacy_policy_of_pycon_apac_2022": "privacy_policy_of_pycon_tw", + # from 2023 reformatted column names + 'attend_first_time_how_did_you_know_pycon_tw_2023_pycon_tw_2023': "how_did_you_know_pycon_tw", + 'ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw_2023_pycon_tw_2023': "privacy_policy_of_pycon_tw", + 'size_of_tshirt_for_tickets_with_tshirt_should_fill_in_this_field': "size_of_tshirt", + 'job_title_if_you_are_a_student_fill_in_student_student': 'job_title', + 'would_you_like_to_receive_an_email_from_sponsors': "email_from_sponsor", +} + +UNWANTED_DATA_TO_UPLOAD = ( + # raw column names + "Id", + "Order Number", + "Checkin Code", + "QR Code Serial No.", + "Nickname / 暱稱 (Shown on Badge)", + "Contact Name", + "Contact Mobile", + "Epidemic Prevention of PyCon TW 2020 / PyCon TW 2020 COVID-19 防疫守則 bit.ly/3fcnhu2", + "Epidemic Prevention of PyCon TW 2020", + "Privacy Policy of PyCon TW 2020 / PyCon TW 2020 個人資料保護聲明 bit.ly/3eipAut", + "Privacy Policy of PyCon TW 2020", + "If you buy the ticket with PySafe, remember to fill out correct address and size of t-shirt for us to send the parcel. if you fill the wrong information to cause missed delivery, we will not resend th", + "請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域)以避免 PySafe 無法送達,如因填寫錯誤致未收到 PySafe,報名人須自行負責,大會恕不再另行補寄", + "購買含 PySafe 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 PySafe 無法送達,如因填寫錯誤致未收到 PySafe,報名人須自行負責,大會恕不再另行補寄", + "Address / 收件地址 EX: 115台北市南港區研究院路二段128號", + # For 2022 + '聯絡人 姓名', '聯絡人 Email', '聯絡人 手機', '標籤', '姓名', '手機', + # For 2023, just for notes + "提醒填寫正確的衣服尺寸", + "徵稿資訊管道", + "個人資料保護聲明", + '行為準則', + '注意事項', + '企業票種將提供報帳收據', + '衣服尺寸注意事項', + 'PyCon TW 2023 個人資料保護聲明', + 'PyCon TW 2023 行為準則', + # For 2023, duplicated + 'Would you like to receive an email from sponsors? / 是否願意收到贊助商轉發的電子郵件?', + 'I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (Ref: https://reurl.cc/ZQ6VY6)', + 'Size of T-shirt / 衣服尺寸 (For tickets with t-shirt should fill in this field / 票種有含紀念衣服需填寫)', + '(初次參與) How did you know PyCon TW 2023? / (Attend first time) 如何得知 PyCon TW 2023?', + '(投稿者) 你是怎麼得知 PyCon Taiwan 投稿資訊?/ (For Submitter) How did you know the CfP information of PyCon Taiwan? (If you are NOT submitter, fill in "non-submitter"/ 如果您沒有投稿,請填寫「非投稿者」)', + """I'm willing to comply with the PyCon TW 2023 CoC / 我願意遵守 PyCon TW 2023 行為準則""" +) + + +logging.basicConfig(level=logging.INFO) + + +def upload_dataframe_to_bigquery( + df: pd.DataFrame, project_id: str, dataset_name: str, table_name: str +) -> None: + client = bigquery.Client(project=project_id) + + dataset_ref = bigquery.dataset.DatasetReference(project_id, dataset_name) + table_ref = bigquery.table.TableReference(dataset_ref, table_name) + job_config = bigquery.LoadJobConfig() + job_config.write_disposition = bigquery.WriteDisposition.WRITE_APPEND + job_config.schema_update_options = [ + bigquery.SchemaUpdateOption.ALLOW_FIELD_ADDITION + ] + + if "vat_number" in df.columns: + df["vat_number"] = df["vat_number"].astype("string") + # dump the csv into bigquery + + job = client.load_table_from_dataframe(df, table_ref, job_config=job_config,) + job.result() + + logging.info( + "Loaded %s rows into %s:%s.", job.output_rows, dataset_name, table_name + ) + + +def reserved_alphabet_space_underscore(string_as_is: str) -> str: + regex = re.compile("[^a-zA-Z 0-9_]") + return regex.sub("", string_as_is) + + +def reserved_only_one_space_between_words(string_as_is: str) -> str: + string_as_is = string_as_is.strip() + # two or more space between two words + # \w : word characters, a.k.a. alphanumeric and underscore + match = re.search(r"\w[ ]{2,}\w", string_as_is) + + if not match: + return string_as_is + + regex = re.compile(r"\s+") + string_as_is = regex.sub(" ", string_as_is) + + return string_as_is + + +def get_reformatted_style_columns(columns: dict) -> dict: + reformatted_columns = {} + for key, column_name in columns.items(): + reformatted_column_name = reserved_alphabet_space_underscore(column_name) + reformatted_column_name = reserved_only_one_space_between_words( + reformatted_column_name + ) + reformatted_column_name = reformatted_column_name.replace(" ", "_") + reformatted_column_name = reformatted_column_name.lower() + + reformatted_columns[key] = reformatted_column_name + + return reformatted_columns + + +def find_reformat_none_unique(columns: dict) -> list: + # reverse key-value of original dict to be value-key of reverse_dict + reverse_dict: Dict = {} + + for key, value in columns.items(): + reverse_dict.setdefault(value, set()).add(key) + + result = [key for key, values in reverse_dict.items() if len(values) > 1] + + return result + + +def apply_compatible_mapping_name(columns: dict) -> dict: + """Unify names with a heuristic hash table""" + updated_columns = apply_heuristic_name(columns) + + return updated_columns + + +def apply_heuristic_name(columns: dict) -> dict: + updated_columns = dict(columns) + + for candidate in HEURISTIC_COMPATIBLE_MAPPING_TABLE.keys(): + for key, value in columns.items(): + if candidate == value: + candidate_value = HEURISTIC_COMPATIBLE_MAPPING_TABLE[candidate] + updated_columns[key] = candidate_value + + return updated_columns + + +def init_rename_column_dict(columns_array: pd.core.indexes.base.Index) -> dict: + columns_dict = {} + + for item in columns_array: + columns_dict[item] = item + + return columns_dict + + +def strip_unwanted_columns(df: pd.DataFrame) -> pd.DataFrame: + columns_to_strip = [ + column_name + for column_name in UNWANTED_DATA_TO_UPLOAD + if column_name in df.columns + ] + + if not columns_to_strip: + return df + + return df.drop(columns=columns_to_strip) + + +def sanitize_column_names(df: pd.DataFrame) -> pd.DataFrame: + """ + Pre-process the column names of raw data + + Pre-checking rules of column name black list and re-formatting if necessary. + + The sanitized pre-process of data should follow the following rules: + 1. style of column name (which follows general SQL conventions) + 1-1. singular noun + 1-2. lower case + 1-3. snake-style (underscore-separated words) + 1-4. full word (if possible) except common abbreviations + 2. a column name SHOULD be unique + 3. backward compatible with column names in the past years + """ + df_stripped_unwanted = strip_unwanted_columns(df) + rename_column_dict = init_rename_column_dict(df_stripped_unwanted.columns) + + # apply possible heuristic name if possible + # this is mainly meant to resolve style-reformatted names duplicate conflicts + applied_heuristic_columns = apply_heuristic_name(rename_column_dict) + + # pre-process of style of column name + style_reformatted_columns = get_reformatted_style_columns(applied_heuristic_columns) + df.rename(columns=style_reformatted_columns) + + # pre-process of name uniqueness + duplicate_column_names = find_reformat_none_unique(style_reformatted_columns) + if duplicate_column_names: + logging.error( + "Found the following duplicate column names: %s", duplicate_column_names + ) + + # pre-process of backward compatibility + compatible_columns = apply_compatible_mapping_name(style_reformatted_columns) + + return df_stripped_unwanted.rename(columns=compatible_columns) + +def hash_string(string_to_hash: str) -> str: + sha = hashlib.sha256() + sha.update(str(string_to_hash).encode("utf-8")) + string_hashed = sha.hexdigest() + + return string_hashed + +def hash_privacy_info(df: pd.DataFrame) -> None: + if "email" in df.columns: + df["email"] = df["email"].apply(hash_string) + + +TABLE = f"pycontw-225217.ods.ods_kktix_attendeeId_datetime" + + +SCHEMA = [ + bigquery.SchemaField("id", "INTEGER", mode="REQUIRED"), + bigquery.SchemaField("name", "STRING", mode="REQUIRED"), + bigquery.SchemaField("attendee_info", "STRING", mode="REQUIRED"), + bigquery.SchemaField("refunded", "BOOLEAN", mode="REQUIRED"), +] +JOB_CONFIG = bigquery.LoadJobConfig(schema=SCHEMA) + +def main(): + + # Set the default project ID and dataset ID + project_id = 'pycontw-225217' + dataset_id = 'ods' + table_id = 'your-table-id' + ticket_type = 'corporate' + ticket_year = '2022' + """ + Commandline entrypoint + """ + parser = argparse.ArgumentParser( + description="Deserialize Attendee info with JSON format from KKTIX and load to legcy 3 tables corporate, individual, reserved" + ) + + parser.add_argument("-p", "--project-id", help="BigQuery project ID") + + parser.add_argument( + "-d", "--dataset-name", help="BigQuery dataset name to create or append" + ) + + parser.add_argument( + "-t", "--table-name", help="BigQuery table name to create or append" + ) + + parser.add_argument( + "-k", "--ticket-type", help="Attendee ticket-type name in corporate, individual, reserved" + ) + + parser.add_argument( + "-y", "--ticket-year", help="PyConTW year" + ) + + + parser.add_argument( + "--upload", + action="store_true", + help="Parsing the file but not upload it", + default=False, + ) + + args = parser.parse_args() + + if args.project_id: + project_id = args.project_id + if args.dataset_name: + dataset_id = args.dataset_name + if args.table_name: + table_id = args.table_name + if args.ticket_type: + ticket_type = args.ticket_type + if args.ticket_year: + ticket_year = args.ticket_year + + # Set up the client object + client = bigquery.Client(project=project_id) + + # Set up the job config + job_config = bigquery.QueryJobConfig() + job_config.use_legacy_sql = False + + # Build the SQL query to extract the data + query = f'SELECT * FROM `{TABLE}` WHERE lower( NAME ) LIKE "%{ticket_year}%{ticket_type}%"' + + # Execute the query and extract the data + # bigquery depends on db_dtypes for to_dataframe(), depends on apache-arrow, cannot be installed (build failed) on my old MAC + # use the raw result from bigQuery is good for this use case + job = client.query(query, job_config=job_config) + results = job.result() + + # print(results) + + print(f'Extracted from {TABLE} successful.') + + # Use DataFrame for table transform operations + df = pd.DataFrame() + for row in results: + json_dict = json.loads(row['ATTENDEE_INFO']) + df_dict = pd.DataFrame([json_dict]) + + # We don't have paid_date column from ATTENDEE_INFO, convert the updated_at timestamp + timestamp = df_dict.loc[0, 'updated_at'] + # print(timestamp) + dt_object = datetime.fromtimestamp(timestamp) + transc_date = dt_object.strftime('%Y-%m-%d') + # print(transc_date) + df_dict['paid_date'] = transc_date + + # ticket_type value is always "qrcode" here, and conflict with old table, + # kyc, id_number, slot value is always empty + # 'id','ticket_id','state','checkin_code', 'qrcode', updated_at, order_no no exist in old table + # data will be handle later + useless_columns = ['id','ticket_id','state','checkin_code', 'qrcode', 'currency', 'data', 'ticket_type', 'kyc', 'updated_at', 'id_number', 'slot', 'order_no'] + df_dict = df_dict.drop(columns = useless_columns) + df_dict = df_dict.rename(columns = {"reg_no": "registration_no", "ticket_name": "ticket_type", "is_paid": "payment_status"}) + if 'payment_status' in df_dict.columns: + if df_dict.loc[0, 'payment_status']: + # df_dict['payment_status'] = df_dict['payment_status'].astype("string") + df_dict.loc[0, 'payment_status'] = "paid" + else: + df_dict.loc[0, 'payment_status'] = "not" + # json_dict['data'] in format of [[item_name, item_value],[],...] + data_list = json_dict['data'] + column_list = [dl[0] for dl in data_list] + value_list = [dl[1] for dl in data_list] + # print(column_list) + # print(value_list) + df_data = pd.DataFrame() + df_data[column_list] = [value_list] + + df_dict = pd.concat([df_dict, df_data], axis=1) + df = pd.concat([df, df_dict], ignore_index=True) + + # print(df.columns) + sanitized_df = sanitize_column_names(df) + hash_privacy_info(sanitized_df) + + # For columns with FLOAT type in table schema, do pd.to_numeric to handle empty string (convert to NaN) + num_columns = ['price', 'invoice_policy', 'if_you_buy_the_ticket_with_pyckage', 'vat_number_optional'] + for col in num_columns: + if col in sanitized_df.columns: + sanitized_df[[col]] = sanitized_df[[col]].apply(pd.to_numeric) + + # Drop privacy columns + priv_columns = ['nickname', 'address_size_of_tshirt_t'] + for col in priv_columns: + if col in sanitized_df.columns: + sanitized_df = sanitized_df.drop(columns = [col]) + + #print(sanitized_df.columns) + #print(sanitized_df.head()) + #df_null = sanitized_df.isnull() + #print(sanitized_df.iloc[:, :5]) + + # TODO + # Loop for the 3 tables by set the table ID and upload_dataframe_to_bigquery + if args.upload: + upload_dataframe_to_bigquery( + sanitized_df, project_id, dataset_id, table_id + ) + else: + logging.info("Dry-run mode. Data will not be uploaded.") + logging.info("Column names (as-is):") + logging.info(df.columns) + logging.info("") + logging.info("Column names (to-be):") + logging.info(sanitized_df.columns) + #print(sanitized_df.iloc[:, :5]) + #print(sanitized_df[['paid_date', 'payment_status', 'email']]) + + return sanitized_df.columns + +if __name__ == "__main__": + main() diff --git a/contrib/kktix_bq_etl.sh b/contrib/kktix_bq_etl.sh new file mode 100755 index 0000000..433e618 --- /dev/null +++ b/contrib/kktix_bq_etl.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# +# export GOOGLE_APPLICATION_CREDENTIALS="" +# +project_id="pycontw-225217" +cmd=${PWD}/kktix_bq_etl.py + + +for ticket_type in corporate individual reserved +do + suffix=${ticket_type}_attendees_test + cmd_args="-p ${project_id} -d ods -t ods_kktix_ticket_${suffix} -k ${ticket_type} -y $1 --upload" + echo ${cmd_args} + ${cmd} ${cmd_args} +done From 79506a89e99a52093b93cb327d68af58749db076 Mon Sep 17 00:00:00 2001 From: Angus Yang Date: Sat, 24 Jun 2023 17:57:21 +0800 Subject: [PATCH 72/89] style: lint the code and fix potential SQL inject by parameterized query --- contrib/kktix_bq_etl.py | 198 ++++++++++++++++++++++++---------------- 1 file changed, 117 insertions(+), 81 deletions(-) diff --git a/contrib/kktix_bq_etl.py b/contrib/kktix_bq_etl.py index 14d3b6b..6e20ee5 100755 --- a/contrib/kktix_bq_etl.py +++ b/contrib/kktix_bq_etl.py @@ -1,14 +1,13 @@ #!/usr/bin/env python3 import argparse import hashlib +import json import logging import re -import unittest -from typing import Dict, Set, List +from datetime import datetime +from typing import Dict, Set import pandas as pd -import json -from datetime import datetime from google.cloud import bigquery CANONICAL_COLUMN_NAMES_CORE = { @@ -170,7 +169,7 @@ "privacy_policy_of_pycon_tw_2021_pycon_tw_2021_httpsbitly2qwl0am": "privacy_policy_of_pycon_tw", "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw_2021_pycon_tw_2021": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", # from 2022 reformatted column names - "how_did_you_know_pycon_apac_2022_pycon_apac_2022": "how_did_you_know_pycon_tw", + "how_did_you_know_pycon_apac_2022_pycon_apac_2022": "how_did_you_know_pycon_tw", "Ive_already_read and_I_accept_the_Privacy_Policy_of_PyCon_TW_2022": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", "privacy_policy_of_pycon_apac_2022_pycon_apac_2022_httpsreurlcc1zxzxw": "privacy_policy_of_pycon_tw", "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_apac_2022_pycon_apac_2022": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", @@ -180,11 +179,11 @@ "privacy_policy_of_pycon_apac_2022_pycon_apac_2022": "privacy_policy_of_pycon_tw", "privacy_policy_of_pycon_apac_2022": "privacy_policy_of_pycon_tw", # from 2023 reformatted column names - 'attend_first_time_how_did_you_know_pycon_tw_2023_pycon_tw_2023': "how_did_you_know_pycon_tw", - 'ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw_2023_pycon_tw_2023': "privacy_policy_of_pycon_tw", - 'size_of_tshirt_for_tickets_with_tshirt_should_fill_in_this_field': "size_of_tshirt", - 'job_title_if_you_are_a_student_fill_in_student_student': 'job_title', - 'would_you_like_to_receive_an_email_from_sponsors': "email_from_sponsor", + "attend_first_time_how_did_you_know_pycon_tw_2023_pycon_tw_2023": "how_did_you_know_pycon_tw", + "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw_2023_pycon_tw_2023": "privacy_policy_of_pycon_tw", + "size_of_tshirt_for_tickets_with_tshirt_should_fill_in_this_field": "size_of_tshirt", + "job_title_if_you_are_a_student_fill_in_student_student": "job_title", + "would_you_like_to_receive_an_email_from_sponsors": "email_from_sponsor", } UNWANTED_DATA_TO_UPLOAD = ( @@ -205,24 +204,29 @@ "購買含 PySafe 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 PySafe 無法送達,如因填寫錯誤致未收到 PySafe,報名人須自行負責,大會恕不再另行補寄", "Address / 收件地址 EX: 115台北市南港區研究院路二段128號", # For 2022 - '聯絡人 姓名', '聯絡人 Email', '聯絡人 手機', '標籤', '姓名', '手機', - # For 2023, just for notes + "聯絡人 姓名", + "聯絡人 Email", + "聯絡人 手機", + "標籤", + "姓名", + "手機", + # For 2023, just for notes "提醒填寫正確的衣服尺寸", "徵稿資訊管道", "個人資料保護聲明", - '行為準則', - '注意事項', - '企業票種將提供報帳收據', - '衣服尺寸注意事項', - 'PyCon TW 2023 個人資料保護聲明', - 'PyCon TW 2023 行為準則', - # For 2023, duplicated - 'Would you like to receive an email from sponsors? / 是否願意收到贊助商轉發的電子郵件?', - 'I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (Ref: https://reurl.cc/ZQ6VY6)', - 'Size of T-shirt / 衣服尺寸 (For tickets with t-shirt should fill in this field / 票種有含紀念衣服需填寫)', - '(初次參與) How did you know PyCon TW 2023? / (Attend first time) 如何得知 PyCon TW 2023?', + "行為準則", + "注意事項", + "企業票種將提供報帳收據", + "衣服尺寸注意事項", + "PyCon TW 2023 個人資料保護聲明", + "PyCon TW 2023 行為準則", + # For 2023, duplicated + "Would you like to receive an email from sponsors? / 是否願意收到贊助商轉發的電子郵件?", + "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (Ref: https://reurl.cc/ZQ6VY6)", + "Size of T-shirt / 衣服尺寸 (For tickets with t-shirt should fill in this field / 票種有含紀念衣服需填寫)", + "(初次參與) How did you know PyCon TW 2023? / (Attend first time) 如何得知 PyCon TW 2023?", '(投稿者) 你是怎麼得知 PyCon Taiwan 投稿資訊?/ (For Submitter) How did you know the CfP information of PyCon Taiwan? (If you are NOT submitter, fill in "non-submitter"/ 如果您沒有投稿,請填寫「非投稿者」)', - """I'm willing to comply with the PyCon TW 2023 CoC / 我願意遵守 PyCon TW 2023 行為準則""" + """I'm willing to comply with the PyCon TW 2023 CoC / 我願意遵守 PyCon TW 2023 行為準則""", ) @@ -241,7 +245,7 @@ def upload_dataframe_to_bigquery( job_config.schema_update_options = [ bigquery.SchemaUpdateOption.ALLOW_FIELD_ADDITION ] - + if "vat_number" in df.columns: df["vat_number"] = df["vat_number"].astype("string") # dump the csv into bigquery @@ -380,6 +384,7 @@ def sanitize_column_names(df: pd.DataFrame) -> pd.DataFrame: return df_stripped_unwanted.rename(columns=compatible_columns) + def hash_string(string_to_hash: str) -> str: sha = hashlib.sha256() sha.update(str(string_to_hash).encode("utf-8")) @@ -387,12 +392,13 @@ def hash_string(string_to_hash: str) -> str: return string_hashed + def hash_privacy_info(df: pd.DataFrame) -> None: if "email" in df.columns: df["email"] = df["email"].apply(hash_string) -TABLE = f"pycontw-225217.ods.ods_kktix_attendeeId_datetime" +TABLE = "pycontw-225217.ods.ods_kktix_attendeeId_datetime" SCHEMA = [ @@ -403,14 +409,15 @@ def hash_privacy_info(df: pd.DataFrame) -> None: ] JOB_CONFIG = bigquery.LoadJobConfig(schema=SCHEMA) + def main(): # Set the default project ID and dataset ID - project_id = 'pycontw-225217' - dataset_id = 'ods' - table_id = 'your-table-id' - ticket_type = 'corporate' - ticket_year = '2022' + project_id = "pycontw-225217" + dataset_id = "ods" + table_id = "your-table-id" + ticket_type: str = "corporate" + ticket_year: str = "2022" """ Commandline entrypoint """ @@ -429,13 +436,12 @@ def main(): ) parser.add_argument( - "-k", "--ticket-type", help="Attendee ticket-type name in corporate, individual, reserved" - ) - - parser.add_argument( - "-y", "--ticket-year", help="PyConTW year" - ) + "-k", + "--ticket-type", + help="Attendee ticket-type name in corporate, individual, reserved", + ) + parser.add_argument("-y", "--ticket-year", help="PyConTW year") parser.add_argument( "--upload", @@ -446,16 +452,16 @@ def main(): args = parser.parse_args() - if args.project_id: + if args.project_id: project_id = args.project_id - if args.dataset_name: + if args.dataset_name: dataset_id = args.dataset_name - if args.table_name: + if args.table_name: table_id = args.table_name - if args.ticket_type: - ticket_type = args.ticket_type - if args.ticket_year: - ticket_year = args.ticket_year + if args.ticket_type: + ticket_type = args.ticket_type + if args.ticket_year: + ticket_year = args.ticket_year # Set up the client object client = bigquery.Client(project=project_id) @@ -465,47 +471,73 @@ def main(): job_config.use_legacy_sql = False # Build the SQL query to extract the data - query = f'SELECT * FROM `{TABLE}` WHERE lower( NAME ) LIKE "%{ticket_year}%{ticket_type}%"' - - # Execute the query and extract the data + # Use parameterized queries to prevent SQL inject + job_config.query_parameters = [ + bigquery.ScalarQueryParameter( + "t_year_type", "STRING", f"%{ticket_year}%{ticket_type}%" + ), + # bigquery.ScalarQueryParameter("t_type", "STRING", f'%{ticket_type}%'), + ] + query = f"SELECT * FROM `{TABLE}` WHERE lower( NAME ) LIKE @t_year_type" + # Execute the query and extract the data # bigquery depends on db_dtypes for to_dataframe(), depends on apache-arrow, cannot be installed (build failed) on my old MAC # use the raw result from bigQuery is good for this use case job = client.query(query, job_config=job_config) - results = job.result() + results = job.result() # print(results) - print(f'Extracted from {TABLE} successful.') - + print(f"Extracted from {TABLE} successful.") + # Use DataFrame for table transform operations df = pd.DataFrame() for row in results: - json_dict = json.loads(row['ATTENDEE_INFO']) + json_dict = json.loads(row["ATTENDEE_INFO"]) df_dict = pd.DataFrame([json_dict]) # We don't have paid_date column from ATTENDEE_INFO, convert the updated_at timestamp - timestamp = df_dict.loc[0, 'updated_at'] + timestamp = df_dict.loc[0, "updated_at"] # print(timestamp) dt_object = datetime.fromtimestamp(timestamp) - transc_date = dt_object.strftime('%Y-%m-%d') - # print(transc_date) - df_dict['paid_date'] = transc_date + transc_date = dt_object.strftime("%Y-%m-%d") + # print(transc_date) + df_dict["paid_date"] = transc_date - # ticket_type value is always "qrcode" here, and conflict with old table, + # ticket_type value is always "qrcode" here, and conflict with old table, # kyc, id_number, slot value is always empty # 'id','ticket_id','state','checkin_code', 'qrcode', updated_at, order_no no exist in old table # data will be handle later - useless_columns = ['id','ticket_id','state','checkin_code', 'qrcode', 'currency', 'data', 'ticket_type', 'kyc', 'updated_at', 'id_number', 'slot', 'order_no'] - df_dict = df_dict.drop(columns = useless_columns) - df_dict = df_dict.rename(columns = {"reg_no": "registration_no", "ticket_name": "ticket_type", "is_paid": "payment_status"}) - if 'payment_status' in df_dict.columns: - if df_dict.loc[0, 'payment_status']: + useless_columns = [ + "id", + "ticket_id", + "state", + "checkin_code", + "qrcode", + "currency", + "data", + "ticket_type", + "kyc", + "updated_at", + "id_number", + "slot", + "order_no", + ] + df_dict = df_dict.drop(columns=useless_columns) + df_dict = df_dict.rename( + columns={ + "reg_no": "registration_no", + "ticket_name": "ticket_type", + "is_paid": "payment_status", + } + ) + if "payment_status" in df_dict.columns: + if df_dict.loc[0, "payment_status"]: # df_dict['payment_status'] = df_dict['payment_status'].astype("string") - df_dict.loc[0, 'payment_status'] = "paid" + df_dict.loc[0, "payment_status"] = "paid" else: - df_dict.loc[0, 'payment_status'] = "not" + df_dict.loc[0, "payment_status"] = "not" # json_dict['data'] in format of [[item_name, item_value],[],...] - data_list = json_dict['data'] + data_list = json_dict["data"] column_list = [dl[0] for dl in data_list] value_list = [dl[1] for dl in data_list] # print(column_list) @@ -518,31 +550,34 @@ def main(): # print(df.columns) sanitized_df = sanitize_column_names(df) - hash_privacy_info(sanitized_df) - - # For columns with FLOAT type in table schema, do pd.to_numeric to handle empty string (convert to NaN) - num_columns = ['price', 'invoice_policy', 'if_you_buy_the_ticket_with_pyckage', 'vat_number_optional'] + hash_privacy_info(sanitized_df) + + # For columns with FLOAT type in table schema, do pd.to_numeric to handle empty string (convert to NaN) + num_columns = [ + "price", + "invoice_policy", + "if_you_buy_the_ticket_with_pyckage", + "vat_number_optional", + ] for col in num_columns: if col in sanitized_df.columns: sanitized_df[[col]] = sanitized_df[[col]].apply(pd.to_numeric) - + # Drop privacy columns - priv_columns = ['nickname', 'address_size_of_tshirt_t'] + priv_columns = ["nickname", "address_size_of_tshirt_t"] for col in priv_columns: if col in sanitized_df.columns: - sanitized_df = sanitized_df.drop(columns = [col]) - - #print(sanitized_df.columns) - #print(sanitized_df.head()) - #df_null = sanitized_df.isnull() - #print(sanitized_df.iloc[:, :5]) + sanitized_df = sanitized_df.drop(columns=[col]) + + # print(sanitized_df.columns) + # print(sanitized_df.head()) + # df_null = sanitized_df.isnull() + # print(sanitized_df.iloc[:, :5]) # TODO # Loop for the 3 tables by set the table ID and upload_dataframe_to_bigquery if args.upload: - upload_dataframe_to_bigquery( - sanitized_df, project_id, dataset_id, table_id - ) + upload_dataframe_to_bigquery(sanitized_df, project_id, dataset_id, table_id) else: logging.info("Dry-run mode. Data will not be uploaded.") logging.info("Column names (as-is):") @@ -550,10 +585,11 @@ def main(): logging.info("") logging.info("Column names (to-be):") logging.info(sanitized_df.columns) - #print(sanitized_df.iloc[:, :5]) - #print(sanitized_df[['paid_date', 'payment_status', 'email']]) + # print(sanitized_df.iloc[:, :5]) + # print(sanitized_df[['paid_date', 'payment_status', 'email']]) return sanitized_df.columns + if __name__ == "__main__": main() From a3b954c60d3111fa9bc1f391a43fa98d824c9d36 Mon Sep 17 00:00:00 2001 From: Angus Yang Date: Sat, 1 Jul 2023 21:52:32 +0800 Subject: [PATCH 73/89] fix (dataframe): Aggregate the columns with the same purposes or names --- contrib/kktix_bq_etl.py | 71 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 63 insertions(+), 8 deletions(-) diff --git a/contrib/kktix_bq_etl.py b/contrib/kktix_bq_etl.py index 6e20ee5..8dd239d 100755 --- a/contrib/kktix_bq_etl.py +++ b/contrib/kktix_bq_etl.py @@ -180,10 +180,16 @@ "privacy_policy_of_pycon_apac_2022": "privacy_policy_of_pycon_tw", # from 2023 reformatted column names "attend_first_time_how_did_you_know_pycon_tw_2023_pycon_tw_2023": "how_did_you_know_pycon_tw", + "for_submitter_how_did_you_know_the_cfp_information_of_pycon_taiwan_pycon_taiwan_if_you_are_not_submitter_fill_in_nonsubmitter": "how_did_you_know_cfp_of_pycon_tw", "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw_2023_pycon_tw_2023": "privacy_policy_of_pycon_tw", "size_of_tshirt_for_tickets_with_tshirt_should_fill_in_this_field": "size_of_tshirt", "job_title_if_you_are_a_student_fill_in_student_student": "job_title", "would_you_like_to_receive_an_email_from_sponsors": "email_from_sponsor", + "Size of T-shirt / 衣服尺寸 (For tickets with t-shirt should fill in this field / 票種有含紀念衣服需填寫)": "size_of_tshirt_2023", + "Would you like to receive an email from sponsors? / 是否願意收到贊助商轉發的電子郵件?": "email_from_sponsor", + "Would you like to receive an email from sponsors?/ 是否願意收到贊助商轉發的電子郵件?": "email_from_sponsor_t", # ? is different + "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (ref: https://reurl.cc/ZQ6VY6)": "i_would_like_to_donate_invoice_to_open_culture_foundation", + "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (Ref: https://reurl.cc/ZQ6VY6)": "i_would_like_to_donate_invoice_to_open_culture_foundation_t", # ref vs Ref } UNWANTED_DATA_TO_UPLOAD = ( @@ -205,7 +211,7 @@ "Address / 收件地址 EX: 115台北市南港區研究院路二段128號", # For 2022 "聯絡人 姓名", - "聯絡人 Email", + # "聯絡人 Email", "聯絡人 手機", "標籤", "姓名", @@ -221,12 +227,12 @@ "PyCon TW 2023 個人資料保護聲明", "PyCon TW 2023 行為準則", # For 2023, duplicated - "Would you like to receive an email from sponsors? / 是否願意收到贊助商轉發的電子郵件?", - "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (Ref: https://reurl.cc/ZQ6VY6)", - "Size of T-shirt / 衣服尺寸 (For tickets with t-shirt should fill in this field / 票種有含紀念衣服需填寫)", + # "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (Ref: https://reurl.cc/ZQ6VY6)", + # "Size of T-shirt / 衣服尺寸 (For tickets with t-shirt should fill in this field / 票種有含紀念衣服需填寫)", "(初次參與) How did you know PyCon TW 2023? / (Attend first time) 如何得知 PyCon TW 2023?", '(投稿者) 你是怎麼得知 PyCon Taiwan 投稿資訊?/ (For Submitter) How did you know the CfP information of PyCon Taiwan? (If you are NOT submitter, fill in "non-submitter"/ 如果您沒有投稿,請填寫「非投稿者」)', """I'm willing to comply with the PyCon TW 2023 CoC / 我願意遵守 PyCon TW 2023 行為準則""", + "Have you ever been a PyCon TW volunteer? / 是否曾擔任過 PyCon TW 志工?", ) @@ -540,7 +546,7 @@ def main(): data_list = json_dict["data"] column_list = [dl[0] for dl in data_list] value_list = [dl[1] for dl in data_list] - # print(column_list) + # print(len(column_list)) # print(value_list) df_data = pd.DataFrame() df_data[column_list] = [value_list] @@ -550,8 +556,11 @@ def main(): # print(df.columns) sanitized_df = sanitize_column_names(df) - hash_privacy_info(sanitized_df) + # The privacy info in "pycontw-225217.ods.ods_kktix_attendeeId_datetime" had already hashed + # hash_privacy_info(sanitized_df) + # Group the columns with the same names + # sanitized_df = sanitized_df.replace('null', np.nan).groupby(sanitized_df.columns, axis=1).first() # For columns with FLOAT type in table schema, do pd.to_numeric to handle empty string (convert to NaN) num_columns = [ "price", @@ -563,8 +572,53 @@ def main(): if col in sanitized_df.columns: sanitized_df[[col]] = sanitized_df[[col]].apply(pd.to_numeric) - # Drop privacy columns - priv_columns = ["nickname", "address_size_of_tshirt_t"] + # Combine columns with the same purpose + s_columns = [ + "size_of_tshirt_2023", + "size_of_tshirt", + "ticket_with_tshirt_size_of_tshirt", + "email_from_sponsor", + "email_from_sponsor_t", + "i_would_like_to_donate_invoice_to_open_culture_foundation", + "i_would_like_to_donate_invoice_to_open_culture_foundation_t", + ] + # handle the null and data types + for col in s_columns: + if col in sanitized_df.columns: + sanitized_df[col] = sanitized_df[col].fillna("") + sanitized_df[col] = sanitized_df[col].astype(str) + else: + sanitized_df[col] = "" + + # aggregate the size_of_tshirt + sanitized_df["size_of_tshirt"] = sanitized_df[ + ["size_of_tshirt_2023", "size_of_tshirt", "ticket_with_tshirt_size_of_tshirt"] + ].agg("".join, axis=1) + # aggregate the email_from_sponsor + sanitized_df["email_from_sponsor"] = sanitized_df[ + ["email_from_sponsor", "email_from_sponsor_t"] + ].agg("".join, axis=1) + # aggregate the donate_invoice + sanitized_df[ + "i_would_like_to_donate_invoice_to_open_culture_foundation" + ] = sanitized_df[ + [ + "i_would_like_to_donate_invoice_to_open_culture_foundation", + "i_would_like_to_donate_invoice_to_open_culture_foundation_t", + ] + ].agg( + "".join, axis=1 + ) + + # Drop privacy, duplicated or temp columns + priv_columns = [ + "nickname", + "address_size_of_tshirt_t", + "size_of_tshirt_2023", + "ticket_with_tshirt_size_of_tshirt", + "email_from_sponsor_t", + "i_would_like_to_donate_invoice_to_open_culture_foundation_t", + ] for col in priv_columns: if col in sanitized_df.columns: sanitized_df = sanitized_df.drop(columns=[col]) @@ -582,6 +636,7 @@ def main(): logging.info("Dry-run mode. Data will not be uploaded.") logging.info("Column names (as-is):") logging.info(df.columns) + # print(df[['paid_date', 'payment_status', 'email']]) logging.info("") logging.info("Column names (to-be):") logging.info(sanitized_df.columns) From c3064ba0d0882978194cb1d91c190e1193229712 Mon Sep 17 00:00:00 2001 From: Angus Yang Date: Sun, 2 Jul 2023 11:13:04 +0800 Subject: [PATCH 74/89] [refactor] (dataframe): Group the columns with the same purposes or names in better way --- contrib/kktix_bq_etl.py | 82 ++++++++++++++--------------------------- contrib/kktix_bq_etl.sh | 2 +- 2 files changed, 29 insertions(+), 55 deletions(-) diff --git a/contrib/kktix_bq_etl.py b/contrib/kktix_bq_etl.py index 8dd239d..d2d4898 100755 --- a/contrib/kktix_bq_etl.py +++ b/contrib/kktix_bq_etl.py @@ -7,6 +7,7 @@ from datetime import datetime from typing import Dict, Set +import numpy as np import pandas as pd from google.cloud import bigquery @@ -183,13 +184,19 @@ "for_submitter_how_did_you_know_the_cfp_information_of_pycon_taiwan_pycon_taiwan_if_you_are_not_submitter_fill_in_nonsubmitter": "how_did_you_know_cfp_of_pycon_tw", "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw_2023_pycon_tw_2023": "privacy_policy_of_pycon_tw", "size_of_tshirt_for_tickets_with_tshirt_should_fill_in_this_field": "size_of_tshirt", + "ticket_with_tshirt_size_of_tshirt": "size_of_tshirt", "job_title_if_you_are_a_student_fill_in_student_student": "job_title", "would_you_like_to_receive_an_email_from_sponsors": "email_from_sponsor", - "Size of T-shirt / 衣服尺寸 (For tickets with t-shirt should fill in this field / 票種有含紀念衣服需填寫)": "size_of_tshirt_2023", + "Size of T-shirt / 衣服尺寸 (For tickets with t-shirt should fill in this field / 票種有含紀念衣服需填寫)": "size_of_tshirt", "Would you like to receive an email from sponsors? / 是否願意收到贊助商轉發的電子郵件?": "email_from_sponsor", - "Would you like to receive an email from sponsors?/ 是否願意收到贊助商轉發的電子郵件?": "email_from_sponsor_t", # ? is different + "Would you like to receive an email from sponsors?/ 是否願意收到贊助商轉發的電子郵件?": "email_from_sponsor", # ? is different "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (ref: https://reurl.cc/ZQ6VY6)": "i_would_like_to_donate_invoice_to_open_culture_foundation", - "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (Ref: https://reurl.cc/ZQ6VY6)": "i_would_like_to_donate_invoice_to_open_culture_foundation_t", # ref vs Ref + "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (Ref: https://reurl.cc/ZQ6VY6)": "i_would_like_to_donate_invoice_to_open_culture_foundation", # ref vs Ref + "Have you ever been a PyCon TW volunteer? / 是否曾擔任過 PyCon TW 志工?": "have_you_ever_been_a_pycontw_volunteer_pycontw", + "Have you ever been a PyCon TW volunteer? / 是否曾擔任過 PyCon TW 志工?": "have_you_ever_been_a_pycontw_volunteer_pycontw", + "How did you know PyCon TW 2023? / 如何得知 PyCon TW 2023?": "how_did_you_know_pycon_tw", + "(初次參與) How did you know PyCon TW 2023? / (Attend first time) 如何得知 PyCon TW 2023?": "how_did_you_know_pycon_tw", + '(投稿者) 你是怎麼得知 PyCon Taiwan 投稿資訊?/ (For Submitter) How did you know the CfP information of PyCon Taiwan? (If you are NOT submitter, fill in "non-submitter"/ 如果您沒有投稿,請填寫「非投稿者」)': "how_did_you_know_cfp_of_pycon_tw", } UNWANTED_DATA_TO_UPLOAD = ( @@ -229,10 +236,8 @@ # For 2023, duplicated # "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (Ref: https://reurl.cc/ZQ6VY6)", # "Size of T-shirt / 衣服尺寸 (For tickets with t-shirt should fill in this field / 票種有含紀念衣服需填寫)", - "(初次參與) How did you know PyCon TW 2023? / (Attend first time) 如何得知 PyCon TW 2023?", - '(投稿者) 你是怎麼得知 PyCon Taiwan 投稿資訊?/ (For Submitter) How did you know the CfP information of PyCon Taiwan? (If you are NOT submitter, fill in "non-submitter"/ 如果您沒有投稿,請填寫「非投稿者」)', """I'm willing to comply with the PyCon TW 2023 CoC / 我願意遵守 PyCon TW 2023 行為準則""", - "Have you ever been a PyCon TW volunteer? / 是否曾擔任過 PyCon TW 志工?", + # "Have you ever been a PyCon TW volunteer? / 是否曾擔任過 PyCon TW 志工?", ) @@ -381,8 +386,9 @@ def sanitize_column_names(df: pd.DataFrame) -> pd.DataFrame: # pre-process of name uniqueness duplicate_column_names = find_reformat_none_unique(style_reformatted_columns) if duplicate_column_names: - logging.error( - "Found the following duplicate column names: %s", duplicate_column_names + logging.info( + "Found the following duplicate column names: %s, will be grouped", + duplicate_column_names, ) # pre-process of backward compatibility @@ -523,7 +529,7 @@ def main(): "data", "ticket_type", "kyc", - "updated_at", + # "updated_at", "id_number", "slot", "order_no", @@ -559,9 +565,14 @@ def main(): # The privacy info in "pycontw-225217.ods.ods_kktix_attendeeId_datetime" had already hashed # hash_privacy_info(sanitized_df) - # Group the columns with the same names - # sanitized_df = sanitized_df.replace('null', np.nan).groupby(sanitized_df.columns, axis=1).first() - # For columns with FLOAT type in table schema, do pd.to_numeric to handle empty string (convert to NaN) + # Group the columns with the same purposes and names + sanitized_df = ( + sanitized_df.replace("null", np.nan) + .groupby(sanitized_df.columns, axis=1, sort=False) + .first() + ) + + # For columns with FLOAT type in BigQuery table schema, do pd.to_numeric to handle empty string (convert to NaN) num_columns = [ "price", "invoice_policy", @@ -572,57 +583,20 @@ def main(): if col in sanitized_df.columns: sanitized_df[[col]] = sanitized_df[[col]].apply(pd.to_numeric) - # Combine columns with the same purpose - s_columns = [ - "size_of_tshirt_2023", - "size_of_tshirt", - "ticket_with_tshirt_size_of_tshirt", - "email_from_sponsor", - "email_from_sponsor_t", - "i_would_like_to_donate_invoice_to_open_culture_foundation", - "i_would_like_to_donate_invoice_to_open_culture_foundation_t", - ] - # handle the null and data types - for col in s_columns: - if col in sanitized_df.columns: - sanitized_df[col] = sanitized_df[col].fillna("") - sanitized_df[col] = sanitized_df[col].astype(str) - else: - sanitized_df[col] = "" - - # aggregate the size_of_tshirt - sanitized_df["size_of_tshirt"] = sanitized_df[ - ["size_of_tshirt_2023", "size_of_tshirt", "ticket_with_tshirt_size_of_tshirt"] - ].agg("".join, axis=1) - # aggregate the email_from_sponsor - sanitized_df["email_from_sponsor"] = sanitized_df[ - ["email_from_sponsor", "email_from_sponsor_t"] - ].agg("".join, axis=1) - # aggregate the donate_invoice - sanitized_df[ - "i_would_like_to_donate_invoice_to_open_culture_foundation" - ] = sanitized_df[ - [ - "i_would_like_to_donate_invoice_to_open_culture_foundation", - "i_would_like_to_donate_invoice_to_open_culture_foundation_t", - ] - ].agg( - "".join, axis=1 - ) - # Drop privacy, duplicated or temp columns priv_columns = [ "nickname", "address_size_of_tshirt_t", - "size_of_tshirt_2023", - "ticket_with_tshirt_size_of_tshirt", - "email_from_sponsor_t", - "i_would_like_to_donate_invoice_to_open_culture_foundation_t", ] for col in priv_columns: if col in sanitized_df.columns: sanitized_df = sanitized_df.drop(columns=[col]) + # Keep the latest update record with registration_no as the unique key + sanitized_df = sanitized_df.sort_values(by=["updated_at"]) + sanitized_df = sanitized_df.drop_duplicates(subset=["registration_no"], keep="last") + sanitized_df = sanitized_df.set_index("registration_no") + # print(sanitized_df.columns) # print(sanitized_df.head()) # df_null = sanitized_df.isnull() diff --git a/contrib/kktix_bq_etl.sh b/contrib/kktix_bq_etl.sh index 433e618..a57f9b3 100755 --- a/contrib/kktix_bq_etl.sh +++ b/contrib/kktix_bq_etl.sh @@ -9,7 +9,7 @@ cmd=${PWD}/kktix_bq_etl.py for ticket_type in corporate individual reserved do suffix=${ticket_type}_attendees_test - cmd_args="-p ${project_id} -d ods -t ods_kktix_ticket_${suffix} -k ${ticket_type} -y $1 --upload" + cmd_args="-p ${project_id} -d dwd -t kktix_ticket_${suffix} -k ${ticket_type} -y $1 --upload" echo ${cmd_args} ${cmd} ${cmd_args} done From 3a2eccbf9bbe3e36a965022605697db184fd6519 Mon Sep 17 00:00:00 2001 From: Angus Yang Date: Sun, 2 Jul 2023 14:06:29 +0800 Subject: [PATCH 75/89] [refactor] (dataframe): Clean the columns for 2022 --- contrib/kktix_bq_etl.py | 7 +++++-- contrib/kktix_bq_etl.sh | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/contrib/kktix_bq_etl.py b/contrib/kktix_bq_etl.py index d2d4898..9f22f09 100755 --- a/contrib/kktix_bq_etl.py +++ b/contrib/kktix_bq_etl.py @@ -175,6 +175,7 @@ "privacy_policy_of_pycon_apac_2022_pycon_apac_2022_httpsreurlcc1zxzxw": "privacy_policy_of_pycon_tw", "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_apac_2022_pycon_apac_2022": "ive_already_read_and_i_accept_the_privacy_policy_of_pycon_tw", "would_you_like_to_receive_an_email_from_sponsors_email": "email_from_sponsor", + "would_you_like_to_receive_emails_from_the_sponsors_email": "email_from_sponsor", "pyckage_address_size_of_tshirt_t_pyckage_pyckage": "address_size_of_tshirt_t", "pyckage_address_size_of_tshirt_t": "address_size_of_tshirt_t", "privacy_policy_of_pycon_apac_2022_pycon_apac_2022": "privacy_policy_of_pycon_tw", @@ -217,8 +218,10 @@ "購買含 PySafe 票卷者,請務必填寫正確之「Address / 收件地址」和「Size of T-shirt / T恤尺寸 」(僅限台灣及離島區域),以避免 PySafe 無法送達,如因填寫錯誤致未收到 PySafe,報名人須自行負責,大會恕不再另行補寄", "Address / 收件地址 EX: 115台北市南港區研究院路二段128號", # For 2022 + "Address / 收件地址 Ex: No. 128, Sec. 2, Academia Rd., Nangang Dist., Taipei City 115201, Taiwan (R.O.C.) / 115台北市南港區研究院路二段128號", + "Address/ 收件地址 Ex: No. 128, Sec. 2, Academia Rd., Nangang Dist., Taipei City 115201, Taiwan (R.O.C.) / 115台北市南港區研究院路二段128號", "聯絡人 姓名", - # "聯絡人 Email", + "Email", # duplicated with 聯絡人 Email "聯絡人 手機", "標籤", "姓名", @@ -233,7 +236,7 @@ "衣服尺寸注意事項", "PyCon TW 2023 個人資料保護聲明", "PyCon TW 2023 行為準則", - # For 2023, duplicated + # For 2023, duplicated or unwanted # "I would like to donate invoice to Open Culture Foundation / 我願意捐贈發票給開放文化基金會 (Ref: https://reurl.cc/ZQ6VY6)", # "Size of T-shirt / 衣服尺寸 (For tickets with t-shirt should fill in this field / 票種有含紀念衣服需填寫)", """I'm willing to comply with the PyCon TW 2023 CoC / 我願意遵守 PyCon TW 2023 行為準則""", diff --git a/contrib/kktix_bq_etl.sh b/contrib/kktix_bq_etl.sh index a57f9b3..876ba74 100755 --- a/contrib/kktix_bq_etl.sh +++ b/contrib/kktix_bq_etl.sh @@ -8,7 +8,7 @@ cmd=${PWD}/kktix_bq_etl.py for ticket_type in corporate individual reserved do - suffix=${ticket_type}_attendees_test + suffix=${ticket_type}_attendees$2 cmd_args="-p ${project_id} -d dwd -t kktix_ticket_${suffix} -k ${ticket_type} -y $1 --upload" echo ${cmd_args} ${cmd} ${cmd_args} From a0b85631165756fe7e261c0e9fc10261b6fee211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Tue, 4 Jul 2023 02:15:11 +0800 Subject: [PATCH 76/89] [feat](twitter): add twitter api into airflow (#121) * [feat](twitter): add twitter api into airflow --- dags/app/twitter_post_notification_bot/dag.py | 30 +++++++++ dags/app/twitter_post_notification_bot/udf.py | 63 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 dags/app/twitter_post_notification_bot/dag.py create mode 100644 dags/app/twitter_post_notification_bot/udf.py diff --git a/dags/app/twitter_post_notification_bot/dag.py b/dags/app/twitter_post_notification_bot/dag.py new file mode 100644 index 0000000..fc42920 --- /dev/null +++ b/dags/app/twitter_post_notification_bot/dag.py @@ -0,0 +1,30 @@ +""" +Send Proposal Summary to Discord +""" +from datetime import datetime, timedelta + +from airflow import DAG +from airflow.operators.python_operator import PythonOperator +from app.twitter_post_notification_bot import udf + +DEFAULT_ARGS = { + "owner": "David Jr.", + "depends_on_past": False, + "start_date": datetime(2023, 7, 1), + "retries": 1, + "retry_delay": timedelta(minutes=5), +} + +with DAG( + "TWITTER_POST_NOTIFICATION_BOT", + default_args=DEFAULT_ARGS, + schedule_interval="*/90 * * * *", + max_active_runs=1, + catchup=False, +) as dag: + PythonOperator( + task_id="SEND_TWITTER_POST_NOTIFICATION", python_callable=udf.main, + ) + +if __name__ == "__main__": + dag.cli() diff --git a/dags/app/twitter_post_notification_bot/udf.py b/dags/app/twitter_post_notification_bot/udf.py new file mode 100644 index 0000000..0cc0e93 --- /dev/null +++ b/dags/app/twitter_post_notification_bot/udf.py @@ -0,0 +1,63 @@ +import requests +from airflow import settings +from airflow.models import Variable +from sqlalchemy.orm import sessionmaker + + +def main() -> None: + url = "https://twitter135.p.rapidapi.com/v2/UserTweets/" + # 499339900 is PyConTW's twitter id + querystring = {"id": "499339900", "count": "1"} + headers = { + "X-RapidAPI-Key": Variable.get("RAPIDAPIAPI_KEY"), + "X-RapidAPI-Host": "twitter135.p.rapidapi.com", + } + webhook_url = Variable.get("DISCORD_POST_NOTIFICATION_WEBHOOK") + response = requests.get(url, headers=headers, params=querystring) + response_json = response.json() + try: + Session = sessionmaker(bind=settings.engine) + # Update the variable using a context manager + variable_key = "TWITTER_LATEST_REST_ID" + rest_id = response_json["data"]["user"]["result"]["timeline_v2"]["timeline"][ + "instructions" + ][1]["entries"][0]["content"]["itemContent"]["tweet_results"]["result"][ + "rest_id" + ] + full_text = response_json["data"]["user"]["result"]["timeline_v2"]["timeline"][ + "instructions" + ][1]["entries"][0]["content"]["itemContent"]["tweet_results"]["result"][ + "legacy" + ][ + "full_text" + ] + rest_id_in_DB = Variable.get(variable_key) + if rest_id_in_DB < rest_id: + # Create a session + session = Session() + + # Query the variable by key + variable = session.query(Variable).filter_by(key=variable_key).first() + + # Update the variable value + variable.set_val(rest_id) + + msg = f"new twitter post: https://twitter.com/PyConTW/status/{rest_id}\n\n{full_text}" + requests.post( + url=webhook_url, + json={"username": "Twitter Post Notification", "content": msg}, + ) + + # Commit the changes to the database + session.commit() + + # Close the session + session.close() + except Exception: + requests.post( + url=webhook_url, + json={ + "username": "Twitter Post Notification", + "content": str(response_json), + }, + ) From 9e61959e78fa824f302647efff15c975980e5851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Thu, 6 Jul 2023 01:50:13 +0800 Subject: [PATCH 77/89] [config]: lower the cadance of twitter bot (#122) --- dags/app/twitter_post_notification_bot/dag.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dags/app/twitter_post_notification_bot/dag.py b/dags/app/twitter_post_notification_bot/dag.py index fc42920..f9d7d51 100644 --- a/dags/app/twitter_post_notification_bot/dag.py +++ b/dags/app/twitter_post_notification_bot/dag.py @@ -16,9 +16,9 @@ } with DAG( - "TWITTER_POST_NOTIFICATION_BOT", + "TWITTER_POST_NOTIFICATION_BOT_V2", default_args=DEFAULT_ARGS, - schedule_interval="*/90 * * * *", + schedule_interval="@daily", max_active_runs=1, catchup=False, ) as dag: From d18249f52b625b458eff56bef22ab4ef42b4b8dc Mon Sep 17 00:00:00 2001 From: Angus Yang Date: Sat, 12 Aug 2023 17:45:27 +0800 Subject: [PATCH 78/89] [feature] (dag): integrate the script to kktix_loader.py in dag --- contrib/README.md | 3 +- contrib/kktix_bq_etl.sh | 2 +- .../udfs/kktix_bq_dwd_etl.py | 240 ++++++++++-------- .../kktix_ticket_orders/udfs/kktix_loader.py | 27 ++ 4 files changed, 169 insertions(+), 103 deletions(-) rename contrib/kktix_bq_etl.py => dags/ods/kktix_ticket_orders/udfs/kktix_bq_dwd_etl.py (86%) diff --git a/contrib/README.md b/contrib/README.md index 8190f75..dd4238f 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -23,5 +23,4 @@ 1. Background: Start from 2022, we extract the KKTIX data via KKTIX API and load to "pycontw-225217.ods.ods_kktix_attendeeId_datetime". However most of the data are store in the ATTENDEE_INFO column with json format. To use metabase with SQL, users need to extract the data by json_extract with the knowledge kktix format instead of flat database. And we also need to rewrite all the SQLs build for current databases. 2. Solution: Transform the tables in backend that we could keep the same user experience by using Metabase. 3. Run: - - `./kktix_bq_etl.py -t ods_kktix_ticket_reserved_attendees_test -k reserved -y 2023 --upload` - - for 3 tables: `./kktix_bq_etl.py 2023` + - for 3 tables in single bash script: `./kktix_bq_etl.sh 2023` diff --git a/contrib/kktix_bq_etl.sh b/contrib/kktix_bq_etl.sh index 876ba74..66fc4fc 100755 --- a/contrib/kktix_bq_etl.sh +++ b/contrib/kktix_bq_etl.sh @@ -3,7 +3,7 @@ # export GOOGLE_APPLICATION_CREDENTIALS="" # project_id="pycontw-225217" -cmd=${PWD}/kktix_bq_etl.py +cmd=${PWD}/../dags/ods/kktix_ticket_orders/udfs/kktix_bq_dwd_etl.py for ticket_type in corporate individual reserved diff --git a/contrib/kktix_bq_etl.py b/dags/ods/kktix_ticket_orders/udfs/kktix_bq_dwd_etl.py similarity index 86% rename from contrib/kktix_bq_etl.py rename to dags/ods/kktix_ticket_orders/udfs/kktix_bq_dwd_etl.py index 9f22f09..5d2239e 100755 --- a/contrib/kktix_bq_etl.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_bq_dwd_etl.py @@ -5,11 +5,12 @@ import logging import re from datetime import datetime -from typing import Dict, Set +from typing import Dict, Set, Tuple import numpy as np import pandas as pd from google.cloud import bigquery +from pandas import DataFrame CANONICAL_COLUMN_NAMES_CORE = { "paid_date", @@ -425,6 +426,127 @@ def hash_privacy_info(df: pd.DataFrame) -> None: JOB_CONFIG = bigquery.LoadJobConfig(schema=SCHEMA) +def _load_row_df_from_dict(json_dict, update_after_ts) -> DataFrame: + df_dict = pd.DataFrame([json_dict]) + + # We don't have paid_date column from ATTENDEE_INFO, convert the updated_at timestamp + timestamp = df_dict.loc[0, "updated_at"] + # filtering with timestamp if set + if update_after_ts: + if timestamp < update_after_ts: + return None + # print(timestamp) + dt_object = datetime.fromtimestamp(timestamp) + transc_date = dt_object.strftime("%Y-%m-%d") + # print(transc_date) + df_dict["paid_date"] = transc_date + + # ticket_type value is always "qrcode" here, and conflict with old table, + # kyc, id_number, slot value is always empty + # 'id','ticket_id','state','checkin_code', 'qrcode', updated_at, order_no no exist in old table + # data will be handle later + useless_columns = [ + "id", + "ticket_id", + "state", + "checkin_code", + # "qrcode", + "currency", + "data", + "ticket_type", + "kyc", + # "updated_at", + "id_number", + "slot", + "order_no", + ] + df_dict = df_dict.drop(columns=useless_columns) + df_dict = df_dict.rename( + columns={ + "reg_no": "registration_no", + "ticket_name": "ticket_type", + "is_paid": "payment_status", + } + ) + if "payment_status" in df_dict.columns: + if df_dict.loc[0, "payment_status"]: + # df_dict['payment_status'] = df_dict['payment_status'].astype("string") + df_dict.loc[0, "payment_status"] = "paid" + else: + df_dict.loc[0, "payment_status"] = "not" + # json_dict['data'] in format of [[item_name, item_value],[],...] + data_list = json_dict["data"] + column_list = [dl[0] for dl in data_list] + value_list = [dl[1] for dl in data_list] + # print(len(column_list)) + # print(value_list) + df_data = pd.DataFrame() + df_data[column_list] = [value_list] + + df_dict = pd.concat([df_dict, df_data], axis=1) + return df_dict + + +def load_to_df_from_list( + results, source="dag", update_after_ts=0 +) -> Tuple[DataFrame, DataFrame]: + # Use DataFrame for table transform operations + df = pd.DataFrame() + attendee_info_str = "attendee_info" + if source == "bigquery": + attendee_info_str = attendee_info_str.upper() + for row in results: + json_dict = json.loads( + row[attendee_info_str] + ) # The name will be uppercase if the results was from bg + df_dict = _load_row_df_from_dict(json_dict, update_after_ts) + if df_dict is not None: + df = pd.concat([df, df_dict], ignore_index=True) + + if len(df.index) == 0: + return df, df + + # print(df.columns) + sanitized_df = sanitize_column_names(df) + # The privacy info in "pycontw-225217.ods.ods_kktix_attendeeId_datetime" had already hashed + # hash_privacy_info(sanitized_df) + + # Group the columns with the same purposes and names + sanitized_df = ( + sanitized_df.replace("null", np.nan) + .groupby(sanitized_df.columns, axis=1, sort=False) + .first() + ) + + # For columns with FLOAT type in BigQuery table schema, do pd.to_numeric to handle empty string (convert to NaN) + num_columns = [ + "price", + "invoice_policy", + "if_you_buy_the_ticket_with_pyckage", + "vat_number_optional", + ] + for col in num_columns: + if col in sanitized_df.columns: + sanitized_df[[col]] = sanitized_df[[col]].apply(pd.to_numeric) + + # Drop privacy, duplicated or temp columns + priv_columns = [ + "nickname", + "address_size_of_tshirt_t", + ] + for col in priv_columns: + if col in sanitized_df.columns: + sanitized_df = sanitized_df.drop(columns=[col]) + + # print(sanitized_df.iloc[:, :5]) + # Keep the latest update record with registration_no as the unique key + sanitized_df = sanitized_df.sort_values(by=["updated_at"]) + sanitized_df = sanitized_df.drop_duplicates(subset=["registration_no"], keep="last") + sanitized_df = sanitized_df.set_index("registration_no") + + return df, sanitized_df + + def main(): # Set the default project ID and dataset ID @@ -432,7 +554,8 @@ def main(): dataset_id = "ods" table_id = "your-table-id" ticket_type: str = "corporate" - ticket_year: str = "2022" + ticket_year: str = "2023" + update_after_ts = 0 """ Commandline entrypoint """ @@ -458,6 +581,8 @@ def main(): parser.add_argument("-y", "--ticket-year", help="PyConTW year") + parser.add_argument("-f", "--update-after", help="TimeStamp filter") + parser.add_argument( "--upload", action="store_true", @@ -477,6 +602,13 @@ def main(): ticket_type = args.ticket_type if args.ticket_year: ticket_year = args.ticket_year + if args.update_after: + # update_after = args.update_after + # dt_string = "2018-1-1 09:15:32" + # Considering date is in dd/mm/yyyy format + dt_object = datetime.strptime(args.update_after, "%Y-%m-%d %H:%M:%S") + ticket_year = dt_object.year + update_after_ts = datetime.timestamp(dt_object) # Set up the client object client = bigquery.Client(project=project_id) @@ -500,106 +632,14 @@ def main(): job = client.query(query, job_config=job_config) results = job.result() - # print(results) + # Don't iterate results before load_to_df_from_list, need copy first + # res_clone = copy.copy(results) + # print(res_clone) print(f"Extracted from {TABLE} successful.") - # Use DataFrame for table transform operations - df = pd.DataFrame() - for row in results: - json_dict = json.loads(row["ATTENDEE_INFO"]) - df_dict = pd.DataFrame([json_dict]) - - # We don't have paid_date column from ATTENDEE_INFO, convert the updated_at timestamp - timestamp = df_dict.loc[0, "updated_at"] - # print(timestamp) - dt_object = datetime.fromtimestamp(timestamp) - transc_date = dt_object.strftime("%Y-%m-%d") - # print(transc_date) - df_dict["paid_date"] = transc_date - - # ticket_type value is always "qrcode" here, and conflict with old table, - # kyc, id_number, slot value is always empty - # 'id','ticket_id','state','checkin_code', 'qrcode', updated_at, order_no no exist in old table - # data will be handle later - useless_columns = [ - "id", - "ticket_id", - "state", - "checkin_code", - "qrcode", - "currency", - "data", - "ticket_type", - "kyc", - # "updated_at", - "id_number", - "slot", - "order_no", - ] - df_dict = df_dict.drop(columns=useless_columns) - df_dict = df_dict.rename( - columns={ - "reg_no": "registration_no", - "ticket_name": "ticket_type", - "is_paid": "payment_status", - } - ) - if "payment_status" in df_dict.columns: - if df_dict.loc[0, "payment_status"]: - # df_dict['payment_status'] = df_dict['payment_status'].astype("string") - df_dict.loc[0, "payment_status"] = "paid" - else: - df_dict.loc[0, "payment_status"] = "not" - # json_dict['data'] in format of [[item_name, item_value],[],...] - data_list = json_dict["data"] - column_list = [dl[0] for dl in data_list] - value_list = [dl[1] for dl in data_list] - # print(len(column_list)) - # print(value_list) - df_data = pd.DataFrame() - df_data[column_list] = [value_list] - - df_dict = pd.concat([df_dict, df_data], axis=1) - df = pd.concat([df, df_dict], ignore_index=True) - - # print(df.columns) - sanitized_df = sanitize_column_names(df) - # The privacy info in "pycontw-225217.ods.ods_kktix_attendeeId_datetime" had already hashed - # hash_privacy_info(sanitized_df) - - # Group the columns with the same purposes and names - sanitized_df = ( - sanitized_df.replace("null", np.nan) - .groupby(sanitized_df.columns, axis=1, sort=False) - .first() - ) - - # For columns with FLOAT type in BigQuery table schema, do pd.to_numeric to handle empty string (convert to NaN) - num_columns = [ - "price", - "invoice_policy", - "if_you_buy_the_ticket_with_pyckage", - "vat_number_optional", - ] - for col in num_columns: - if col in sanitized_df.columns: - sanitized_df[[col]] = sanitized_df[[col]].apply(pd.to_numeric) - - # Drop privacy, duplicated or temp columns - priv_columns = [ - "nickname", - "address_size_of_tshirt_t", - ] - for col in priv_columns: - if col in sanitized_df.columns: - sanitized_df = sanitized_df.drop(columns=[col]) - - # Keep the latest update record with registration_no as the unique key - sanitized_df = sanitized_df.sort_values(by=["updated_at"]) - sanitized_df = sanitized_df.drop_duplicates(subset=["registration_no"], keep="last") - sanitized_df = sanitized_df.set_index("registration_no") - + # load to DataFrame for later bigquery upload from the extracted results + df, sanitized_df = load_to_df_from_list(results, "bigquery", update_after_ts) # print(sanitized_df.columns) # print(sanitized_df.head()) # df_null = sanitized_df.isnull() @@ -617,7 +657,7 @@ def main(): logging.info("") logging.info("Column names (to-be):") logging.info(sanitized_df.columns) - # print(sanitized_df.iloc[:, :5]) + print(sanitized_df.iloc[:, :5]) # print(sanitized_df[['paid_date', 'payment_status', 'email']]) return sanitized_df.columns diff --git a/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py index d36cd39..48808f0 100644 --- a/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py +++ b/dags/ods/kktix_ticket_orders/udfs/kktix_loader.py @@ -1,9 +1,11 @@ +import collections import json import os from typing import Dict, List import pandas as pd from google.cloud import bigquery +from ods.kktix_ticket_orders.udfs import kktix_bq_dwd_etl from ods.kktix_ticket_orders.udfs.bigquery_loader import TABLE SCHEMA = [ @@ -28,6 +30,7 @@ def load(event_raw_data_array: List): sanitized_event_raw_data = _sanitize_payload(event_raw_data) payload.append(sanitized_event_raw_data) _load_to_bigquery(payload) + _load_to_bigquery_dwd(payload) def _load_to_bigquery(payload: List[Dict]) -> None: @@ -43,6 +46,30 @@ def _load_to_bigquery(payload: List[Dict]) -> None: job.result() +def _load_to_bigquery_dwd(payload: List[Dict]) -> None: + """ + load data to BigQuery's `TABLE` + """ + # Spilt payload to dict lists by ticket group + ticket_groups = ["corporate", "individual", "reserved"] + dol = collections.defaultdict(list) + for d in payload: + for tg in ticket_groups: + if tg in d["name"].lower(): + dol[tg].append(d) + + print(dol[tg]) + project_id = os.getenv("BIGQUERY_PROJECT") + dataset_id = "dwd" + for tg in ticket_groups: + if len(dol[tg]) > 0: + _, sanitized_df = kktix_bq_dwd_etl.load_to_df_from_list(dol[tg]) + table_id = f"kktix_ticket_{tg}_attendees" + kktix_bq_dwd_etl.upload_dataframe_to_bigquery( + sanitized_df, project_id, dataset_id, table_id + ) + + def _sanitize_payload(event_raw_data) -> Dict: """ BigQuery has some constraints for nested data type From 9fbbcc9e9b009cd422b7440043796cd818da0efc Mon Sep 17 00:00:00 2001 From: "Chao-Hung, Wan" Date: Sat, 26 Aug 2023 15:39:36 +0800 Subject: [PATCH 79/89] (feat)set up finance bot udf --- dags/app/finance_bot/__init__.py | 0 dags/app/finance_bot/dag.py | 0 dags/app/finance_bot/udf.py | 89 +++++++++++++++ poetry.lock | 184 +++++++++++++++---------------- pyproject.toml | 1 + 5 files changed, 176 insertions(+), 98 deletions(-) create mode 100644 dags/app/finance_bot/__init__.py create mode 100644 dags/app/finance_bot/dag.py create mode 100644 dags/app/finance_bot/udf.py diff --git a/dags/app/finance_bot/__init__.py b/dags/app/finance_bot/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dags/app/finance_bot/dag.py b/dags/app/finance_bot/dag.py new file mode 100644 index 0000000..e69de29 diff --git a/dags/app/finance_bot/udf.py b/dags/app/finance_bot/udf.py new file mode 100644 index 0000000..94ca182 --- /dev/null +++ b/dags/app/finance_bot/udf.py @@ -0,0 +1,89 @@ +import pygsheets +import numpy as np +from google.cloud import bigquery +import pandas as pd +import requests +import os +from app import discord + + +session = requests.session() + + +def main(): + # read xls from google doc to df. + df_xls = read_google_xls_to_df() + # read bigquery to df. + df_bigquery = read_bigquery_to_df() + # check difference between 2 df + df_diff = df_difference(df_xls, df_bigquery) + # link to bigquery and write xls file + write_to_bigquery(df_diff) + # push to discord + webhook_url = os.getenv('discord_data_stratagy_webhook') + username = '財務機器人' + msg = refine_diff_df_to_string(df_diff) + discord.send_webhook_message(webhook_url, username, msg) + + +def df_difference(df_xls, df_bigquery): + merged = pd.merge(df_xls, df_bigquery, how='outer', indicator=True) + return merged[merged['_merge'] == 'left_only'].drop('_merge', axis=1) + + +def read_bigquery_to_df(): + client = bigquery.Client() + query = """ + SELECT * + FROM `pycontw-225217.test.pycontw_finance` + """ + query_job = client.query(query) + results = query_job.result() + schema = results.schema + column_names = [field.name for field in schema] + data = [list(row.values()) for row in results] + df = pd.DataFrame(data=data, columns=column_names) + + return df + + +def read_google_xls_to_df(): + gc = pygsheets.authorize(service_file=os.getenv('GOOGLE_APPLICATION_CREDENTIALS')) + sheet = gc.open_by_url(os.getenv('finance_xls_path')) + wks = sheet.sheet1 + df = wks.get_as_df(include_tailing_empty=False) + df.replace('', np.nan, inplace=True) + df.dropna(inplace=True) + df = df.astype(str) + df.columns = ['Reason', 'Price', 'Remarks', 'Team_name', 'Details', 'To_who', 'Yes_or_No'] + return df + + +def write_to_bigquery(df): + project_id = 'pycontw-225217' + dataset_id = 'test' + table_id = 'pycontw_finance' + client = bigquery.Client(project=project_id) + table = client.dataset(dataset_id).table(table_id) + schema = [ + bigquery.SchemaField("Reason", "STRING", mode="REQUIRED"), + bigquery.SchemaField("Price", "STRING", mode="REQUIRED"), + bigquery.SchemaField("Remarks", "STRING", mode="REQUIRED"), + bigquery.SchemaField("Team_name", "STRING", mode="REQUIRED"), + bigquery.SchemaField("Details", "STRING", mode="REQUIRED"), + bigquery.SchemaField("To_who", "STRING", mode="REQUIRED"), + bigquery.SchemaField("Yes_or_No", "STRING", mode="REQUIRED"), + ] + job_config = bigquery.LoadJobConfig(schema=schema) + job = client.load_table_from_dataframe(df, table, job_config=job_config) + job.result() + + +def refine_diff_df_to_string(df): + msg = '' + if df.empty: + return "no data" + else: + for row in df.itertuples(index=False): + msg += f"{row[0]}, 花費: {row[1]}, {row[3]}, {row[4]}\n" + return msg \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 0bb4626..0533e4c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -416,11 +416,11 @@ optional = false python-versions = ">=3.6" [package.extras] -trio = ["sniffio (>=1.1)", "trio (>=0.14.0)"] -curio = ["sniffio (>=1.1)", "curio (>=1.2)"] -idna = ["idna (>=2.1)"] -doh = ["requests-toolbelt", "requests"] dnssec = ["cryptography (>=2.6)"] +doh = ["requests", "requests-toolbelt"] +idna = ["idna (>=2.1)"] +curio = ["curio (>=1.2)", "sniffio (>=1.1)"] +trio = ["trio (>=0.14.0)", "sniffio (>=1.1)"] [[package]] name = "docutils" @@ -487,9 +487,9 @@ Jinja2 = ">=2.10.1,<3.0" Werkzeug = ">=0.15,<2.0" [package.extras] +dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"] +docs = ["sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"] dotenv = ["python-dotenv"] -docs = ["sphinx-issues", "sphinxcontrib-log-cabinet", "pallets-sphinx-themes", "sphinx"] -dev = ["sphinx-issues", "sphinxcontrib-log-cabinet", "pallets-sphinx-themes", "sphinx", "tox", "coverage", "pytest"] [[package]] name = "flask-admin" @@ -693,56 +693,61 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.10\" [[package]] name = "google-api-core" -version = "2.0.0" +version = "2.11.1" description = "Google API client core library" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -google-auth = ">=1.25.0,<3.0dev" -googleapis-common-protos = ">=1.6.0,<2.0dev" +google-auth = ">=2.14.1,<3.0.dev0" +googleapis-common-protos = ">=1.56.2,<2.0.dev0" grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} -protobuf = ">=3.12.0" -requests = ">=2.18.0,<3.0.0dev" +grpcio-status = {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""} +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" +requests = ">=2.18.0,<3.0.0.dev0" [package.extras] -grpcio-gcp = ["grpcio-gcp (>=0.2.2)"] -grpcgcp = ["grpcio-gcp (>=0.2.2)"] -grpc = ["grpcio (>=1.33.2,<2.0dev)"] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.49.1,<2.0.dev0)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.17.0" +version = "2.96.0" description = "Google API Client Library for Python" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -google-api-core = ">=1.21.0,<3.0.0dev" -google-auth = ">=1.16.0,<3.0.0dev" +google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0.dev0" +google-auth = ">=1.19.0,<3.0.0.dev0" google-auth-httplib2 = ">=0.1.0" -httplib2 = ">=0.15.0,<1dev" -uritemplate = ">=3.0.0,<4dev" +httplib2 = ">=0.15.0,<1.dev0" +uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.0.1" +version = "2.22.0" description = "Google Authentication Library" category = "main" optional = false -python-versions = ">= 3.6" +python-versions = ">=3.6" [package.dependencies] -cachetools = ">=2.0.0,<5.0" +cachetools = ">=2.0.0,<6.0" pyasn1-modules = ">=0.2.1" rsa = ">=3.1.4,<5" +six = ">=1.9.0" +urllib3 = "<2.0" [package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise_cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["pyopenssl (>=20.0.0)", "cryptography (>=38.0.3)"] reauth = ["pyu2f (>=0.1.5)"] -pyopenssl = ["pyopenssl (>=20.0.0)"] -aiohttp = ["requests (>=2.20.0,<3.0.0dev)", "aiohttp (>=3.6.2,<4.0.0dev)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] [[package]] name = "google-auth-httplib2" @@ -759,14 +764,14 @@ six = "*" [[package]] name = "google-auth-oauthlib" -version = "0.4.5" +version = "1.0.0" description = "Google Authentication Library" category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -google-auth = ">=1.0.0" +google-auth = ">=2.15.0" requests-oauthlib = ">=0.7.0" [package.extras] @@ -839,22 +844,22 @@ python-versions = ">= 3.6" google-crc32c = ">=1.0,<2.0dev" [package.extras] -requests = ["requests (>=2.18.0,<3.0.0dev)"] aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"] +requests = ["requests (>=2.18.0,<3.0.0dev)"] [[package]] name = "googleapis-common-protos" -version = "1.53.0" +version = "1.60.0" description = "Common protobufs used in Google APIs" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -protobuf = ">=3.12.0" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" [package.extras] -grpc = ["grpcio (>=1.0.0)"] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] [[package]] name = "graphviz" @@ -883,6 +888,19 @@ six = ">=1.5.2" [package.extras] protobuf = ["grpcio-tools (>=1.39.0)"] +[[package]] +name = "grpcio-status" +version = "1.39.0" +description = "Status proto mapping for gRPC" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +googleapis-common-protos = ">=1.5.5" +grpcio = ">=1.39.0" +protobuf = ">=3.6.0" + [[package]] name = "gunicorn" version = "20.1.0" @@ -928,8 +946,8 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" zipp = ">=0.5" [package.extras] -testing = ["importlib-resources (>=1.3)", "unittest2", "pep517", "packaging"] -docs = ["rst.linker", "sphinx"] +docs = ["sphinx", "rst.linker"] +testing = ["packaging", "pep517", "unittest2", "importlib-resources (>=1.3)"] [[package]] name = "iso8601" @@ -948,10 +966,10 @@ optional = false python-versions = ">=3.6.1,<4.0" [package.extras] -plugins = ["setuptools"] -colors = ["colorama (>=0.4.3,<0.5.0)"] pipfile_deprecated_finder = ["pipreqs", "requirementslib"] requirements_deprecated_finder = ["pipreqs", "pip-api"] +colors = ["colorama (>=0.4.3,<0.5.0)"] +plugins = ["setuptools"] [[package]] name = "itsdangerous" @@ -1247,7 +1265,7 @@ python-versions = "*" six = "*" [package.extras] -dev = ["twine", "pipreqs", "nose"] +dev = ["nose", "pipreqs", "twine"] [[package]] name = "proto-plus" @@ -1265,14 +1283,11 @@ testing = ["google-api-core[grpc] (>=1.22.2)"] [[package]] name = "protobuf" -version = "3.17.3" -description = "Protocol Buffers" +version = "4.24.0" +description = "" category = "main" optional = false -python-versions = "*" - -[package.dependencies] -six = ">=1.9" +python-versions = ">=3.7" [[package]] name = "psutil" @@ -1370,6 +1385,21 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "pygsheets" +version = "2.0.6" +description = "Google Spreadsheets Python API v4" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +google-api-python-client = ">=2.50.0" +google-auth-oauthlib = ">=0.7.1" + +[package.extras] +pandas = ["pandas (>=0.14.0)"] + [[package]] name = "pyjwt" version = "1.7.1" @@ -1451,7 +1481,7 @@ docutils = "*" lockfile = ">=0.10" [package.extras] -test = ["testtools", "testscenarios (>=0.4)", "docutils", "coverage"] +test = ["coverage", "docutils", "testscenarios (>=0.4)", "testtools"] [[package]] name = "python-dateutil" @@ -1941,7 +1971,7 @@ test = ["zope.testrunner"] [metadata] lock-version = "1.1" python-versions = "^3.7.1" -content-hash = "38ed366f6d7284daf57ee9fb3ca13ee3ef37456d780d86534980f9419e647d35" +content-hash = "c16f459e10c57d3db505e84eb2e1c8b1a6cc273f436f2916255ac1d2d1fca33d" [metadata.files] alembic = [] @@ -1958,10 +1988,7 @@ cached-property = [] cachelib = [] cachetools = [] cattrs = [] -certifi = [ - {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"}, - {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"}, -] +certifi = [] cffi = [] charset-normalizer = [] click = [] @@ -2005,12 +2032,10 @@ google-resumable-media = [] googleapis-common-protos = [] graphviz = [] grpcio = [] +grpcio-status = [] gunicorn = [] httplib2 = [] -idna = [ - {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"}, - {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, -] +idna = [] importlib-metadata = [] iso8601 = [] isort = [] @@ -2047,37 +2072,12 @@ py = [] pyarrow = [] pyasn1 = [] pyasn1-modules = [] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] +pycodestyle = [] pycparser = [] -pydantic = [ - {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:589eb6cd6361e8ac341db97602eb7f354551482368a37f4fd086c0733548308e"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:10e5622224245941efc193ad1d159887872776df7a8fd592ed746aa25d071840"}, - {file = "pydantic-1.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:99a9fc39470010c45c161a1dc584997f1feb13f689ecf645f59bb4ba623e586b"}, - {file = "pydantic-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a83db7205f60c6a86f2c44a61791d993dff4b73135df1973ecd9eed5ea0bda20"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:41b542c0b3c42dc17da70554bc6f38cbc30d7066d2c2815a94499b5684582ecb"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:ea5cb40a3b23b3265f6325727ddfc45141b08ed665458be8c6285e7b85bd73a1"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:18b5ea242dd3e62dbf89b2b0ec9ba6c7b5abaf6af85b95a97b00279f65845a23"}, - {file = "pydantic-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:234a6c19f1c14e25e362cb05c68afb7f183eb931dd3cd4605eafff055ebbf287"}, - {file = "pydantic-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:021ea0e4133e8c824775a0cfe098677acf6fa5a3cbf9206a376eed3fc09302cd"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e710876437bc07bd414ff453ac8ec63d219e7690128d925c6e82889d674bb505"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:ac8eed4ca3bd3aadc58a13c2aa93cd8a884bcf21cb019f8cfecaae3b6ce3746e"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4a03cbbe743e9c7247ceae6f0d8898f7a64bb65800a45cbdc52d65e370570820"}, - {file = "pydantic-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:8621559dcf5afacf0069ed194278f35c255dc1a1385c28b32dd6c110fd6531b3"}, - {file = "pydantic-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b223557f9510cf0bfd8b01316bf6dd281cf41826607eada99662f5e4963f316"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:244ad78eeb388a43b0c927e74d3af78008e944074b7d0f4f696ddd5b2af43c62"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:05ef5246a7ffd2ce12a619cbb29f3307b7c4509307b1b49f456657b43529dc6f"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:54cd5121383f4a461ff7644c7ca20c0419d58052db70d8791eacbbe31528916b"}, - {file = "pydantic-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:4be75bebf676a5f0f87937c6ddb061fa39cbea067240d98e298508c1bda6f3f3"}, - {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"}, - {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, -] +pydantic = [] pyflakes = [] pygments = [] +pygsheets = [] pyjwt = [] pyparsing = [] pyrsistent = [] @@ -2085,10 +2085,7 @@ pytest = [] pytest-cov = [] python-daemon = [] python-dateutil = [] -python-dotenv = [ - {file = "python-dotenv-0.18.0.tar.gz", hash = "sha256:effaac3c1e58d89b3ccb4d04a40dc7ad6e0275fda25fd75ae9d323e2465e202d"}, - {file = "python_dotenv-0.18.0-py2.py3-none-any.whl", hash = "sha256:dd8fe852847f4fbfadabf6183ddd4c824a9651f02d51714fa075c95561959c7d"}, -] +python-dotenv = [] python-editor = [] python-fb-page-insights-client = [] python-nvd3 = [] @@ -2098,10 +2095,7 @@ pytz = [] pytzdata = [] pyyaml = [] regex = [] -requests = [ - {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, - {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, -] +requests = [] requests-oauthlib = [] rsa = [] safety = [] @@ -2119,19 +2113,13 @@ tenacity = [] text-unidecode = [] thrift = [] tinydb = [] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] +toml = [] typed-ast = [] typing-extensions = [] tzlocal = [] unicodecsv = [] uritemplate = [] -urllib3 = [ - {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"}, - {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"}, -] +urllib3 = [] wcwidth = [] werkzeug = [] wtforms = [] diff --git a/pyproject.toml b/pyproject.toml index 50debdd..c2a0c62 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ StrEnum = "^0.4.6" python-fb-page-insights-client = {git = "https://github.com/pycontw/python-fb-page-insights-client.git", rev = "bd221ff"} Flask-OAuthlib = "^0.9.6" Flask-OpenID = "1.3.0" +pygsheets = "^2.0.6" [tool.poetry.dev-dependencies] safety = "^1.9.0" From 5132a23b6898ff1fc1fcece7cd4c2eacd1e106a1 Mon Sep 17 00:00:00 2001 From: "Chao-Hung, Wan" Date: Sat, 26 Aug 2023 16:23:37 +0800 Subject: [PATCH 80/89] feat(apps) set up finance table dag --- dags/app/finance_bot/dag.py | 31 +++++++++++++++++++++++++++++++ dags/app/finance_bot/udf.py | 12 ++++++------ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/dags/app/finance_bot/dag.py b/dags/app/finance_bot/dag.py index e69de29..d7ea928 100644 --- a/dags/app/finance_bot/dag.py +++ b/dags/app/finance_bot/dag.py @@ -0,0 +1,31 @@ +""" +Send Google Search Report to Discord +""" +from datetime import datetime, timedelta + +from airflow import DAG +from airflow.operators.python_operator import PythonOperator +from app.finance import udf + +DEFAULT_ARGS = { + "owner": "qchwan", + "depends_on_past": False, + "start_date": datetime(2023, 8, 27), + "retries": 2, + "retry_delay": timedelta(minutes=5), + "on_failure_callback": lambda x: "Need to send notification to Discord", +} +dag = DAG( + "DISCORD_CHORES_REMINDER", + default_args=DEFAULT_ARGS, + schedule_interval="@daily", + max_active_runs=1, + catchup=False, +) +with dag: + REMINDER_OF_THIS_TEAM = PythonOperator( + task_id="FINANCE_REMINDER", python_callable=udf.main + ) + +if __name__ == "__main__": + dag.cli() diff --git a/dags/app/finance_bot/udf.py b/dags/app/finance_bot/udf.py index 94ca182..8e7bd1c 100644 --- a/dags/app/finance_bot/udf.py +++ b/dags/app/finance_bot/udf.py @@ -10,7 +10,7 @@ session = requests.session() -def main(): +def main() -> None: # read xls from google doc to df. df_xls = read_google_xls_to_df() # read bigquery to df. @@ -26,12 +26,12 @@ def main(): discord.send_webhook_message(webhook_url, username, msg) -def df_difference(df_xls, df_bigquery): +def df_difference(df_xls, df_bigquery) -> pd.DataFrame: merged = pd.merge(df_xls, df_bigquery, how='outer', indicator=True) return merged[merged['_merge'] == 'left_only'].drop('_merge', axis=1) -def read_bigquery_to_df(): +def read_bigquery_to_df() -> pd.DataFrame: client = bigquery.Client() query = """ SELECT * @@ -47,7 +47,7 @@ def read_bigquery_to_df(): return df -def read_google_xls_to_df(): +def read_google_xls_to_df() -> pd.DataFrame: gc = pygsheets.authorize(service_file=os.getenv('GOOGLE_APPLICATION_CREDENTIALS')) sheet = gc.open_by_url(os.getenv('finance_xls_path')) wks = sheet.sheet1 @@ -59,7 +59,7 @@ def read_google_xls_to_df(): return df -def write_to_bigquery(df): +def write_to_bigquery(df) -> None: project_id = 'pycontw-225217' dataset_id = 'test' table_id = 'pycontw_finance' @@ -79,7 +79,7 @@ def write_to_bigquery(df): job.result() -def refine_diff_df_to_string(df): +def refine_diff_df_to_string(df) -> Text: msg = '' if df.empty: return "no data" From c974088a7b97c3b8eee53106fc8f93c169f3efb1 Mon Sep 17 00:00:00 2001 From: "Chao-Hung, Wan" Date: Sat, 26 Aug 2023 20:28:46 +0800 Subject: [PATCH 81/89] (feat)finance udf black done --- dags/app/finance_bot/udf.py | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/dags/app/finance_bot/udf.py b/dags/app/finance_bot/udf.py index 8e7bd1c..745ec05 100644 --- a/dags/app/finance_bot/udf.py +++ b/dags/app/finance_bot/udf.py @@ -20,15 +20,15 @@ def main() -> None: # link to bigquery and write xls file write_to_bigquery(df_diff) # push to discord - webhook_url = os.getenv('discord_data_stratagy_webhook') - username = '財務機器人' + webhook_url = os.getenv("discord_data_stratagy_webhook") + username = "財務機器人" msg = refine_diff_df_to_string(df_diff) discord.send_webhook_message(webhook_url, username, msg) def df_difference(df_xls, df_bigquery) -> pd.DataFrame: - merged = pd.merge(df_xls, df_bigquery, how='outer', indicator=True) - return merged[merged['_merge'] == 'left_only'].drop('_merge', axis=1) + merged = pd.merge(df_xls, df_bigquery, how="outer", indicator=True) + return merged[merged["_merge"] == "left_only"].drop("_merge", axis=1) def read_bigquery_to_df() -> pd.DataFrame: @@ -48,21 +48,29 @@ def read_bigquery_to_df() -> pd.DataFrame: def read_google_xls_to_df() -> pd.DataFrame: - gc = pygsheets.authorize(service_file=os.getenv('GOOGLE_APPLICATION_CREDENTIALS')) - sheet = gc.open_by_url(os.getenv('finance_xls_path')) + gc = pygsheets.authorize(service_file=os.getenv("GOOGLE_APPLICATION_CREDENTIALS")) + sheet = gc.open_by_url(os.getenv("finance_xls_path")) wks = sheet.sheet1 df = wks.get_as_df(include_tailing_empty=False) - df.replace('', np.nan, inplace=True) + df.replace("", np.nan, inplace=True) df.dropna(inplace=True) df = df.astype(str) - df.columns = ['Reason', 'Price', 'Remarks', 'Team_name', 'Details', 'To_who', 'Yes_or_No'] + df.columns = [ + "Reason", + "Price", + "Remarks", + "Team_name", + "Details", + "To_who", + "Yes_or_No", + ] return df def write_to_bigquery(df) -> None: - project_id = 'pycontw-225217' - dataset_id = 'test' - table_id = 'pycontw_finance' + project_id = "pycontw-225217" + dataset_id = "test" + table_id = "pycontw_finance" client = bigquery.Client(project=project_id) table = client.dataset(dataset_id).table(table_id) schema = [ @@ -80,10 +88,10 @@ def write_to_bigquery(df) -> None: def refine_diff_df_to_string(df) -> Text: - msg = '' + msg = "" if df.empty: return "no data" else: for row in df.itertuples(index=False): msg += f"{row[0]}, 花費: {row[1]}, {row[3]}, {row[4]}\n" - return msg \ No newline at end of file + return msg From 3d83ba815ea269ce49d5a716ce9cd68af7a992ac Mon Sep 17 00:00:00 2001 From: "Chao-Hung, Wan" Date: Mon, 25 Sep 2023 01:04:42 +0800 Subject: [PATCH 82/89] fix npm check --- dags/app/finance_bot/udf.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dags/app/finance_bot/udf.py b/dags/app/finance_bot/udf.py index 745ec05..40d544e 100644 --- a/dags/app/finance_bot/udf.py +++ b/dags/app/finance_bot/udf.py @@ -1,11 +1,11 @@ -import pygsheets +import os + import numpy as np -from google.cloud import bigquery import pandas as pd +import pygsheets import requests -import os from app import discord - +from google.cloud import bigquery session = requests.session() @@ -87,7 +87,7 @@ def write_to_bigquery(df) -> None: job.result() -def refine_diff_df_to_string(df) -> Text: +def refine_diff_df_to_string(df) -> str: msg = "" if df.empty: return "no data" From dd062438852193c7c5399a510bdc1f1eb34548e6 Mon Sep 17 00:00:00 2001 From: "Chao-Hung, Wan" Date: Mon, 25 Sep 2023 12:58:11 +0800 Subject: [PATCH 83/89] block noise information --- dags/app/finance_bot/udf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dags/app/finance_bot/udf.py b/dags/app/finance_bot/udf.py index 40d544e..e14c65a 100644 --- a/dags/app/finance_bot/udf.py +++ b/dags/app/finance_bot/udf.py @@ -23,7 +23,8 @@ def main() -> None: webhook_url = os.getenv("discord_data_stratagy_webhook") username = "財務機器人" msg = refine_diff_df_to_string(df_diff) - discord.send_webhook_message(webhook_url, username, msg) + if msg != "no data": + discord.send_webhook_message(webhook_url, username, msg) def df_difference(df_xls, df_bigquery) -> pd.DataFrame: From 659e23f5062ea62c941a9185cd2d8281880436cb Mon Sep 17 00:00:00 2001 From: "Chao-Hung, Wan" Date: Mon, 25 Sep 2023 23:57:27 +0800 Subject: [PATCH 84/89] fix udf import --- dags/app/finance_bot/dag.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dags/app/finance_bot/dag.py b/dags/app/finance_bot/dag.py index d7ea928..39ddae3 100644 --- a/dags/app/finance_bot/dag.py +++ b/dags/app/finance_bot/dag.py @@ -5,7 +5,7 @@ from airflow import DAG from airflow.operators.python_operator import PythonOperator -from app.finance import udf +from app.finance_bot import udf DEFAULT_ARGS = { "owner": "qchwan", From e2170a5e616ddc5d5629e4e41c4ac8cdaa4709bb Mon Sep 17 00:00:00 2001 From: "Chao-Hung, Wan" Date: Tue, 26 Sep 2023 02:09:25 +0800 Subject: [PATCH 85/89] fix task name --- dags/app/finance_bot/dag.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dags/app/finance_bot/dag.py b/dags/app/finance_bot/dag.py index 39ddae3..138b704 100644 --- a/dags/app/finance_bot/dag.py +++ b/dags/app/finance_bot/dag.py @@ -16,7 +16,7 @@ "on_failure_callback": lambda x: "Need to send notification to Discord", } dag = DAG( - "DISCORD_CHORES_REMINDER", + "DISCORD_FINANCE_REMINDER", default_args=DEFAULT_ARGS, schedule_interval="@daily", max_active_runs=1, From 59798e19a8f107132ab442690592d1e61803523e Mon Sep 17 00:00:00 2001 From: "Chao-Hung, Wan" Date: Sat, 7 Oct 2023 18:10:54 +0800 Subject: [PATCH 86/89] fix variable --- dags/app/finance_bot/udf.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dags/app/finance_bot/udf.py b/dags/app/finance_bot/udf.py index e14c65a..31cb6ce 100644 --- a/dags/app/finance_bot/udf.py +++ b/dags/app/finance_bot/udf.py @@ -4,6 +4,7 @@ import pandas as pd import pygsheets import requests +from airflow.models import Variable from app import discord from google.cloud import bigquery @@ -20,7 +21,7 @@ def main() -> None: # link to bigquery and write xls file write_to_bigquery(df_diff) # push to discord - webhook_url = os.getenv("discord_data_stratagy_webhook") + webhook_url = Variable.get("discord_data_stratagy_webhook") username = "財務機器人" msg = refine_diff_df_to_string(df_diff) if msg != "no data": @@ -50,7 +51,7 @@ def read_bigquery_to_df() -> pd.DataFrame: def read_google_xls_to_df() -> pd.DataFrame: gc = pygsheets.authorize(service_file=os.getenv("GOOGLE_APPLICATION_CREDENTIALS")) - sheet = gc.open_by_url(os.getenv("finance_xls_path")) + sheet = gc.open_by_url(Variable.get("finance_xls_path")) wks = sheet.sheet1 df = wks.get_as_df(include_tailing_empty=False) df.replace("", np.nan, inplace=True) From a6f5fd806f2a0e50f9150dec234b9eeb8efec1c6 Mon Sep 17 00:00:00 2001 From: "Chao-Hung, Wan" Date: Sun, 8 Oct 2023 00:00:31 +0800 Subject: [PATCH 87/89] fix discord no information --- dags/app/finance_bot/udf.py | 12 +- package-lock.json | 9779 +++++++++++++++++------------------ package.json | 6 +- 3 files changed, 4620 insertions(+), 5177 deletions(-) diff --git a/dags/app/finance_bot/udf.py b/dags/app/finance_bot/udf.py index e14c65a..21f8ed6 100644 --- a/dags/app/finance_bot/udf.py +++ b/dags/app/finance_bot/udf.py @@ -20,11 +20,13 @@ def main() -> None: # link to bigquery and write xls file write_to_bigquery(df_diff) # push to discord - webhook_url = os.getenv("discord_data_stratagy_webhook") - username = "財務機器人" - msg = refine_diff_df_to_string(df_diff) - if msg != "no data": - discord.send_webhook_message(webhook_url, username, msg) + kwargs = { + "webhook_url": Variable.get("discord_data_stratagy_webhook"), + "username": "財務機器人", + "msg": refine_diff_df_to_string(df_diff), + } + if kwargs["msg"] != "no data": + discord.send_webhook_message(**kwargs) def df_difference(df_xls, df_bigquery) -> pd.DataFrame: diff --git a/package-lock.json b/package-lock.json index 700f0ec..8d76498 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,723 +13,940 @@ "cz-conventional-changelog": "^3.1.0", "dot-prop": "^5.2.0", "husky": "^1.3.1", - "lint-staged": "^8.1.5", + "lint-staged": "^14.0.1", "lodash": "^4.17.19", "minimist": "^1.2.5" }, "devDependencies": { - "@commitlint/cli": "^9.1.2", - "@commitlint/config-conventional": "^8.3.4", + "@commitlint/cli": "^17.7.1", + "@commitlint/config-conventional": "^17.7.0", "cz-emoji": "^1.3.1" } }, "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "devOptional": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "devOptional": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "devOptional": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "devOptional": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "devOptional": true }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "devOptional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "devOptional": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "devOptional": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/highlight": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", - "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "devOptional": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/runtime": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", - "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "devOptional": true, "dependencies": { - "regenerator-runtime": "^0.13.4" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@commitlint/cli": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-9.1.2.tgz", - "integrity": "sha512-ctRrrPqjZ8r4Vc4FXpPaScEpkPwfvB0Us3NK2SD2AnLwXGMxOLFTabDmNySU1Xc40ud2CmJsaV8lpavvzs8ZZA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.9.6", - "@commitlint/format": "^9.1.2", - "@commitlint/lint": "^9.1.2", - "@commitlint/load": "^9.1.2", - "@commitlint/read": "^9.1.2", - "chalk": "4.1.0", - "core-js": "^3.6.1", - "get-stdin": "7.0.0", - "lodash": "^4.17.19", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", - "yargs": "^15.1.0" - }, - "bin": { - "commitlint": "cli.js" + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "devOptional": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=v8.17.0" + "node": ">=4" } }, - "node_modules/@commitlint/cli/node_modules/@commitlint/execute-rule": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-9.1.2.tgz", - "integrity": "sha512-NGbeo0KCVYo1yj9vVPFHv6RGFpIF6wcQxpFYUKGIzZVV9Vz1WyiKS689JXa99Dt1aN0cZlEJJLnTNDIgYls0Vg==", - "dev": true, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "devOptional": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "devOptional": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "devOptional": true, "engines": { - "node": ">=v8.17.0" + "node": ">=4" } }, - "node_modules/@commitlint/cli/node_modules/@commitlint/load": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-9.1.2.tgz", - "integrity": "sha512-FPL82xBuF7J3EJ57kLVoligQP4BFRwrknooP+vNT787AXmQ/Fddc/iYYwHwy67pNkk5N++/51UyDl/CqiHb6nA==", - "dev": true, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "devOptional": true, "dependencies": { - "@commitlint/execute-rule": "^9.1.2", - "@commitlint/resolve-extends": "^9.1.2", - "@commitlint/types": "^9.1.2", - "chalk": "4.1.0", - "cosmiconfig": "^6.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=v8.17.0" + "node": ">=4" } }, - "node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-9.1.2.tgz", - "integrity": "sha512-HcoL+qFGmWEu9VM4fY0HI+VzF4yHcg3x+9Hx6pYFZ+r2wLbnKs964y0v68oyMO/mS/46MVoLNXZGR8U3adpadg==", + "node_modules/@commitlint/cli": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.7.1.tgz", + "integrity": "sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==", "dev": true, "dependencies": { - "import-fresh": "^3.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" + "@commitlint/format": "^17.4.4", + "@commitlint/lint": "^17.7.0", + "@commitlint/load": "^17.7.1", + "@commitlint/read": "^17.5.1", + "@commitlint/types": "^17.4.4", + "execa": "^5.0.0", + "lodash.isfunction": "^3.0.9", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" }, "engines": { - "node": ">=v8.17.0" + "node": ">=v14" } }, - "node_modules/@commitlint/cli/node_modules/@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "node_modules/@commitlint/cli/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=v8.17.0" + "node": ">= 8" } }, - "node_modules/@commitlint/cli/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "node_modules/@commitlint/cli/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@commitlint/cli/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "node_modules/@commitlint/cli/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/cli/node_modules/get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "node_modules/@commitlint/cli/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/config-conventional": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-8.3.4.tgz", - "integrity": "sha512-w0Yc5+aVAjZgjYqx29igBOnVCj8O22gy3Vo6Fyp7PwoS7+AYS1x3sN7IBq6i7Ae15Mv5P+rEx1pkxXo5zOMe4g==", + "node_modules/@commitlint/cli/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "conventional-changelog-conventionalcommits": "4.2.1" + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@commitlint/ensure": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-9.1.2.tgz", - "integrity": "sha512-hwQICwpNSTsZgj/1/SdPvYAzhwjwgCJI4vLbT879+Jc+AJ6sj2bUDGw/F89vzgKz1VnaMm4D65bNhoWhG3pdhQ==", + "node_modules/@commitlint/cli/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "dependencies": { - "@commitlint/types": "^9.1.2", - "lodash": "^4.17.19" - }, "engines": { - "node": ">=v8.17.0" + "node": ">=8" } }, - "node_modules/@commitlint/ensure/node_modules/@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "node_modules/@commitlint/cli/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, "engines": { - "node": ">=v8.17.0" + "node": ">=8" } }, - "node_modules/@commitlint/execute-rule": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-11.0.0.tgz", - "integrity": "sha512-g01p1g4BmYlZ2+tdotCavrMunnPFPhTzG1ZiLKTCYrooHRbmvqo42ZZn4QMStUEIcn+jfLb6BRZX3JzIwA1ezQ==", - "optional": true, + "node_modules/@commitlint/cli/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { - "node": ">=v10.22.0" + "node": ">=8" } }, - "node_modules/@commitlint/format": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-9.1.2.tgz", - "integrity": "sha512-+ZWTOSGEU6dbn3NRh1q7sY5K5QLiSs7E2uSzuYnWHXcQk8nlTvnE0ibwMCQxdKLaOTZiN57fHM/7M9Re2gsRuw==", + "node_modules/@commitlint/cli/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { - "@commitlint/types": "^9.1.2", - "chalk": "^4.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=v8.17.0" + "node": ">= 8" } }, - "node_modules/@commitlint/format/node_modules/@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "node_modules/@commitlint/config-conventional": { + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.7.0.tgz", + "integrity": "sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw==", "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^6.1.0" + }, "engines": { - "node": ">=v8.17.0" + "node": ">=v14" } }, - "node_modules/@commitlint/format/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, + "node_modules/@commitlint/config-validator": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz", + "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==", + "devOptional": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@commitlint/types": "^17.4.4", + "ajv": "^8.11.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=v14" } }, - "node_modules/@commitlint/is-ignored": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-9.1.2.tgz", - "integrity": "sha512-423W/+Ro+Cc8cg81+t9gds1EscMZNjnGT31nKDvxVxJxXiXQsYYoFEQbU+nfUrRGQsUikEgEJ3ppVGr1linvcQ==", + "node_modules/@commitlint/ensure": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz", + "integrity": "sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==", "dev": true, "dependencies": { - "@commitlint/types": "^9.1.2", - "semver": "7.3.2" + "@commitlint/types": "^17.4.4", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" }, "engines": { - "node": ">=v8.17.0" + "node": ">=v14" } }, - "node_modules/@commitlint/is-ignored/node_modules/@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", - "dev": true, + "node_modules/@commitlint/execute-rule": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz", + "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==", + "devOptional": true, "engines": { - "node": ">=v8.17.0" + "node": ">=v14" } }, - "node_modules/@commitlint/is-ignored/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "node_modules/@commitlint/format": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz", + "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "@commitlint/types": "^17.4.4", + "chalk": "^4.1.0" }, "engines": { - "node": ">=10" + "node": ">=v14" } }, - "node_modules/@commitlint/lint": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-9.1.2.tgz", - "integrity": "sha512-XvggqHZ4XSTKOgzJhCzz52cWRRO57QQnEviwGj0qnD4jdwC+8h2u9LNZwoa2tGAuaNM3nSm//wNK7FRZhgiiFA==", + "node_modules/@commitlint/is-ignored": { + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz", + "integrity": "sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^9.1.2", - "@commitlint/parse": "^9.1.2", - "@commitlint/rules": "^9.1.2", - "@commitlint/types": "^9.1.2" + "@commitlint/types": "^17.4.4", + "semver": "7.5.4" }, "engines": { - "node": ">=v8.17.0" + "node": ">=v14" } }, - "node_modules/@commitlint/lint/node_modules/@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "node_modules/@commitlint/lint": { + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.7.0.tgz", + "integrity": "sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==", "dev": true, - "engines": { - "node": ">=v8.17.0" - } - }, - "node_modules/@commitlint/load": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-11.0.0.tgz", - "integrity": "sha512-t5ZBrtgvgCwPfxmG811FCp39/o3SJ7L+SNsxFL92OR4WQxPcu6c8taD0CG2lzOHGuRyuMxZ7ps3EbngT2WpiCg==", - "optional": true, - "dependencies": { - "@commitlint/execute-rule": "^11.0.0", - "@commitlint/resolve-extends": "^11.0.0", - "@commitlint/types": "^11.0.0", - "chalk": "4.1.0", - "cosmiconfig": "^7.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0" + "dependencies": { + "@commitlint/is-ignored": "^17.7.0", + "@commitlint/parse": "^17.7.0", + "@commitlint/rules": "^17.7.0", + "@commitlint/types": "^17.4.4" }, "engines": { - "node": ">=v10.22.0" + "node": ">=v14" } }, - "node_modules/@commitlint/load/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "optional": true, + "node_modules/@commitlint/load": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.1.tgz", + "integrity": "sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==", + "devOptional": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@commitlint/config-validator": "^17.6.7", + "@commitlint/execute-rule": "^17.4.0", + "@commitlint/resolve-extends": "^17.6.7", + "@commitlint/types": "^17.4.4", + "@types/node": "20.4.7", + "chalk": "^4.1.0", + "cosmiconfig": "^8.0.0", + "cosmiconfig-typescript-loader": "^4.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", + "resolve-from": "^5.0.0", + "ts-node": "^10.8.1", + "typescript": "^4.6.4 || ^5.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=v14" } }, "node_modules/@commitlint/message": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-9.1.2.tgz", - "integrity": "sha512-ndlx5z7bPVLG347oYJUHuQ41eTcsw+aUYT1ZwQyci0Duy2atpuoeeSw9SuM1PjufzRCpb6ExzFEgGzcCRKAJsg==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz", + "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==", "dev": true, "engines": { - "node": ">=v8.17.0" + "node": ">=v14" } }, "node_modules/@commitlint/parse": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-9.1.2.tgz", - "integrity": "sha512-d+/VYbkotctW+lzDpus/R6xTerOqFQkW1myH+3PwnqYSE6JU/uHT4MlZNGJBv8pX9SPlR66t6X9puFobqtezEw==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.7.0.tgz", + "integrity": "sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==", "dev": true, "dependencies": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-parser": "^3.0.0" + "@commitlint/types": "^17.4.4", + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-parser": "^4.0.0" }, "engines": { - "node": ">=v8.17.0" + "node": ">=v14" } }, "node_modules/@commitlint/read": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-9.1.2.tgz", - "integrity": "sha512-C2sNBQOqeQXMxpWtRnXYKYB3D9yuybPtQNY/P67A6o8XH/UMHkFaUTyIx1KRgu0IG0yTTItRt46FGnsMWLotvA==", + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz", + "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==", "dev": true, "dependencies": { - "@commitlint/top-level": "^9.1.2", - "fs-extra": "^8.1.0", - "git-raw-commits": "^2.0.0" + "@commitlint/top-level": "^17.4.0", + "@commitlint/types": "^17.4.4", + "fs-extra": "^11.0.0", + "git-raw-commits": "^2.0.11", + "minimist": "^1.2.6" }, "engines": { - "node": ">=v8.17.0" + "node": ">=v14" } }, "node_modules/@commitlint/resolve-extends": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-11.0.0.tgz", - "integrity": "sha512-WinU6Uv6L7HDGLqn/To13KM1CWvZ09VHZqryqxXa1OY+EvJkfU734CwnOEeNlSCK7FVLrB4kmodLJtL1dkEpXw==", - "optional": true, + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz", + "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==", + "devOptional": true, "dependencies": { + "@commitlint/config-validator": "^17.6.7", + "@commitlint/types": "^17.4.4", "import-fresh": "^3.0.0", - "lodash": "^4.17.19", + "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0" }, "engines": { - "node": ">=v10.22.0" + "node": ">=v14" } }, "node_modules/@commitlint/rules": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-9.1.2.tgz", - "integrity": "sha512-1vecFuzqVqjiT57ocXq1bL8V6GEF1NZs3BR0dQzObaqHftImIxBVII299gasckTkcuxNc8M+7XxZyKxUthukpQ==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.7.0.tgz", + "integrity": "sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==", "dev": true, "dependencies": { - "@commitlint/ensure": "^9.1.2", - "@commitlint/message": "^9.1.2", - "@commitlint/to-lines": "^9.1.2", - "@commitlint/types": "^9.1.2" + "@commitlint/ensure": "^17.6.7", + "@commitlint/message": "^17.4.2", + "@commitlint/to-lines": "^17.4.0", + "@commitlint/types": "^17.4.4", + "execa": "^5.0.0" }, "engines": { - "node": ">=v8.17.0" + "node": ">=v14" } }, - "node_modules/@commitlint/rules/node_modules/@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "node_modules/@commitlint/rules/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=v8.17.0" + "node": ">= 8" } }, - "node_modules/@commitlint/to-lines": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-9.1.2.tgz", - "integrity": "sha512-o4zWcMf9EnzA3MOqx01780SgrKq5hqDJmUBPk30g6an0XcDuDy3OSZHHTJFdzsg4V9FjC4OY44sFeK7GN7NaxQ==", + "node_modules/@commitlint/rules/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, "engines": { - "node": ">=v8.17.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@commitlint/top-level": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-9.1.2.tgz", - "integrity": "sha512-KMPP5xVePcz3B1dKqcZdU4FZBVOkT+bG3ip4RQX2TeCJoomMkTjd0utALs7rpTGLID6BXbwwXepZCZJREjR/Bw==", + "node_modules/@commitlint/rules/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, "engines": { - "node": ">=v8.17.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/top-level/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@commitlint/rules/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/top-level/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@commitlint/rules/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "path-key": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/@commitlint/top-level/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@commitlint/rules/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { "node": ">=8" } }, - "node_modules/@commitlint/top-level/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/@commitlint/rules/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/@commitlint/types": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-11.0.0.tgz", - "integrity": "sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==", - "optional": true, + "node_modules/@commitlint/rules/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { - "node": ">=v10.22.0" + "node": ">=8" } }, - "node_modules/@samverschueren/stream-to-observable": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", - "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", + "node_modules/@commitlint/rules/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { - "any-observable": "^0.3.0" + "isexe": "^2.0.0" }, - "engines": { - "node": ">=6" + "bin": { + "node-which": "bin/node-which" }, - "peerDependenciesMeta": { - "rxjs": { - "optional": true - }, - "zen-observable": { - "optional": true - } + "engines": { + "node": ">= 8" } }, - "node_modules/@types/minimist": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", - "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "devOptional": true + "node_modules/@commitlint/to-lines": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz", + "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==", + "dev": true, + "engines": { + "node": ">=v14" + } }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "node_modules/@commitlint/top-level": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz", + "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, "engines": { - "node": ">=4" + "node": ">=v14" } }, - "node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "node_modules/@commitlint/top-level/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "node_modules/@commitlint/types": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", + "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==", + "devOptional": true, + "dependencies": { + "chalk": "^4.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=v14" } }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "devOptional": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "devOptional": true, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "devOptional": true }, - "node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/array-uniq": { + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "devOptional": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true + }, + "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "devOptional": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.4.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz", + "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==", + "devOptional": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", + "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "devOptional": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "devOptional": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "engines": { - "node": ">=0.10.0" + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "devOptional": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" }, "engines": { - "node": ">= 4.5.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "devOptional": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "sprintf-js": "~1.0.2" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { + "node_modules/array-ify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/base/node_modules/is-data-descriptor": { + "node_modules/at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" } }, - "node_modules/base/node_modules/is-descriptor": { + "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, "node_modules/brace-expansion": { @@ -742,59 +959,43 @@ } }, "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { - "is-extendable": "^0.1.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "node_modules/cachedir": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz", - "integrity": "sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "engines": { "node": ">=6" } @@ -802,7 +1003,7 @@ "node_modules/caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", "dependencies": { "callsites": "^2.0.0" }, @@ -813,7 +1014,7 @@ "node_modules/caller-callsite/node_modules/callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", "engines": { "node": ">=4" } @@ -821,7 +1022,7 @@ "node_modules/caller-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", "dependencies": { "caller-callsite": "^2.0.0" }, @@ -865,59 +1066,18 @@ } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dependencies": { - "color-convert": "^1.9.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" + "node": ">=10" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/chardet": { @@ -930,120 +1090,61 @@ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "node_modules/cli-spinners": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" + "node": ">=6" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "node_modules/cli-truncate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", + "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", + "dev": true, "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "slice-ansi": "^1.0.0", + "string-width": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" - }, "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { @@ -1056,35 +1157,23 @@ } }, "node_modules/cliui/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/cliui/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", @@ -1092,43 +1181,24 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "engines": { "node": ">=0.8" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1139,33 +1209,40 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "engines": { + "node": ">=16" + } }, "node_modules/commitizen": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.2.3.tgz", - "integrity": "sha512-pYlYEng7XMV2TW4xtjDKBGqeJ0Teq2zyRSx2S3Ml1XAplHSlJZK8vm1KdGclpMEZuGafbS5TeHXIVnHk8RWIzQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", + "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", "dependencies": { - "cachedir": "2.2.0", - "cz-conventional-changelog": "3.2.0", + "cachedir": "2.3.0", + "cz-conventional-changelog": "3.3.0", "dedent": "0.7.0", - "detect-indent": "6.0.0", - "find-node-modules": "2.0.0", + "detect-indent": "6.1.0", + "find-node-modules": "^2.1.2", "find-root": "1.1.0", - "fs-extra": "8.1.0", - "glob": "7.1.4", - "inquirer": "6.5.2", + "fs-extra": "9.1.0", + "glob": "7.2.3", + "inquirer": "8.2.5", "is-utf8": "^0.2.1", - "lodash": "^4.17.20", - "minimist": "1.2.5", + "lodash": "4.17.21", + "minimist": "1.2.7", "strip-bom": "4.0.0", - "strip-json-comments": "3.0.1" + "strip-json-comments": "3.1.1" }, "bin": { "commitizen": "bin/commitizen", @@ -1173,26 +1250,29 @@ "git-cz": "bin/git-cz" }, "engines": { - "node": ">= 10" + "node": ">= 12" } }, - "node_modules/commitizen/node_modules/cz-conventional-changelog": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz", - "integrity": "sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==", + "node_modules/commitizen/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { - "chalk": "^2.4.1", - "commitizen": "^4.0.3", - "conventional-commit-types": "^3.0.0", - "lodash.map": "^4.5.1", - "longest": "^2.0.1", - "word-wrap": "^1.0.3" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@commitlint/load": ">6.1.1" + "node": ">=10" + } + }, + "node_modules/commitizen/node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/compare-func": { @@ -1205,72 +1285,33 @@ "dot-prop": "^5.1.0" } }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/conventional-changelog-angular": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", - "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", "dev": true, "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/conventional-changelog-conventionalcommits": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.1.tgz", - "integrity": "sha512-vC02KucnkNNap+foDKFm7BVUSDAXktXrUJqGszUuYnt6T0J2azsbYz/w9TDc3VsrW2v6JOtiQWVcgZnporHr4Q==", - "dev": true, - "dependencies": { - "compare-func": "^1.3.1", - "lodash": "^4.2.1", - "q": "^1.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/conventional-changelog-conventionalcommits/node_modules/compare-func": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz", - "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==", - "dev": true, - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^3.0.0" - } - }, - "node_modules/conventional-changelog-conventionalcommits/node_modules/dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz", + "integrity": "sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==", "dev": true, "dependencies": { - "is-obj": "^1.0.0" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-changelog-conventionalcommits/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=14" } }, "node_modules/conventional-commit-types": { @@ -1279,62 +1320,88 @@ "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==" }, "node_modules/conventional-commits-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", - "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", + "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, "dependencies": { "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0", - "trim-off-newlines": "^1.0.0" + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" }, "bin": { "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=10" + "node": ">=14" } }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "devOptional": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/core-js": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", - "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "node_modules/cosmiconfig-typescript-loader": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", + "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", + "devOptional": true, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=4" } }, - "node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "optional": true, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "devOptional": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "devOptional": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=10" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true + }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -1350,6 +1417,14 @@ "node": ">=4.8" } }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/cz-conventional-changelog": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", @@ -1369,6 +1444,62 @@ "@commitlint/load": ">6.1.1" } }, + "node_modules/cz-conventional-changelog/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/cz-conventional-changelog/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/cz-conventional-changelog/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/cz-emoji": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/cz-emoji/-/cz-emoji-1.3.1.tgz", @@ -1390,19 +1521,6 @@ "node": ">=4" } }, - "node_modules/cz-emoji/node_modules/cli-truncate": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", - "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", - "dev": true, - "dependencies": { - "slice-ansi": "^1.0.0", - "string-width": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/cz-emoji/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -1464,27 +1582,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cz-emoji/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cz-emoji/node_modules/slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", @@ -1494,32 +1591,35 @@ "node": ">=8" } }, - "node_modules/date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" - }, "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "ms": "2.0.0" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { "decamelize": "^1.1.0", @@ -1527,118 +1627,61 @@ }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "engines": { - "node": ">=0.10" - } - }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dependencies": { "clone": "^1.0.2" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dependencies": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "engines": { "node": ">=0.10.0" } }, "node_modules/detect-indent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", - "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "engines": { "node": ">=8" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "devOptional": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -1650,277 +1693,145 @@ "node": ">=8" } }, - "node_modules/elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "once": "^1.4.0" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" + "is-arrayish": "^0.2.1" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/execa": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dependencies": { - "kind-of": "^6.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dependencies": { - "kind-of": "^6.0.0" + "homedir-polyfill": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "devOptional": true + }, "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dependencies": { "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=4" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "node": ">=8" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/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==", "dependencies": { - "is-extendable": "^0.1.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/find-node-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz", - "integrity": "sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", + "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", "dependencies": { - "findup-sync": "^3.0.0", - "merge": "^1.2.1" + "findup-sync": "^4.0.0", + "merge": "^2.1.1" } }, "node_modules/find-root": { @@ -1929,74 +1840,50 @@ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", "dependencies": { "detect-file": "^1.0.0", "is-glob": "^4.0.0", - "micromatch": "^3.0.4", + "micromatch": "^4.0.2", "resolve-dir": "^1.0.1" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fn-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", - "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, "node_modules/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==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=14.14" } }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/function-bind": { "version": "1.1.1", @@ -2012,19 +1899,6 @@ "node": ">=6" } }, - "node_modules/g-status": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", - "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", - "dependencies": { - "arrify": "^1.0.1", - "matcher": "^1.0.0", - "simple-git": "^1.85.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2034,19 +1908,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "engines": { - "node": ">=4" - } - }, "node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -2058,18 +1919,10 @@ "node": ">=6" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/git-raw-commits": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", - "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "dependencies": { "dargs": "^7.0.0", @@ -2086,25 +1939,28 @@ } }, "node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "devOptional": true, "dependencies": { "ini": "^1.3.4" @@ -2129,7 +1985,7 @@ "node_modules/global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dependencies": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -2141,33 +1997,10 @@ "node": ">=0.10.0" } }, - "node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/hard-rejection": { "version": "2.1.0", @@ -2189,74 +2022,18 @@ "node": ">= 0.4.0" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, "engines": { "node": ">=8" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/homedir": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/homedir/-/homedir-0.6.0.tgz", - "integrity": "sha1-KyHbZr8Ipts4JJo+/1LX0YcGrx4=", + "integrity": "sha512-KZFBHenkVuyyG4uaqRSXqWJr3HTxcaPguM7rU1BlH/mtbDlzaXNSXTa9AhV+fXEjrNemHu9vtLRIaM8/8OW0xA==", "dev": true }, "node_modules/homedir-polyfill": { @@ -2271,9 +2048,25 @@ } }, "node_modules/hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } }, "node_modules/husky": { "version": "1.3.1", @@ -2313,10 +2106,29 @@ "node": ">=4" } }, + "node_modules/husky/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "engines": { + "node": ">=4" + } + }, "node_modules/husky/node_modules/import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "dependencies": { "caller-path": "^2.0.0", "resolve-from": "^3.0.0" @@ -2325,10 +2137,33 @@ "node": ">=4" } }, + "node_modules/husky/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/husky/node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -2337,10 +2172,18 @@ "node": ">=4" } }, + "node_modules/husky/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/husky/node_modules/resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "engines": { "node": ">=4" } @@ -2356,6 +2199,25 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2382,17 +2244,18 @@ } }, "node_modules/indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2409,26 +2272,28 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.0.0" } }, "node_modules/inquirer-autocomplete-prompt": { @@ -2444,10 +2309,87 @@ "run-async": "^2.3.0" } }, + "node_modules/inquirer-autocomplete-prompt/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/inquirer-autocomplete-prompt/node_modules/chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", + "dev": true + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/inquirer-autocomplete-prompt/node_modules/external-editor": { @@ -2464,6 +2406,27 @@ "node": ">=0.12" } }, + "node_modules/inquirer-autocomplete-prompt/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/inquirer-autocomplete-prompt/node_modules/inquirer": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.0.tgz", @@ -2489,8 +2452,48 @@ "node_modules/inquirer-autocomplete-prompt/node_modules/inquirer/node_modules/ansi-escapes": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", - "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", + "integrity": "sha512-tH/fSoQp4DrEodDK3QpdiWiZTSe7sBJ9eOqcQBZ0o9HTM+5M/viSEn+sPMoTuPjQQ8n++w3QJoPEjt8LVPcrCg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "dev": true + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, "engines": { "node": ">=4" } @@ -2498,7 +2501,7 @@ "node_modules/inquirer-autocomplete-prompt/node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" @@ -2507,6 +2510,18 @@ "node": ">=4" } }, + "node_modules/inquirer-autocomplete-prompt/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/inquirer-maxlength-input-prompt": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/inquirer-maxlength-input-prompt/-/inquirer-maxlength-input-prompt-1.0.2.tgz", @@ -2523,10 +2538,87 @@ "node": ">=6.0.0" } }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/inquirer-maxlength-input-prompt/node_modules/chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", + "dev": true + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/inquirer-maxlength-input-prompt/node_modules/external-editor": { @@ -2543,6 +2635,27 @@ "node": ">=0.12" } }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/inquirer-maxlength-input-prompt/node_modules/inquirer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", @@ -2564,7 +2677,47 @@ "through": "^2.3.6" }, "engines": { - "node": ">=6.0.0" + "node": ">=6.0.0" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "dev": true + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" } }, "node_modules/inquirer-maxlength-input-prompt/node_modules/rxjs": { @@ -2582,7 +2735,7 @@ "node_modules/inquirer-maxlength-input-prompt/node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" @@ -2591,46 +2744,83 @@ "node": ">=4" } }, + "node_modules/inquirer-maxlength-input-prompt/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/inquirer-maxlength-input-prompt/node_modules/symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "kind-of": "^3.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "is-buffer": "^1.1.5" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-ci": { "version": "2.0.0", @@ -2644,9 +2834,9 @@ } }, "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dependencies": { "has": "^1.0.3" }, @@ -2654,61 +2844,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", "engines": { "node": ">=0.10.0" } @@ -2716,7 +2855,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } @@ -2724,15 +2863,16 @@ "node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, "engines": { "node": ">=4" } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2740,26 +2880,20 @@ "node": ">=0.10.0" } }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, "node_modules/is-obj": { @@ -2770,84 +2904,19 @@ "node": ">=8" } }, - "node_modules/is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "dependencies": { - "symbol-observable": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dependencies": { - "is-path-inside": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dependencies": { - "path-is-inside": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "engines": { "node": ">=0.10.0" } @@ -2855,7 +2924,7 @@ "node_modules/is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "dependencies": { "text-extensions": "^1.0.0" @@ -2864,10 +2933,21 @@ "node": ">=0.10.0" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" }, "node_modules/is-windows": { "version": "1.0.2", @@ -2877,23 +2957,10 @@ "node": ">=0.10.0" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -2924,10 +2991,19 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "devOptional": true }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "devOptional": true + }, "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -2935,7 +3011,7 @@ "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" @@ -2961,273 +3037,394 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "devOptional": true }, "node_modules/lint-staged": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz", - "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", - "dependencies": { - "chalk": "^2.3.1", - "commander": "^2.14.1", - "cosmiconfig": "^5.2.0", - "debug": "^3.1.0", - "dedent": "^0.7.0", - "del": "^3.0.0", - "execa": "^1.0.0", - "g-status": "^2.0.2", - "is-glob": "^4.0.0", - "is-windows": "^1.0.2", - "listr": "^0.14.2", - "listr-update-renderer": "^0.5.0", - "lodash": "^4.17.11", - "log-symbols": "^2.2.0", - "micromatch": "^3.1.8", - "npm-which": "^3.0.1", - "p-map": "^1.1.1", - "path-is-inside": "^1.0.2", - "pify": "^3.0.0", - "please-upgrade-node": "^3.0.2", - "staged-git-files": "1.1.2", - "string-argv": "^0.0.2", - "stringify-object": "^3.2.2", - "yup": "^0.27.0" + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", + "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", + "dependencies": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" }, "bin": { - "lint-staged": "index.js" + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/lint-staged/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/lint-staged/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "dependencies": { - "ms": "^2.1.1" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/lint-staged/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "node_modules/lint-staged/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "node_modules/lint-staged/node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } }, - "node_modules/lint-staged/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "node_modules/lint-staged/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/resolve-from": { + "node_modules/lint-staged/node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "dependencies": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "node_modules/lint-staged/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "node_modules/listr2": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", "dependencies": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" }, "engines": { - "node": ">=6" + "node": ">=16.0.0" }, "peerDependencies": { - "listr": "^0.14.2" + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } } }, - "node_modules/listr-update-renderer/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/listr-update-renderer/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/listr-update-renderer/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "node_modules/listr2/node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr-update-renderer/node_modules/figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/listr2/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr-update-renderer/node_modules/log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "node_modules/listr2/node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dependencies": { - "chalk": "^1.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/listr-update-renderer/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/listr2/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "ansi-regex": "^2.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/listr/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true }, "node_modules/lodash.invoke": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/lodash.invoke/-/lodash.invoke-4.5.2.tgz", - "integrity": "sha1-AcoH5HCQOv+j/+x60u0icj0vaXw=", + "integrity": "sha512-SC4Usc0XbIKuz3eH7oNwPqibKHfTJSGVZwO/6eGhdoPzqexOY7z43pKo8xz0M5zzXSRteADV6fW7cRf6Ru0+VA==", "dev": true }, "node_modules/lodash.isfunction": { @@ -3236,45 +3433,240 @@ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", "dev": true }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "devOptional": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, "node_modules/lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "devOptional": true + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "devOptional": true }, "node_modules/lodash.partialright": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", - "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=", + "integrity": "sha512-yebmPMQZH7i4El6SdJTW9rn8irWl8VTcsmiWqm/I4sY8/ZjbSo0Z512HL6soeAu3mh5rhx5uIIo6kYJOQXbCxw==", "dev": true }, - "node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "devOptional": true + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true + }, + "node_modules/log-update": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dependencies": { - "chalk": "^2.0.1" + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" }, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" + "type-fest": "^1.0.2" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/longest": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", - "integrity": "sha1-eB4YMpaqlPbU2RbcM10NF676I/g=", + "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", "engines": { "node": ">=0.10.0" } @@ -3291,43 +3683,22 @@ "node": ">=10" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true }, "node_modules/map-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", - "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "engines": { "node": ">=8" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matcher": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", - "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", - "dependencies": { - "escape-string-regexp": "^1.0.4" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow": { @@ -3355,82 +3726,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "engines": { "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", - "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^3.0.6", - "resolve": "^1.17.0", - "semver": "^7.3.2", - "validate-npm-package-license": "^3.0.1" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "node_modules/merge": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" }, - "node_modules/merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/min-indent": { @@ -3443,9 +3778,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3454,9 +3789,12 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minimist-options": { "version": "4.1.0", @@ -3472,59 +3810,15 @@ "node": ">= 6" } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "node_modules/nice-try": { "version": "1.0.5", @@ -3532,34 +3826,24 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dependencies": { - "which": "^1.2.10" - }, - "bin": { - "npm-path": "bin/npm-path" }, "engines": { - "node": ">=0.8" + "node": ">=10" } }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dependencies": { "path-key": "^2.0.0" }, @@ -3567,118 +3851,69 @@ "node": ">=4" } }, - "node_modules/npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - }, - "bin": { - "npm-which": "bin/npm-which.js" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" + "wrappy": "1" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" + "node": ">=6" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dependencies": { - "is-buffer": "^1.1.5" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dependencies": { - "isobject": "^3.0.0" + "node": ">=10" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/ora/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dependencies": { - "isobject": "^3.0.1" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dependencies": { - "mimic-fn": "^1.0.0" + "node": ">=10" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "engines": { "node": ">=0.10.0" } @@ -3686,7 +3921,7 @@ "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "engines": { "node": ">=4" } @@ -3706,22 +3941,15 @@ } }, "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/p-try": { @@ -3777,52 +4005,40 @@ "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "engines": { "node": ">=0.10.0" } }, "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, "node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "engines": { "node": ">=4" } }, "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-type": { "version": "4.0.0", @@ -3833,44 +4049,89 @@ "node": ">=8" } }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "engines": { "node": ">=4" } }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dependencies": { - "pinkie": "^2.0.0" + "locate-path": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/pkg-dir": { + "node_modules/pkg-dir/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { - "find-up": "^3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" }, "engines": { "node": ">=6" } }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/please-upgrade-node": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", @@ -3879,14 +4140,6 @@ "semver-compare": "^1.0.0" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/prettier": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", @@ -3899,11 +4152,6 @@ "node": ">=4" } }, - "node_modules/property-expr": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", - "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==" - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -3913,14 +4161,13 @@ "once": "^1.3.1" } }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "devOptional": true, "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" + "node": ">=6" } }, "node_modules/quick-lru": { @@ -3935,7 +4182,7 @@ "node_modules/read-pkg": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "integrity": "sha512-+UBirHHDm5J+3WDmLBZYSklRYg82nMlz+enn+GMZ22nSR2f4bzxmhso6rzQW/3mT2PVzpzDTiYIZahk8UmZ44w==", "dependencies": { "normalize-package-data": "^2.3.2", "parse-json": "^4.0.0", @@ -3962,50 +4209,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/read-pkg-up/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg-up/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "node_modules/read-pkg-up/node_modules/read-pkg": { @@ -4032,6 +4251,15 @@ "node": ">=8" } }, + "node_modules/read-pkg-up/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -4041,10 +4269,26 @@ "node": ">=8" } }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "node_modules/read-pkg/node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -4053,11 +4297,18 @@ "node": ">=4" } }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4080,70 +4331,35 @@ "node": ">=8" } }, - "node_modules/redent/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "engines": { - "node": ">=0.10" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4152,7 +4368,7 @@ "node_modules/resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dependencies": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -4165,403 +4381,174 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "devOptional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", - "devOptional": true, - "dependencies": { - "global-dirs": "^0.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", - "bin": { - "run-node": "run-node" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "node_modules/rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "dependencies": { - "rx-lite": "*" - } - }, - "node_modules/rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/simple-git": { - "version": "1.132.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz", - "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", - "dependencies": { - "debug": "^4.0.1" - } - }, - "node_modules/simple-git/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/simple-git/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, + "devOptional": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "devOptional": true, "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "global-dirs": "^0.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { - "is-descriptor": "^1.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "node_modules/run-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" + "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", + "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", + "bin": { + "run-node": "run-node" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==", + "dev": true + }, + "node_modules/rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==", + "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" + "rx-lite": "*" } }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" + "tslib": "^2.1.0" } }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dependencies": { - "is-descriptor": "^0.1.0" + "shebang-regex": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "node_modules/slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated" - }, "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -4582,20 +4569,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", + "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==" }, "node_modules/split2": { "version": "3.2.2", @@ -4609,52 +4585,20 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/staged-git-files": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", - "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==", - "bin": { - "sgf": "bin/cli.js" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", - "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "engines": { "node": ">=0.6.19" } @@ -4663,6 +4607,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -4671,55 +4616,36 @@ "node": ">=4" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, "engines": { "node": ">=4" } }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "ansi-regex": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/stringify-object/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/strip-bom": { @@ -4733,11 +4659,20 @@ "node_modules/strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "engines": { "node": ">=0.10.0" } }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -4751,18 +4686,20 @@ } }, "node_modules/strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4770,19 +4707,17 @@ "node": ">=8" } }, - "node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synchronous-promise": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.15.tgz", - "integrity": "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==" - }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -4795,7 +4730,7 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/through2": { "version": "4.0.2", @@ -4812,184 +4747,130 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dependencies": { "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toposort": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" - }, - "node_modules/trim-newlines": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", - "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + }, + "engines": { + "node": ">=0.6.0" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "node_modules/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==", "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "devOptional": true, "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dependencies": { - "isarray": "1.0.0" + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=0.10.0" + "node": ">=14.17" } }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "engines": { - "node": ">=0.10.0" + "node": ">= 10.0.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "engines": { - "node": ">=0.10.0" + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "devOptional": true, + "dependencies": { + "punycode": "^2.1.0" } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true }, "node_modules/validate-npm-package-license": { "version": "3.0.4", @@ -5003,8 +4884,7 @@ "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dependencies": { "defaults": "^1.0.3" } @@ -5020,16 +4900,10 @@ "which": "bin/which" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "engines": { "node": ">=0.10.0" } @@ -5037,7 +4911,8 @@ "node_modules/wrap-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, "dependencies": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0" @@ -5046,10 +4921,20 @@ "node": ">=4" } }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, "dependencies": { "ansi-regex": "^3.0.0" }, @@ -5060,13 +4945,16 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } }, "node_modules/yallist": { "version": "4.0.0", @@ -5075,67 +4963,40 @@ "dev": true }, "node_modules/yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "devOptional": true, + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz", - "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { "node": ">=10" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -5145,74 +5006,34 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/yargs/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "devOptional": true, "engines": { "node": ">=6" } @@ -5228,443 +5049,656 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/yup": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", - "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "fn-name": "~2.0.1", - "lodash": "^4.17.11", - "property-expr": "^1.5.0", - "synchronous-promise": "^2.0.6", - "toposort": "^2.0.2" - } } }, "dependencies": { "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "devOptional": true, "requires": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "devOptional": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "devOptional": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "devOptional": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "devOptional": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "devOptional": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "devOptional": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "devOptional": true }, "@babel/highlight": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", - "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "devOptional": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" - } - }, - "@babel/runtime": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", - "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", - "requires": { - "regenerator-runtime": "^0.13.4" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "devOptional": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "devOptional": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "devOptional": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "devOptional": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "devOptional": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "devOptional": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@commitlint/cli": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-9.1.2.tgz", - "integrity": "sha512-ctRrrPqjZ8r4Vc4FXpPaScEpkPwfvB0Us3NK2SD2AnLwXGMxOLFTabDmNySU1Xc40ud2CmJsaV8lpavvzs8ZZA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.9.6", - "@commitlint/format": "^9.1.2", - "@commitlint/lint": "^9.1.2", - "@commitlint/load": "^9.1.2", - "@commitlint/read": "^9.1.2", - "chalk": "4.1.0", - "core-js": "^3.6.1", - "get-stdin": "7.0.0", - "lodash": "^4.17.19", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.7.1.tgz", + "integrity": "sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==", + "dev": true, + "requires": { + "@commitlint/format": "^17.4.4", + "@commitlint/lint": "^17.7.0", + "@commitlint/load": "^17.7.1", + "@commitlint/read": "^17.5.1", + "@commitlint/types": "^17.4.4", + "execa": "^5.0.0", + "lodash.isfunction": "^3.0.9", "resolve-from": "5.0.0", "resolve-global": "1.0.0", - "yargs": "^15.1.0" + "yargs": "^17.0.0" }, "dependencies": { - "@commitlint/execute-rule": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-9.1.2.tgz", - "integrity": "sha512-NGbeo0KCVYo1yj9vVPFHv6RGFpIF6wcQxpFYUKGIzZVV9Vz1WyiKS689JXa99Dt1aN0cZlEJJLnTNDIgYls0Vg==", - "dev": true - }, - "@commitlint/load": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-9.1.2.tgz", - "integrity": "sha512-FPL82xBuF7J3EJ57kLVoligQP4BFRwrknooP+vNT787AXmQ/Fddc/iYYwHwy67pNkk5N++/51UyDl/CqiHb6nA==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "@commitlint/execute-rule": "^9.1.2", - "@commitlint/resolve-extends": "^9.1.2", - "@commitlint/types": "^9.1.2", - "chalk": "4.1.0", - "cosmiconfig": "^6.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "@commitlint/resolve-extends": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-9.1.2.tgz", - "integrity": "sha512-HcoL+qFGmWEu9VM4fY0HI+VzF4yHcg3x+9Hx6pYFZ+r2wLbnKs964y0v68oyMO/mS/46MVoLNXZGR8U3adpadg==", + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "import-fresh": "^3.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" } }, - "@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "path-key": "^3.0.0" } }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "shebang-regex": "^3.0.0" } }, - "get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, "@commitlint/config-conventional": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-8.3.4.tgz", - "integrity": "sha512-w0Yc5+aVAjZgjYqx29igBOnVCj8O22gy3Vo6Fyp7PwoS7+AYS1x3sN7IBq6i7Ae15Mv5P+rEx1pkxXo5zOMe4g==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.7.0.tgz", + "integrity": "sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw==", "dev": true, "requires": { - "conventional-changelog-conventionalcommits": "4.2.1" + "conventional-changelog-conventionalcommits": "^6.1.0" + } + }, + "@commitlint/config-validator": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz", + "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==", + "devOptional": true, + "requires": { + "@commitlint/types": "^17.4.4", + "ajv": "^8.11.0" } }, "@commitlint/ensure": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-9.1.2.tgz", - "integrity": "sha512-hwQICwpNSTsZgj/1/SdPvYAzhwjwgCJI4vLbT879+Jc+AJ6sj2bUDGw/F89vzgKz1VnaMm4D65bNhoWhG3pdhQ==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz", + "integrity": "sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==", "dev": true, "requires": { - "@commitlint/types": "^9.1.2", - "lodash": "^4.17.19" - }, - "dependencies": { - "@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", - "dev": true - } + "@commitlint/types": "^17.4.4", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" } }, "@commitlint/execute-rule": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-11.0.0.tgz", - "integrity": "sha512-g01p1g4BmYlZ2+tdotCavrMunnPFPhTzG1ZiLKTCYrooHRbmvqo42ZZn4QMStUEIcn+jfLb6BRZX3JzIwA1ezQ==", - "optional": true + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz", + "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==", + "devOptional": true }, "@commitlint/format": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-9.1.2.tgz", - "integrity": "sha512-+ZWTOSGEU6dbn3NRh1q7sY5K5QLiSs7E2uSzuYnWHXcQk8nlTvnE0ibwMCQxdKLaOTZiN57fHM/7M9Re2gsRuw==", + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz", + "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==", "dev": true, "requires": { - "@commitlint/types": "^9.1.2", - "chalk": "^4.0.0" - }, - "dependencies": { - "@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "@commitlint/types": "^17.4.4", + "chalk": "^4.1.0" } }, "@commitlint/is-ignored": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-9.1.2.tgz", - "integrity": "sha512-423W/+Ro+Cc8cg81+t9gds1EscMZNjnGT31nKDvxVxJxXiXQsYYoFEQbU+nfUrRGQsUikEgEJ3ppVGr1linvcQ==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz", + "integrity": "sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==", "dev": true, "requires": { - "@commitlint/types": "^9.1.2", - "semver": "7.3.2" - }, - "dependencies": { - "@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } + "@commitlint/types": "^17.4.4", + "semver": "7.5.4" } }, "@commitlint/lint": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-9.1.2.tgz", - "integrity": "sha512-XvggqHZ4XSTKOgzJhCzz52cWRRO57QQnEviwGj0qnD4jdwC+8h2u9LNZwoa2tGAuaNM3nSm//wNK7FRZhgiiFA==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.7.0.tgz", + "integrity": "sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==", "dev": true, "requires": { - "@commitlint/is-ignored": "^9.1.2", - "@commitlint/parse": "^9.1.2", - "@commitlint/rules": "^9.1.2", - "@commitlint/types": "^9.1.2" - }, - "dependencies": { - "@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", - "dev": true - } + "@commitlint/is-ignored": "^17.7.0", + "@commitlint/parse": "^17.7.0", + "@commitlint/rules": "^17.7.0", + "@commitlint/types": "^17.4.4" } }, "@commitlint/load": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-11.0.0.tgz", - "integrity": "sha512-t5ZBrtgvgCwPfxmG811FCp39/o3SJ7L+SNsxFL92OR4WQxPcu6c8taD0CG2lzOHGuRyuMxZ7ps3EbngT2WpiCg==", - "optional": true, - "requires": { - "@commitlint/execute-rule": "^11.0.0", - "@commitlint/resolve-extends": "^11.0.0", - "@commitlint/types": "^11.0.0", - "chalk": "4.1.0", - "cosmiconfig": "^7.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.1.tgz", + "integrity": "sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==", + "devOptional": true, + "requires": { + "@commitlint/config-validator": "^17.6.7", + "@commitlint/execute-rule": "^17.4.0", + "@commitlint/resolve-extends": "^17.6.7", + "@commitlint/types": "^17.4.4", + "@types/node": "20.4.7", + "chalk": "^4.1.0", + "cosmiconfig": "^8.0.0", + "cosmiconfig-typescript-loader": "^4.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", + "resolve-from": "^5.0.0", + "ts-node": "^10.8.1", + "typescript": "^4.6.4 || ^5.0.0" } }, "@commitlint/message": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-9.1.2.tgz", - "integrity": "sha512-ndlx5z7bPVLG347oYJUHuQ41eTcsw+aUYT1ZwQyci0Duy2atpuoeeSw9SuM1PjufzRCpb6ExzFEgGzcCRKAJsg==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz", + "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==", "dev": true }, "@commitlint/parse": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-9.1.2.tgz", - "integrity": "sha512-d+/VYbkotctW+lzDpus/R6xTerOqFQkW1myH+3PwnqYSE6JU/uHT4MlZNGJBv8pX9SPlR66t6X9puFobqtezEw==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.7.0.tgz", + "integrity": "sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==", "dev": true, "requires": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-parser": "^3.0.0" + "@commitlint/types": "^17.4.4", + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-parser": "^4.0.0" } }, "@commitlint/read": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-9.1.2.tgz", - "integrity": "sha512-C2sNBQOqeQXMxpWtRnXYKYB3D9yuybPtQNY/P67A6o8XH/UMHkFaUTyIx1KRgu0IG0yTTItRt46FGnsMWLotvA==", + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz", + "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==", "dev": true, "requires": { - "@commitlint/top-level": "^9.1.2", - "fs-extra": "^8.1.0", - "git-raw-commits": "^2.0.0" + "@commitlint/top-level": "^17.4.0", + "@commitlint/types": "^17.4.4", + "fs-extra": "^11.0.0", + "git-raw-commits": "^2.0.11", + "minimist": "^1.2.6" } }, "@commitlint/resolve-extends": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-11.0.0.tgz", - "integrity": "sha512-WinU6Uv6L7HDGLqn/To13KM1CWvZ09VHZqryqxXa1OY+EvJkfU734CwnOEeNlSCK7FVLrB4kmodLJtL1dkEpXw==", - "optional": true, + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz", + "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==", + "devOptional": true, "requires": { + "@commitlint/config-validator": "^17.6.7", + "@commitlint/types": "^17.4.4", "import-fresh": "^3.0.0", - "lodash": "^4.17.19", + "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0" } }, "@commitlint/rules": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-9.1.2.tgz", - "integrity": "sha512-1vecFuzqVqjiT57ocXq1bL8V6GEF1NZs3BR0dQzObaqHftImIxBVII299gasckTkcuxNc8M+7XxZyKxUthukpQ==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.7.0.tgz", + "integrity": "sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==", "dev": true, "requires": { - "@commitlint/ensure": "^9.1.2", - "@commitlint/message": "^9.1.2", - "@commitlint/to-lines": "^9.1.2", - "@commitlint/types": "^9.1.2" + "@commitlint/ensure": "^17.6.7", + "@commitlint/message": "^17.4.2", + "@commitlint/to-lines": "^17.4.0", + "@commitlint/types": "^17.4.4", + "execa": "^5.0.0" }, "dependencies": { - "@commitlint/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", - "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, "@commitlint/to-lines": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-9.1.2.tgz", - "integrity": "sha512-o4zWcMf9EnzA3MOqx01780SgrKq5hqDJmUBPk30g6an0XcDuDy3OSZHHTJFdzsg4V9FjC4OY44sFeK7GN7NaxQ==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz", + "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==", "dev": true }, "@commitlint/top-level": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-9.1.2.tgz", - "integrity": "sha512-KMPP5xVePcz3B1dKqcZdU4FZBVOkT+bG3ip4RQX2TeCJoomMkTjd0utALs7rpTGLID6BXbwwXepZCZJREjR/Bw==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz", + "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==", "dev": true, "requires": { - "find-up": "^4.0.0" + "find-up": "^5.0.0" }, "dependencies": { "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "yocto-queue": "^0.1.0" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } } } }, "@commitlint/types": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-11.0.0.tgz", - "integrity": "sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==", - "optional": true + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", + "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==", + "devOptional": true, + "requires": { + "chalk": "^4.1.0" + } }, - "@samverschueren/stream-to-observable": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", - "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "devOptional": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "devOptional": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "devOptional": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, "requires": { - "any-observable": "^0.3.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "devOptional": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true + }, + "@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "devOptional": true + }, "@types/minimist": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", - "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, + "@types/node": { + "version": "20.4.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz", + "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==", + "devOptional": true + }, "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", + "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", "dev": true }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "devOptional": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "devOptional": true }, + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "devOptional": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, "requires": { "color-convert": "^2.0.1" } }, - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==" + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "devOptional": true }, "argparse": { "version": "1.0.10", @@ -5674,113 +5708,41 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, "array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true }, - "assign-symbols": { + "at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, "brace-expansion": { @@ -5793,57 +5755,31 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "cachedir": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz", - "integrity": "sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==" }, "caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", "requires": { "callsites": "^2.0.0" }, @@ -5851,14 +5787,14 @@ "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==" } } }, "caller-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", "requires": { "caller-callsite": "^2.0.0" } @@ -5887,49 +5823,12 @@ } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "chardet": { @@ -5937,104 +5836,50 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, + "cli-spinners": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==" + }, "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", + "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", + "dev": true, "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } + "slice-ansi": "^1.0.0", + "string-width": "^2.0.0" } }, "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" }, "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "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", @@ -6042,29 +5887,20 @@ "dev": true }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "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.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" + "strip-ansi": "^6.0.1" } }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "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", @@ -6077,28 +5913,12 @@ "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" }, "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==", - "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -6106,48 +5926,54 @@ "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==", - "devOptional": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==" }, "commitizen": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.2.3.tgz", - "integrity": "sha512-pYlYEng7XMV2TW4xtjDKBGqeJ0Teq2zyRSx2S3Ml1XAplHSlJZK8vm1KdGclpMEZuGafbS5TeHXIVnHk8RWIzQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", + "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", "requires": { - "cachedir": "2.2.0", - "cz-conventional-changelog": "3.2.0", + "cachedir": "2.3.0", + "cz-conventional-changelog": "3.3.0", "dedent": "0.7.0", - "detect-indent": "6.0.0", - "find-node-modules": "2.0.0", + "detect-indent": "6.1.0", + "find-node-modules": "^2.1.2", "find-root": "1.1.0", - "fs-extra": "8.1.0", - "glob": "7.1.4", - "inquirer": "6.5.2", + "fs-extra": "9.1.0", + "glob": "7.2.3", + "inquirer": "8.2.5", "is-utf8": "^0.2.1", - "lodash": "^4.17.20", - "minimist": "1.2.5", + "lodash": "4.17.21", + "minimist": "1.2.7", "strip-bom": "4.0.0", - "strip-json-comments": "3.0.1" + "strip-json-comments": "3.1.1" }, "dependencies": { - "cz-conventional-changelog": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz", - "integrity": "sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "requires": { - "@commitlint/load": ">6.1.1", - "chalk": "^2.4.1", - "commitizen": "^4.0.3", - "conventional-commit-types": "^3.0.0", - "lodash.map": "^4.5.1", - "longest": "^2.0.1", - "word-wrap": "^1.0.3" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" } } }, @@ -6161,62 +5987,27 @@ "dot-prop": "^5.1.0" } }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "conventional-changelog-angular": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", - "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", "dev": true, "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "compare-func": "^2.0.0" } }, "conventional-changelog-conventionalcommits": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.1.tgz", - "integrity": "sha512-vC02KucnkNNap+foDKFm7BVUSDAXktXrUJqGszUuYnt6T0J2azsbYz/w9TDc3VsrW2v6JOtiQWVcgZnporHr4Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz", + "integrity": "sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==", "dev": true, "requires": { - "compare-func": "^1.3.1", - "lodash": "^4.2.1", - "q": "^1.5.1" - }, - "dependencies": { - "compare-func": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz", - "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^3.0.0" - } - }, - "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - } + "compare-func": "^2.0.0" } }, "conventional-commit-types": { @@ -6225,44 +6016,59 @@ "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==" }, "conventional-commits-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", - "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", + "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, "requires": { "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0", - "trim-off-newlines": "^1.0.0" + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-js": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", - "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", - "dev": true - }, "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "optional": true, + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "devOptional": true, "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "devOptional": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "devOptional": true, + "requires": { + "argparse": "^2.0.1" + } + } } }, + "cosmiconfig-typescript-loader": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", + "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", + "devOptional": true, + "requires": {} + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -6273,6 +6079,13 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + } } }, "cz-conventional-changelog": { @@ -6287,6 +6100,52 @@ "lodash.map": "^4.5.1", "longest": "^2.0.1", "word-wrap": "^1.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "cz-emoji": { @@ -6307,16 +6166,6 @@ "wrap-ansi": "^3.0.0" }, "dependencies": { - "cli-truncate": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", - "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", - "dev": true, - "requires": { - "slice-ansi": "^1.0.0", - "string-width": "^2.0.0" - } - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -6353,21 +6202,6 @@ "requires": { "p-limit": "^3.0.2" } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } } } }, @@ -6377,29 +6211,24 @@ "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" - }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "requires": { "decamelize": "^1.1.0", @@ -6409,89 +6238,39 @@ "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true } } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "requires": { "clone": "^1.0.2" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - } - }, "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==" }, "detect-indent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", - "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "devOptional": true }, "dot-prop": { "version": "5.3.0", @@ -6501,16 +6280,15 @@ "is-obj": "^2.0.0" } }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "end-of-stream": { "version": "1.4.4", @@ -6528,16 +6306,27 @@ "is-arrayish": "^0.2.1" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -6552,170 +6341,53 @@ "strip-eof": "^1.0.0" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "requires": { "homedir-polyfill": "^1.0.1" } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" } }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "devOptional": true + }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, "find-node-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz", - "integrity": "sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", + "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", "requires": { - "findup-sync": "^3.0.0", - "merge": "^1.2.1" + "findup-sync": "^4.0.0", + "merge": "^2.1.1" } }, "find-root": { @@ -6724,56 +6396,41 @@ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", "requires": { "detect-file": "^1.0.0", "is-glob": "^4.0.0", - "micromatch": "^3.0.4", + "micromatch": "^4.0.2", "resolve-dir": "^1.0.1" } }, - "fn-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", - "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.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==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, "requires": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "function-bind": { "version": "1.1.1", @@ -6786,32 +6443,12 @@ "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", "dev": true }, - "g-status": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", - "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", - "requires": { - "arrify": "^1.0.1", - "matcher": "^1.0.0", - "simple-git": "^1.85.0" - } - }, "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 }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -6820,15 +6457,10 @@ "pump": "^3.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, "git-raw-commits": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", - "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "requires": { "dargs": "^7.0.0", @@ -6839,14 +6471,14 @@ } }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -6854,7 +6486,7 @@ "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "devOptional": true, "requires": { "ini": "^1.3.4" @@ -6873,7 +6505,7 @@ "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "requires": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -6882,29 +6514,10 @@ "which": "^1.2.14" } }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "hard-rejection": { "version": "2.1.0", @@ -6920,60 +6533,15 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - } - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "homedir": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/homedir/-/homedir-0.6.0.tgz", - "integrity": "sha1-KyHbZr8Ipts4JJo+/1LX0YcGrx4=", + "integrity": "sha512-KZFBHenkVuyyG4uaqRSXqWJr3HTxcaPguM7rU1BlH/mtbDlzaXNSXTa9AhV+fXEjrNemHu9vtLRIaM8/8OW0xA==", "dev": true }, "homedir-polyfill": { @@ -6985,9 +6553,19 @@ } }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true }, "husky": { "version": "1.3.1", @@ -7017,28 +6595,63 @@ "parse-json": "^4.0.0" } }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" + }, "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "requires": { "caller-path": "^2.0.0", "resolve-from": "^3.0.0" } }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + }, "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" } } }, @@ -7050,6 +6663,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -7069,14 +6687,15 @@ } }, "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -7093,23 +6712,61 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.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==" + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "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==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } } }, "inquirer-autocomplete-prompt": { @@ -7125,10 +6782,72 @@ "run-async": "^2.3.0" }, "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "external-editor": { @@ -7142,6 +6861,21 @@ "tmp": "^0.0.33" } }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, "inquirer": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.0.tgz", @@ -7167,19 +6901,59 @@ "ansi-escapes": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", - "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", + "integrity": "sha512-tH/fSoQp4DrEodDK3QpdiWiZTSe7sBJ9eOqcQBZ0o9HTM+5M/viSEn+sPMoTuPjQQ8n++w3QJoPEjt8LVPcrCg==", "dev": true } } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "requires": { "ansi-regex": "^3.0.0" } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7196,10 +6970,72 @@ "lodash.partialright": "^4.2.1" }, "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "external-editor": { @@ -7213,6 +7049,21 @@ "tmp": "^0.0.33" } }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, "inquirer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", @@ -7234,6 +7085,37 @@ "through": "^2.3.6" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, "rxjs": { "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", @@ -7246,47 +7128,33 @@ "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, "symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==", "dev": true } } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "is-ci": { "version": "2.0.0", @@ -7297,190 +7165,91 @@ } }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "requires": { "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, - "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "requires": { - "symbol-observable": "^1.1.0" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "^1.0.1" - } - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" }, "is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "requires": { "text-extensions": "^1.0.0" } }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "js-tokens": { "version": "4.0.0", @@ -7508,18 +7277,25 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "devOptional": true }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "devOptional": true + }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, "JSONStream": { @@ -7535,220 +7311,249 @@ "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" }, "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "devOptional": true }, "lint-staged": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz", - "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", - "requires": { - "chalk": "^2.3.1", - "commander": "^2.14.1", - "cosmiconfig": "^5.2.0", - "debug": "^3.1.0", - "dedent": "^0.7.0", - "del": "^3.0.0", - "execa": "^1.0.0", - "g-status": "^2.0.2", - "is-glob": "^4.0.0", - "is-windows": "^1.0.2", - "listr": "^0.14.2", - "listr-update-renderer": "^0.5.0", - "lodash": "^4.17.11", - "log-symbols": "^2.2.0", - "micromatch": "^3.1.8", - "npm-which": "^3.0.1", - "p-map": "^1.1.1", - "path-is-inside": "^1.0.2", - "pify": "^3.0.0", - "please-upgrade-node": "^3.0.2", - "staged-git-files": "1.1.2", - "string-argv": "^0.0.2", - "stringify-object": "^3.2.2", - "yup": "^0.27.0" + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", + "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", + "requires": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" }, "dependencies": { - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "requires": { - "ms": "^2.1.1" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" } }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + } + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "requires": { + "mimic-fn": "^4.0.0" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "shebang-regex": "^3.0.0" } }, - "resolve-from": { + "shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } - } - }, - "listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } } } }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" - }, - "listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "listr2": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" } }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" } }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "requires": { - "chalk": "^1.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^6.0.1" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } } } }, - "listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - } - }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true }, "lodash.invoke": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/lodash.invoke/-/lodash.invoke-4.5.2.tgz", - "integrity": "sha1-AcoH5HCQOv+j/+x60u0icj0vaXw=", + "integrity": "sha512-SC4Usc0XbIKuz3eH7oNwPqibKHfTJSGVZwO/6eGhdoPzqexOY7z43pKo8xz0M5zzXSRteADV6fW7cRf6Ru0+VA==", "dev": true }, "lodash.isfunction": { @@ -7757,39 +7562,170 @@ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", "dev": true }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "devOptional": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, "lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "devOptional": true + }, + "lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "devOptional": true }, "lodash.partialright": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", - "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=", + "integrity": "sha512-yebmPMQZH7i4El6SdJTW9rn8irWl8VTcsmiWqm/I4sY8/ZjbSo0Z512HL6soeAu3mh5rhx5uIIo6kYJOQXbCxw==", "dev": true }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "requires": { - "chalk": "^2.0.1" - } + "lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, + "lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "devOptional": true + }, + "lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true }, "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + }, + "dependencies": { + "ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "requires": { + "type-fest": "^1.0.2" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "requires": { + "restore-cursor": "^4.0.0" + } + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } } }, "longest": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", - "integrity": "sha1-eB4YMpaqlPbU2RbcM10NF676I/g=" + "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==" }, "lru-cache": { "version": "6.0.0", @@ -7800,33 +7736,18 @@ "yallist": "^4.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true }, "map-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", - "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "matcher": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", - "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", - "requires": { - "escape-string-regexp": "^1.0.4" - } - }, "meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -7846,67 +7767,37 @@ "yargs-parser": "^20.2.3" }, "dependencies": { - "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", - "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", - "dev": true, - "requires": { - "hosted-git-info": "^3.0.6", - "resolve": "^1.17.0", - "semver": "^7.3.2", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true } } }, "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "min-indent": { "version": "1.0.1", @@ -7915,17 +7806,17 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "minimist-options": { "version": "4.1.0", @@ -7938,52 +7829,15 @@ "kind-of": "^6.0.3" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nice-try": { "version": "1.0.5", @@ -7991,121 +7845,77 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "requires": { - "which": "^1.2.10" - } - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "requires": { "path-key": "^2.0.0" } }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" + "wrappy": "1" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "requires": { - "is-buffer": "^1.1.5" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" } } } }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" }, "p-limit": { "version": "2.3.0", @@ -8116,18 +7926,14 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" - }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -8166,37 +7972,28 @@ "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-type": { "version": "4.0.0", @@ -8204,23 +8001,20 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "devOptional": true }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==" + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" }, "pkg-dir": { "version": "3.0.0", @@ -8228,6 +8022,38 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "requires": { "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + } } }, "please-upgrade-node": { @@ -8238,22 +8064,12 @@ "semver-compare": "^1.0.0" } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, "prettier": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, - "property-expr": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", - "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==" - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -8263,11 +8079,11 @@ "once": "^1.3.1" } }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "devOptional": true }, "quick-lru": { "version": "4.0.1", @@ -8278,21 +8094,42 @@ "read-pkg": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "integrity": "sha512-+UBirHHDm5J+3WDmLBZYSklRYg82nMlz+enn+GMZ22nSR2f4bzxmhso6rzQW/3mT2PVzpzDTiYIZahk8UmZ44w==", "requires": { "normalize-package-data": "^2.3.2", "parse-json": "^4.0.0", "pify": "^3.0.0" }, "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, @@ -8307,40 +8144,24 @@ "type-fest": "^0.8.1" }, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -8361,6 +8182,12 @@ } } }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -8370,10 +8197,9 @@ } }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -8386,67 +8212,36 @@ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "dependencies": { - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - } - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" } }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "devOptional": true }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -8467,32 +8262,19 @@ "global-dirs": "^0.1.1" } }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "requires": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "run-async": { "version": "2.4.1", @@ -8507,39 +8289,30 @@ "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==", "dev": true }, "rx-lite-aggregates": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==", "dev": true, "requires": { "rx-lite": "*" } }, "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "requires": { - "tslib": "^1.9.0" + "tslib": "^2.1.0" } }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", @@ -8547,46 +8320,23 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "requires": { "shebang-regex": "^1.0.0" } @@ -8594,35 +8344,12 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "simple-git": { - "version": "1.132.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz", - "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", - "requires": { - "debug": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "slash": { "version": "2.0.0", @@ -8630,133 +8357,18 @@ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" }, "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "is-fullwidth-code-point": "^2.0.0" } }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -8777,17 +8389,9 @@ } }, "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", + "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==" }, "split2": { "version": "3.2.2", @@ -8801,95 +8405,54 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "staged-git-files": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", - "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "requires": { "safe-buffer": "~5.2.0" } }, "string-argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", - "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==" }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" }, "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, "requires": { "ansi-regex": "^3.0.0" } } } }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - } - } - }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - } + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -8900,7 +8463,13 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true }, "strip-indent": { "version": "3.0.0", @@ -8912,28 +8481,22 @@ } }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, "requires": { "has-flag": "^4.0.0" } }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "synchronous-promise": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.15.tgz", - "integrity": "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==" + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "text-extensions": { "version": "1.9.0", @@ -8944,7 +8507,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "through2": { "version": "4.0.2", @@ -8963,139 +8526,81 @@ "os-tmpdir": "~1.0.2" } }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "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==", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, - "toposort": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" - }, "trim-newlines": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", - "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "devOptional": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + }, + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "devOptional": true }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "devOptional": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } + "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true }, "validate-npm-package-license": { "version": "3.0.4", @@ -9109,8 +8614,7 @@ "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "requires": { "defaults": "^1.0.3" } @@ -9123,30 +8627,32 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" }, "wrap-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0" }, "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -9156,12 +8662,12 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { @@ -9171,132 +8677,67 @@ "dev": true }, "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "devOptional": true + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==" }, "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.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 }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "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.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" + "strip-ansi": "^6.0.1" } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true } } }, "yargs-parser": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz", - "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==", + "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 }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "devOptional": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true - }, - "yup": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", - "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "fn-name": "~2.0.1", - "lodash": "^4.17.11", - "property-expr": "^1.5.0", - "synchronous-promise": "^2.0.6", - "toposort": "^2.0.2" - } } } } diff --git a/package.json b/package.json index 1be5ace..7455f64 100644 --- a/package.json +++ b/package.json @@ -45,13 +45,13 @@ "cz-conventional-changelog": "^3.1.0", "dot-prop": "^5.2.0", "husky": "^1.3.1", - "lint-staged": "^8.1.5", + "lint-staged": "^14.0.1", "lodash": "^4.17.19", "minimist": "^1.2.5" }, "devDependencies": { - "@commitlint/cli": "^9.1.2", - "@commitlint/config-conventional": "^8.3.4", + "@commitlint/cli": "^17.7.1", + "@commitlint/config-conventional": "^17.7.0", "cz-emoji": "^1.3.1" }, "config": { From a212942c7bd30a2eca69fe654e107c45f7d9fdfc Mon Sep 17 00:00:00 2001 From: "Chao-Hung, Wan" Date: Sun, 8 Oct 2023 00:22:17 +0800 Subject: [PATCH 88/89] no change json --- package-lock.json | 9801 ++++++++++++++++++++++++--------------------- package.json | 6 +- 2 files changed, 5183 insertions(+), 4624 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d76498..700f0ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,940 +13,723 @@ "cz-conventional-changelog": "^3.1.0", "dot-prop": "^5.2.0", "husky": "^1.3.1", - "lint-staged": "^14.0.1", + "lint-staged": "^8.1.5", "lodash": "^4.17.19", "minimist": "^1.2.5" }, "devDependencies": { - "@commitlint/cli": "^17.7.1", - "@commitlint/config-conventional": "^17.7.0", + "@commitlint/cli": "^9.1.2", + "@commitlint/config-conventional": "^8.3.4", "cz-emoji": "^1.3.1" } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "devOptional": true, "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "devOptional": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "devOptional": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "devOptional": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "devOptional": true - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "devOptional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "devOptional": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@babel/highlight": "^7.12.13" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "devOptional": true, - "engines": { - "node": ">=6.9.0" - } + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "devOptional": true }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", "devOptional": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "devOptional": true, + "node_modules/@babel/runtime": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "regenerator-runtime": "^0.13.4" } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "devOptional": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "node_modules/@commitlint/cli": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-9.1.2.tgz", + "integrity": "sha512-ctRrrPqjZ8r4Vc4FXpPaScEpkPwfvB0Us3NK2SD2AnLwXGMxOLFTabDmNySU1Xc40ud2CmJsaV8lpavvzs8ZZA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.9.6", + "@commitlint/format": "^9.1.2", + "@commitlint/lint": "^9.1.2", + "@commitlint/load": "^9.1.2", + "@commitlint/read": "^9.1.2", + "chalk": "4.1.0", + "core-js": "^3.6.1", + "get-stdin": "7.0.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^15.1.0" + }, + "bin": { + "commitlint": "cli.js" }, "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "devOptional": true, - "dependencies": { - "color-name": "1.1.3" + "node": ">=v8.17.0" } }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "devOptional": true - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "devOptional": true, + "node_modules/@commitlint/cli/node_modules/@commitlint/execute-rule": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-9.1.2.tgz", + "integrity": "sha512-NGbeo0KCVYo1yj9vVPFHv6RGFpIF6wcQxpFYUKGIzZVV9Vz1WyiKS689JXa99Dt1aN0cZlEJJLnTNDIgYls0Vg==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=v8.17.0" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "devOptional": true, + "node_modules/@commitlint/cli/node_modules/@commitlint/load": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-9.1.2.tgz", + "integrity": "sha512-FPL82xBuF7J3EJ57kLVoligQP4BFRwrknooP+vNT787AXmQ/Fddc/iYYwHwy67pNkk5N++/51UyDl/CqiHb6nA==", + "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "@commitlint/execute-rule": "^9.1.2", + "@commitlint/resolve-extends": "^9.1.2", + "@commitlint/types": "^9.1.2", + "chalk": "4.1.0", + "cosmiconfig": "^6.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=4" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/cli": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.7.1.tgz", - "integrity": "sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==", + "node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-9.1.2.tgz", + "integrity": "sha512-HcoL+qFGmWEu9VM4fY0HI+VzF4yHcg3x+9Hx6pYFZ+r2wLbnKs964y0v68oyMO/mS/46MVoLNXZGR8U3adpadg==", "dev": true, "dependencies": { - "@commitlint/format": "^17.4.4", - "@commitlint/lint": "^17.7.0", - "@commitlint/load": "^17.7.1", - "@commitlint/read": "^17.5.1", - "@commitlint/types": "^17.4.4", - "execa": "^5.0.0", - "lodash.isfunction": "^3.0.9", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "commitlint": "cli.js" + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" }, "engines": { - "node": ">=v14" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/cli/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@commitlint/cli/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/cli/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/@commitlint/cli/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@commitlint/cli/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/@commitlint/cli/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/cli/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/cli/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/@commitlint/cli/node_modules/get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/@commitlint/cli/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/@commitlint/config-conventional": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-8.3.4.tgz", + "integrity": "sha512-w0Yc5+aVAjZgjYqx29igBOnVCj8O22gy3Vo6Fyp7PwoS7+AYS1x3sN7IBq6i7Ae15Mv5P+rEx1pkxXo5zOMe4g==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "conventional-changelog-conventionalcommits": "4.2.1" } }, - "node_modules/@commitlint/cli/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/@commitlint/ensure": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-9.1.2.tgz", + "integrity": "sha512-hwQICwpNSTsZgj/1/SdPvYAzhwjwgCJI4vLbT879+Jc+AJ6sj2bUDGw/F89vzgKz1VnaMm4D65bNhoWhG3pdhQ==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "@commitlint/types": "^9.1.2", + "lodash": "^4.17.19" }, "engines": { - "node": ">=8" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/cli/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/@commitlint/ensure/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/cli/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/@commitlint/execute-rule": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-11.0.0.tgz", + "integrity": "sha512-g01p1g4BmYlZ2+tdotCavrMunnPFPhTzG1ZiLKTCYrooHRbmvqo42ZZn4QMStUEIcn+jfLb6BRZX3JzIwA1ezQ==", + "optional": true, + "engines": { + "node": ">=v10.22.0" + } + }, + "node_modules/@commitlint/format": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-9.1.2.tgz", + "integrity": "sha512-+ZWTOSGEU6dbn3NRh1q7sY5K5QLiSs7E2uSzuYnWHXcQk8nlTvnE0ibwMCQxdKLaOTZiN57fHM/7M9Re2gsRuw==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "@commitlint/types": "^9.1.2", + "chalk": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/config-conventional": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.7.0.tgz", - "integrity": "sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw==", + "node_modules/@commitlint/format/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", "dev": true, - "dependencies": { - "conventional-changelog-conventionalcommits": "^6.1.0" - }, "engines": { - "node": ">=v14" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/config-validator": { - "version": "17.6.7", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz", - "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==", - "devOptional": true, + "node_modules/@commitlint/format/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, "dependencies": { - "@commitlint/types": "^17.4.4", - "ajv": "^8.11.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=v14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@commitlint/ensure": { - "version": "17.6.7", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz", - "integrity": "sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==", + "node_modules/@commitlint/is-ignored": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-9.1.2.tgz", + "integrity": "sha512-423W/+Ro+Cc8cg81+t9gds1EscMZNjnGT31nKDvxVxJxXiXQsYYoFEQbU+nfUrRGQsUikEgEJ3ppVGr1linvcQ==", "dev": true, "dependencies": { - "@commitlint/types": "^17.4.4", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" + "@commitlint/types": "^9.1.2", + "semver": "7.3.2" }, "engines": { - "node": ">=v14" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/execute-rule": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz", - "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==", - "devOptional": true, + "node_modules/@commitlint/is-ignored/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "dev": true, "engines": { - "node": ">=v14" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/format": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz", - "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==", + "node_modules/@commitlint/is-ignored/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true, - "dependencies": { - "@commitlint/types": "^17.4.4", - "chalk": "^4.1.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=v14" + "node": ">=10" } }, - "node_modules/@commitlint/is-ignored": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz", - "integrity": "sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==", + "node_modules/@commitlint/lint": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-9.1.2.tgz", + "integrity": "sha512-XvggqHZ4XSTKOgzJhCzz52cWRRO57QQnEviwGj0qnD4jdwC+8h2u9LNZwoa2tGAuaNM3nSm//wNK7FRZhgiiFA==", "dev": true, "dependencies": { - "@commitlint/types": "^17.4.4", - "semver": "7.5.4" + "@commitlint/is-ignored": "^9.1.2", + "@commitlint/parse": "^9.1.2", + "@commitlint/rules": "^9.1.2", + "@commitlint/types": "^9.1.2" }, "engines": { - "node": ">=v14" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/lint": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.7.0.tgz", - "integrity": "sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==", + "node_modules/@commitlint/lint/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", "dev": true, - "dependencies": { - "@commitlint/is-ignored": "^17.7.0", - "@commitlint/parse": "^17.7.0", - "@commitlint/rules": "^17.7.0", - "@commitlint/types": "^17.4.4" - }, "engines": { - "node": ">=v14" + "node": ">=v8.17.0" } }, "node_modules/@commitlint/load": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.1.tgz", - "integrity": "sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==", - "devOptional": true, + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-11.0.0.tgz", + "integrity": "sha512-t5ZBrtgvgCwPfxmG811FCp39/o3SJ7L+SNsxFL92OR4WQxPcu6c8taD0CG2lzOHGuRyuMxZ7ps3EbngT2WpiCg==", + "optional": true, + "dependencies": { + "@commitlint/execute-rule": "^11.0.0", + "@commitlint/resolve-extends": "^11.0.0", + "@commitlint/types": "^11.0.0", + "chalk": "4.1.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v10.22.0" + } + }, + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "optional": true, "dependencies": { - "@commitlint/config-validator": "^17.6.7", - "@commitlint/execute-rule": "^17.4.0", - "@commitlint/resolve-extends": "^17.6.7", - "@commitlint/types": "^17.4.4", - "@types/node": "20.4.7", - "chalk": "^4.1.0", - "cosmiconfig": "^8.0.0", - "cosmiconfig-typescript-loader": "^4.0.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0", - "ts-node": "^10.8.1", - "typescript": "^4.6.4 || ^5.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=v14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@commitlint/message": { - "version": "17.4.2", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz", - "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-9.1.2.tgz", + "integrity": "sha512-ndlx5z7bPVLG347oYJUHuQ41eTcsw+aUYT1ZwQyci0Duy2atpuoeeSw9SuM1PjufzRCpb6ExzFEgGzcCRKAJsg==", "dev": true, "engines": { - "node": ">=v14" + "node": ">=v8.17.0" } }, "node_modules/@commitlint/parse": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.7.0.tgz", - "integrity": "sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-9.1.2.tgz", + "integrity": "sha512-d+/VYbkotctW+lzDpus/R6xTerOqFQkW1myH+3PwnqYSE6JU/uHT4MlZNGJBv8pX9SPlR66t6X9puFobqtezEw==", "dev": true, "dependencies": { - "@commitlint/types": "^17.4.4", - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-parser": "^4.0.0" + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-parser": "^3.0.0" }, "engines": { - "node": ">=v14" + "node": ">=v8.17.0" } }, "node_modules/@commitlint/read": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz", - "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-9.1.2.tgz", + "integrity": "sha512-C2sNBQOqeQXMxpWtRnXYKYB3D9yuybPtQNY/P67A6o8XH/UMHkFaUTyIx1KRgu0IG0yTTItRt46FGnsMWLotvA==", "dev": true, "dependencies": { - "@commitlint/top-level": "^17.4.0", - "@commitlint/types": "^17.4.4", - "fs-extra": "^11.0.0", - "git-raw-commits": "^2.0.11", - "minimist": "^1.2.6" + "@commitlint/top-level": "^9.1.2", + "fs-extra": "^8.1.0", + "git-raw-commits": "^2.0.0" }, "engines": { - "node": ">=v14" + "node": ">=v8.17.0" } }, "node_modules/@commitlint/resolve-extends": { - "version": "17.6.7", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz", - "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==", - "devOptional": true, + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-11.0.0.tgz", + "integrity": "sha512-WinU6Uv6L7HDGLqn/To13KM1CWvZ09VHZqryqxXa1OY+EvJkfU734CwnOEeNlSCK7FVLrB4kmodLJtL1dkEpXw==", + "optional": true, "dependencies": { - "@commitlint/config-validator": "^17.6.7", - "@commitlint/types": "^17.4.4", "import-fresh": "^3.0.0", - "lodash.mergewith": "^4.6.2", + "lodash": "^4.17.19", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0" }, "engines": { - "node": ">=v14" + "node": ">=v10.22.0" } }, "node_modules/@commitlint/rules": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.7.0.tgz", - "integrity": "sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-9.1.2.tgz", + "integrity": "sha512-1vecFuzqVqjiT57ocXq1bL8V6GEF1NZs3BR0dQzObaqHftImIxBVII299gasckTkcuxNc8M+7XxZyKxUthukpQ==", "dev": true, "dependencies": { - "@commitlint/ensure": "^17.6.7", - "@commitlint/message": "^17.4.2", - "@commitlint/to-lines": "^17.4.0", - "@commitlint/types": "^17.4.4", - "execa": "^5.0.0" + "@commitlint/ensure": "^9.1.2", + "@commitlint/message": "^9.1.2", + "@commitlint/to-lines": "^9.1.2", + "@commitlint/types": "^9.1.2" }, "engines": { - "node": ">=v14" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/rules/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@commitlint/rules/node_modules/@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/rules/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/@commitlint/to-lines": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-9.1.2.tgz", + "integrity": "sha512-o4zWcMf9EnzA3MOqx01780SgrKq5hqDJmUBPk30g6an0XcDuDy3OSZHHTJFdzsg4V9FjC4OY44sFeK7GN7NaxQ==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/rules/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/@commitlint/top-level": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-9.1.2.tgz", + "integrity": "sha512-KMPP5xVePcz3B1dKqcZdU4FZBVOkT+bG3ip4RQX2TeCJoomMkTjd0utALs7rpTGLID6BXbwwXepZCZJREjR/Bw==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "find-up": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=v8.17.0" } }, - "node_modules/@commitlint/rules/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/rules/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/@commitlint/rules/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { "node": ">=8" } }, - "node_modules/@commitlint/rules/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/@commitlint/top-level/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/@commitlint/rules/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, + "node_modules/@commitlint/types": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-11.0.0.tgz", + "integrity": "sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==", + "optional": true, "engines": { - "node": ">=8" + "node": ">=v10.22.0" } }, - "node_modules/@commitlint/rules/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "node_modules/@samverschueren/stream-to-observable": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", + "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "any-observable": "^0.3.0" }, "engines": { - "node": ">= 8" + "node": ">=6" + }, + "peerDependenciesMeta": { + "rxjs": { + "optional": true + }, + "zen-observable": { + "optional": true + } } }, - "node_modules/@commitlint/to-lines": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz", - "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==", - "dev": true, - "engines": { - "node": ">=v14" - } + "node_modules/@types/minimist": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", + "dev": true }, - "node_modules/@commitlint/top-level": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz", - "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "devOptional": true + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "engines": { - "node": ">=v14" + "node": ">=4" } }, - "node_modules/@commitlint/top-level/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, + "node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/@commitlint/top-level/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "devOptional": true, "dependencies": { - "p-locate": "^5.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@commitlint/top-level/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, + "node_modules/any-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/@commitlint/top-level/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "sprintf-js": "~1.0.2" } }, - "node_modules/@commitlint/types": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", - "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==", - "devOptional": true, - "dependencies": { - "chalk": "^4.1.0" - }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "engines": { - "node": ">=v14" + "node": ">=0.10.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "devOptional": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "devOptional": true, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "devOptional": true + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "devOptional": true, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "devOptional": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true - }, - "node_modules/@tsconfig/node14": { + "node_modules/array-uniq": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "devOptional": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.4.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz", - "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==", - "devOptional": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", - "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "devOptional": true, - "bin": { - "acorn": "bin/acorn" - }, + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "devOptional": true, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" } }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "devOptional": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, "engines": { - "node": ">=8" + "node": ">= 4.5.0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dependencies": { - "color-convert": "^2.0.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { - "sprintf-js": "~1.0.2" + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/array-ify": { + "node_modules/base/node_modules/is-accessor-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/at-least-node": { + "node_modules/base/node_modules/is-data-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=0.10.0" } }, - "node_modules/balanced-match": { + "node_modules/base/node_modules/is-descriptor": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/brace-expansion": { @@ -959,43 +742,59 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz", + "integrity": "sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==", "engines": { "node": ">=6" } @@ -1003,7 +802,7 @@ "node_modules/caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dependencies": { "callsites": "^2.0.0" }, @@ -1014,7 +813,7 @@ "node_modules/caller-callsite/node_modules/callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "engines": { "node": ">=4" } @@ -1022,7 +821,7 @@ "node_modules/caller-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dependencies": { "caller-callsite": "^2.0.0" }, @@ -1066,18 +865,59 @@ } }, "node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/chardet": { @@ -1090,61 +930,120 @@ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dependencies": { - "restore-cursor": "^3.1.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dependencies": { + "restore-cursor": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, "node_modules/cli-truncate": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", - "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", - "dev": true, + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", "dependencies": { - "slice-ansi": "^1.0.0", - "string-width": "^2.0.0" + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "engines": { - "node": ">= 10" + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, + "node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + }, "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=8" } }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { @@ -1157,23 +1056,35 @@ } }, "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" }, "engines": { "node": ">=8" } }, "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", @@ -1181,24 +1092,43 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, "engines": { "node": ">=0.8" } }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1209,40 +1139,33 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "devOptional": true }, "node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", - "engines": { - "node": ">=16" - } + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/commitizen": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", - "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.2.3.tgz", + "integrity": "sha512-pYlYEng7XMV2TW4xtjDKBGqeJ0Teq2zyRSx2S3Ml1XAplHSlJZK8vm1KdGclpMEZuGafbS5TeHXIVnHk8RWIzQ==", "dependencies": { - "cachedir": "2.3.0", - "cz-conventional-changelog": "3.3.0", + "cachedir": "2.2.0", + "cz-conventional-changelog": "3.2.0", "dedent": "0.7.0", - "detect-indent": "6.1.0", - "find-node-modules": "^2.1.2", + "detect-indent": "6.0.0", + "find-node-modules": "2.0.0", "find-root": "1.1.0", - "fs-extra": "9.1.0", - "glob": "7.2.3", - "inquirer": "8.2.5", + "fs-extra": "8.1.0", + "glob": "7.1.4", + "inquirer": "6.5.2", "is-utf8": "^0.2.1", - "lodash": "4.17.21", - "minimist": "1.2.7", + "lodash": "^4.17.20", + "minimist": "1.2.5", "strip-bom": "4.0.0", - "strip-json-comments": "3.1.1" + "strip-json-comments": "3.0.1" }, "bin": { "commitizen": "bin/commitizen", @@ -1250,29 +1173,26 @@ "git-cz": "bin/git-cz" }, "engines": { - "node": ">= 12" + "node": ">= 10" } }, - "node_modules/commitizen/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/commitizen/node_modules/cz-conventional-changelog": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz", + "integrity": "sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "chalk": "^2.4.1", + "commitizen": "^4.0.3", + "conventional-commit-types": "^3.0.0", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "word-wrap": "^1.0.3" }, "engines": { - "node": ">=10" - } - }, - "node_modules/commitizen/node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10" + }, + "optionalDependencies": { + "@commitlint/load": ">6.1.1" } }, "node_modules/compare-func": { @@ -1285,33 +1205,72 @@ "dot-prop": "^5.1.0" } }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/conventional-changelog-angular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", + "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", "dev": true, "dependencies": { - "compare-func": "^2.0.0" + "compare-func": "^2.0.0", + "q": "^1.5.1" }, "engines": { - "node": ">=14" + "node": ">=10" } }, "node_modules/conventional-changelog-conventionalcommits": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz", - "integrity": "sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.1.tgz", + "integrity": "sha512-vC02KucnkNNap+foDKFm7BVUSDAXktXrUJqGszUuYnt6T0J2azsbYz/w9TDc3VsrW2v6JOtiQWVcgZnporHr4Q==", + "dev": true, + "dependencies": { + "compare-func": "^1.3.1", + "lodash": "^4.2.1", + "q": "^1.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/conventional-changelog-conventionalcommits/node_modules/compare-func": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz", + "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^3.0.0" + } + }, + "node_modules/conventional-changelog-conventionalcommits/node_modules/dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", "dev": true, "dependencies": { - "compare-func": "^2.0.0" + "is-obj": "^1.0.0" }, "engines": { - "node": ">=14" + "node": ">=0.10.0" + } + }, + "node_modules/conventional-changelog-conventionalcommits/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/conventional-commit-types": { @@ -1320,88 +1279,62 @@ "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==" }, "node_modules/conventional-commits-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", - "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", + "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", "dev": true, "dependencies": { "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0", + "trim-off-newlines": "^1.0.0" }, "bin": { "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=10" } }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "devOptional": true, - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", - "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", - "devOptional": true, - "engines": { - "node": ">=v14.21.3" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=4" + "node_modules/core-js": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", + "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "devOptional": true - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "devOptional": true, + "node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "optional": true, "dependencies": { - "argparse": "^2.0.1" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true - }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -1412,17 +1345,9 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" + }, + "engines": { + "node": ">=4.8" } }, "node_modules/cz-conventional-changelog": { @@ -1444,62 +1369,6 @@ "@commitlint/load": ">6.1.1" } }, - "node_modules/cz-conventional-changelog/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cz-conventional-changelog/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cz-conventional-changelog/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/cz-conventional-changelog/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/cz-conventional-changelog/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/cz-conventional-changelog/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/cz-emoji": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/cz-emoji/-/cz-emoji-1.3.1.tgz", @@ -1521,6 +1390,19 @@ "node": ">=4" } }, + "node_modules/cz-emoji/node_modules/cli-truncate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", + "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", + "dev": true, + "dependencies": { + "slice-ansi": "^1.0.0", + "string-width": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/cz-emoji/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -1582,6 +1464,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cz-emoji/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cz-emoji/node_modules/slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", @@ -1591,35 +1494,32 @@ "node": ">=8" } }, + "node_modules/date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" + }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "ms": "2.0.0" } }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "dependencies": { "decamelize": "^1.1.0", @@ -1627,61 +1527,118 @@ }, "engines": { "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" }, "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, "dependencies": { "clone": "^1.0.2" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dependencies": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=4" } }, "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "engines": { "node": ">=0.10.0" } }, "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", + "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", "engines": { "node": ">=8" } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -1693,15 +1650,19 @@ "node": ">=8" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "node_modules/elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/end-of-stream": { "version": "1.4.4", @@ -1719,119 +1680,247 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, "engines": { "node": ">=6" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" - }, - "node_modules/execa": { + "node_modules/extglob/node_modules/is-accessor-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "kind-of": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dependencies": { - "homedir-polyfill": "^1.0.1" + "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "devOptional": true - }, "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dependencies": { "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dependencies": { - "to-regex-range": "^5.0.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/find-node-modules": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", - "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz", + "integrity": "sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==", "dependencies": { - "findup-sync": "^4.0.0", - "merge": "^2.1.1" + "findup-sync": "^3.0.0", + "merge": "^1.2.1" } }, "node_modules/find-root": { @@ -1840,50 +1929,74 @@ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "locate-path": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dependencies": { "detect-file": "^1.0.0", "is-glob": "^4.0.0", - "micromatch": "^4.0.2", + "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" }, "engines": { - "node": ">= 8" + "node": ">= 0.10" + } + }, + "node_modules/fn-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", + "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=14.14" + "node": ">=6 <7 || >=8" } }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/function-bind": { "version": "1.1.1", @@ -1899,6 +2012,19 @@ "node": ">=6" } }, + "node_modules/g-status": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", + "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", + "dependencies": { + "arrify": "^1.0.1", + "matcher": "^1.0.0", + "simple-git": "^1.85.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1908,6 +2034,19 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "engines": { + "node": ">=4" + } + }, "node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -1919,10 +2058,18 @@ "node": ">=6" } }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", "dev": true, "dependencies": { "dargs": "^7.0.0", @@ -1939,28 +2086,25 @@ } }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "devOptional": true, "dependencies": { "ini": "^1.3.4" @@ -1985,7 +2129,7 @@ "node_modules/global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dependencies": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -1997,10 +2141,33 @@ "node": ">=0.10.0" } }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, "node_modules/hard-rejection": { "version": "2.1.0", @@ -2022,18 +2189,74 @@ "node": ">= 0.4.0" } }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, "engines": { "node": ">=8" } }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/homedir": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/homedir/-/homedir-0.6.0.tgz", - "integrity": "sha512-KZFBHenkVuyyG4uaqRSXqWJr3HTxcaPguM7rU1BlH/mtbDlzaXNSXTa9AhV+fXEjrNemHu9vtLRIaM8/8OW0xA==", + "integrity": "sha1-KyHbZr8Ipts4JJo+/1LX0YcGrx4=", "dev": true }, "node_modules/homedir-polyfill": { @@ -2048,25 +2271,9 @@ } }, "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" }, "node_modules/husky": { "version": "1.3.1", @@ -2106,29 +2313,10 @@ "node": ">=4" } }, - "node_modules/husky/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/husky/node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "engines": { - "node": ">=4" - } - }, "node_modules/husky/node_modules/import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dependencies": { "caller-path": "^2.0.0", "resolve-from": "^3.0.0" @@ -2137,33 +2325,10 @@ "node": ">=4" } }, - "node_modules/husky/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/husky/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/husky/node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -2172,18 +2337,10 @@ "node": ">=4" } }, - "node_modules/husky/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/husky/node_modules/resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "engines": { "node": ">=4" } @@ -2199,25 +2356,6 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2244,18 +2382,17 @@ } }, "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2272,28 +2409,26 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" }, "engines": { - "node": ">=12.0.0" + "node": ">=6.0.0" } }, "node_modules/inquirer-autocomplete-prompt": { @@ -2309,87 +2444,10 @@ "run-async": "^2.3.0" } }, - "node_modules/inquirer-autocomplete-prompt/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/inquirer-autocomplete-prompt/node_modules/chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", - "dev": true - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, "node_modules/inquirer-autocomplete-prompt/node_modules/external-editor": { @@ -2406,27 +2464,6 @@ "node": ">=0.12" } }, - "node_modules/inquirer-autocomplete-prompt/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/inquirer-autocomplete-prompt/node_modules/inquirer": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.0.tgz", @@ -2452,48 +2489,8 @@ "node_modules/inquirer-autocomplete-prompt/node_modules/inquirer/node_modules/ansi-escapes": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", - "integrity": "sha512-tH/fSoQp4DrEodDK3QpdiWiZTSe7sBJ9eOqcQBZ0o9HTM+5M/viSEn+sPMoTuPjQQ8n++w3QJoPEjt8LVPcrCg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, "engines": { "node": ">=4" } @@ -2501,7 +2498,7 @@ "node_modules/inquirer-autocomplete-prompt/node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" @@ -2510,18 +2507,6 @@ "node": ">=4" } }, - "node_modules/inquirer-autocomplete-prompt/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/inquirer-maxlength-input-prompt": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/inquirer-maxlength-input-prompt/-/inquirer-maxlength-input-prompt-1.0.2.tgz", @@ -2538,87 +2523,10 @@ "node": ">=6.0.0" } }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/inquirer-maxlength-input-prompt/node_modules/chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", - "dev": true - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, "node_modules/inquirer-maxlength-input-prompt/node_modules/external-editor": { @@ -2635,89 +2543,28 @@ "node": ">=0.12" } }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/inquirer-maxlength-input-prompt/node_modules/inquirer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", "dev": true, - "dependencies": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.1.0", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^5.5.2", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "dependencies": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, "node_modules/inquirer-maxlength-input-prompt/node_modules/rxjs": { @@ -2735,7 +2582,7 @@ "node_modules/inquirer-maxlength-input-prompt/node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" @@ -2744,83 +2591,46 @@ "node": ">=4" } }, - "node_modules/inquirer-maxlength-input-prompt/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/inquirer-maxlength-input-prompt/node_modules/symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "kind-of": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=0.10.0" } }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-ci": { "version": "2.0.0", @@ -2834,9 +2644,9 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "dependencies": { "has": "^1.0.3" }, @@ -2844,10 +2654,61 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "engines": { "node": ">=0.10.0" } @@ -2855,7 +2716,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "engines": { "node": ">=0.10.0" } @@ -2863,16 +2724,15 @@ "node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "engines": { "node": ">=4" } }, "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2880,20 +2740,26 @@ "node": ">=0.10.0" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { - "node": ">=0.12.0" + "node": ">=0.10.0" } }, "node_modules/is-obj": { @@ -2904,19 +2770,84 @@ "node": ">=8" } }, + "node_modules/is-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", + "dependencies": { + "symbol-observable": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "engines": { "node": ">=0.10.0" } @@ -2924,7 +2855,7 @@ "node_modules/is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, "dependencies": { "text-extensions": "^1.0.0" @@ -2933,21 +2864,10 @@ "node": ">=0.10.0" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, "node_modules/is-windows": { "version": "1.0.2", @@ -2957,10 +2877,23 @@ "node": ">=0.10.0" } }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/js-tokens": { "version": "4.0.0", @@ -2991,19 +2924,10 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "devOptional": true }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "devOptional": true - }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -3011,7 +2935,7 @@ "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true, "engines": [ "node >= 0.2.0" @@ -3037,394 +2961,273 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "engines": { - "node": ">=10" - } - }, "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "devOptional": true }, "node_modules/lint-staged": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", - "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", - "dependencies": { - "chalk": "5.3.0", - "commander": "11.0.0", - "debug": "4.3.4", - "execa": "7.2.0", - "lilconfig": "2.1.0", - "listr2": "6.6.1", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.1" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz", + "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "chalk": "^2.3.1", + "commander": "^2.14.1", + "cosmiconfig": "^5.2.0", + "debug": "^3.1.0", + "dedent": "^0.7.0", + "del": "^3.0.0", + "execa": "^1.0.0", + "g-status": "^2.0.2", + "is-glob": "^4.0.0", + "is-windows": "^1.0.2", + "listr": "^0.14.2", + "listr-update-renderer": "^0.5.0", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "micromatch": "^3.1.8", + "npm-which": "^3.0.1", + "p-map": "^1.1.1", + "path-is-inside": "^1.0.2", + "pify": "^3.0.0", + "please-upgrade-node": "^3.0.2", + "staged-git-files": "1.1.2", + "string-argv": "^0.0.2", + "stringify-object": "^3.2.2", + "yup": "^0.27.0" }, - "engines": { - "node": ">= 8" + "bin": { + "lint-staged": "index.js" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "node_modules/lint-staged/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "node_modules/lint-staged/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "ms": "^2.1.1" } }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/lint-staged/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dependencies": { - "mimic-fn": "^4.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } + "node_modules/lint-staged/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/lint-staged/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/lint-staged/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dependencies": { - "shebang-regex": "^3.0.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/lint-staged/node_modules/shebang-regex": { + "node_modules/lint-staged/node_modules/resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" + "node_modules/listr": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", + "dependencies": { + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/lint-staged/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, + "node_modules/listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/listr2": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", - "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", + "node_modules/listr-update-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^5.0.1", - "rfdc": "^1.3.0", - "wrap-ansi": "^8.1.0" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=6" }, "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } + "listr": "^0.14.2" } }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/listr-update-renderer/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/listr-update-renderer/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "node_modules/listr-update-renderer/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/listr2/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "engines": { - "node": ">=12" + "node_modules/listr-update-renderer/node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "node_modules/listr-update-renderer/node_modules/log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "chalk": "^1.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/listr2/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/listr-update-renderer/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, + "node_modules/listr-update-renderer/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=0.8.0" } }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/listr-verbose-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=4" + } + }, + "node_modules/listr/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "engines": { + "node": ">=6" } }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, "node_modules/lodash.invoke": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/lodash.invoke/-/lodash.invoke-4.5.2.tgz", - "integrity": "sha512-SC4Usc0XbIKuz3eH7oNwPqibKHfTJSGVZwO/6eGhdoPzqexOY7z43pKo8xz0M5zzXSRteADV6fW7cRf6Ru0+VA==", + "integrity": "sha1-AcoH5HCQOv+j/+x60u0icj0vaXw=", "dev": true }, "node_modules/lodash.isfunction": { @@ -3433,240 +3236,45 @@ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", "dev": true }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "devOptional": true - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true - }, "node_modules/lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "devOptional": true - }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "devOptional": true + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" }, "node_modules/lodash.partialright": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", - "integrity": "sha512-yebmPMQZH7i4El6SdJTW9rn8irWl8VTcsmiWqm/I4sY8/ZjbSo0Z512HL6soeAu3mh5rhx5uIIo6kYJOQXbCxw==", - "dev": true - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "devOptional": true - }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=", "dev": true }, - "node_modules/log-update": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", - "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", - "dependencies": { - "ansi-escapes": "^5.0.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^5.0.0", - "strip-ansi": "^7.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", - "dependencies": { - "type-fest": "^1.0.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" + "chalk": "^2.0.1" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=4" } }, "node_modules/longest": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", - "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", + "integrity": "sha1-eB4YMpaqlPbU2RbcM10NF676I/g=", "engines": { "node": ">=0.10.0" } @@ -3683,22 +3291,43 @@ "node": ">=10" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", "dev": true, "engines": { "node": ">=8" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dependencies": { + "object-visit": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matcher": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", + "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "dependencies": { + "escape-string-regexp": "^1.0.4" + }, + "engines": { + "node": ">=4" } }, "node_modules/meow": { @@ -3726,46 +3355,82 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/meow/node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "engines": { "node": ">=10" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", + "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^3.0.6", + "resolve": "^1.17.0", + "semver": "^7.3.2", + "validate-npm-package-license": "^3.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/merge": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", - "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" + "node_modules/meow/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "engines": { - "node": ">=8.6" + "node": ">=0.10.0" } }, "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/min-indent": { @@ -3778,9 +3443,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3789,12 +3454,9 @@ } }, "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "node_modules/minimist-options": { "version": "4.1.0", @@ -3810,15 +3472,59 @@ "node": ">= 6" } }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/nice-try": { "version": "1.0.5", @@ -3826,24 +3532,34 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/npm-path": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", + "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "dependencies": { + "which": "^1.2.10" + }, + "bin": { + "npm-path": "bin/npm-path" }, "engines": { - "node": ">=10" + "node": ">=0.8" } }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dependencies": { "path-key": "^2.0.0" }, @@ -3851,69 +3567,118 @@ "node": ">=4" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", "dependencies": { - "wrappy": "1" + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" + }, + "bin": { + "npm-which": "bin/npm-which.js" + }, + "engines": { + "node": ">=4.2.0" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dependencies": { - "mimic-fn": "^2.1.0" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dependencies": { + "isobject": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ora/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "isobject": "^3.0.1" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dependencies": { + "mimic-fn": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "engines": { "node": ">=0.10.0" } @@ -3921,7 +3686,7 @@ "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "engines": { "node": ">=4" } @@ -3941,15 +3706,22 @@ } }, "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "engines": { + "node": ">=4" } }, "node_modules/p-try": { @@ -4005,40 +3777,52 @@ "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "engines": { "node": ">=0.10.0" } }, "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "engines": { "node": ">=0.10.0" } }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, "node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "engines": { "node": ">=4" } }, "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "node_modules/path-type": { "version": "4.0.0", @@ -4049,89 +3833,44 @@ "node": ">=8" } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "engines": { "node": ">=4" } }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "pinkie": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/pkg-dir/node_modules/p-locate": { + "node_modules/pkg-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dependencies": { - "p-limit": "^2.0.0" + "find-up": "^3.0.0" }, "engines": { "node": ">=6" } }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/please-upgrade-node": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", @@ -4140,6 +3879,14 @@ "semver-compare": "^1.0.0" } }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/prettier": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", @@ -4152,6 +3899,11 @@ "node": ">=4" } }, + "node_modules/property-expr": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", + "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==" + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -4161,13 +3913,14 @@ "once": "^1.3.1" } }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "devOptional": true, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, "engines": { - "node": ">=6" + "node": ">=0.6.0", + "teleport": ">=0.2.0" } }, "node_modules/quick-lru": { @@ -4182,7 +3935,7 @@ "node_modules/read-pkg": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha512-+UBirHHDm5J+3WDmLBZYSklRYg82nMlz+enn+GMZ22nSR2f4bzxmhso6rzQW/3mT2PVzpzDTiYIZahk8UmZ44w==", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", "dependencies": { "normalize-package-data": "^2.3.2", "parse-json": "^4.0.0", @@ -4204,27 +3957,55 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/read-pkg-up/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg-up/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "engines": { + "node": ">=8" } }, "node_modules/read-pkg-up/node_modules/read-pkg": { @@ -4251,15 +4032,6 @@ "node": ">=8" } }, - "node_modules/read-pkg-up/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -4269,26 +4041,10 @@ "node": ">=8" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, "node_modules/read-pkg/node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -4297,18 +4053,11 @@ "node": ">=4" } }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4331,35 +4080,70 @@ "node": ">=8" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/redent/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "devOptional": true, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "node_modules/resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4368,7 +4152,7 @@ "node_modules/resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dependencies": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -4392,163 +4176,392 @@ "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "devOptional": true, "dependencies": { - "global-dirs": "^0.1.1" + "global-dirs": "^0.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", + "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", + "bin": { + "run-node": "run-node" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "node_modules/rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "dependencies": { + "rx-lite": "*" + } + }, + "node_modules/rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/simple-git": { + "version": "1.132.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz", + "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", + "dependencies": { + "debug": "^4.0.1" + } + }, + "node_modules/simple-git/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/simple-git/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "is-descriptor": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">=0.10.0" } }, - "node_modules/run-node": { + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", - "bin": { - "run-node": "run-node" + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==", - "dev": true - }, - "node_modules/rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==", - "dev": true, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dependencies": { - "rx-lite": "*" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dependencies": { - "tslib": "^2.1.0" + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "shebang-regex": "^1.0.0" + "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dependencies": { - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=4" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -4569,9 +4582,20 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", - "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/split2": { "version": "3.2.2", @@ -4585,20 +4609,52 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/staged-git-files": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", + "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==", + "bin": { + "sgf": "bin/cli.js" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", + "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", "engines": { "node": ">=0.6.19" } @@ -4607,7 +4663,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -4616,20 +4671,10 @@ "node": ">=4" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/string-width/node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -4637,15 +4682,44 @@ "node": ">=4" } }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">=6" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" } }, "node_modules/strip-bom": { @@ -4659,20 +4733,11 @@ "node_modules/strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "engines": { "node": ">=0.10.0" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -4686,20 +4751,18 @@ } }, "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4707,17 +4770,19 @@ "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, + "node_modules/synchronous-promise": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.15.tgz", + "integrity": "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==" + }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -4730,7 +4795,7 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "node_modules/through2": { "version": "4.0.2", @@ -4752,125 +4817,179 @@ "node": ">=0.6.0" } }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/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==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dependencies": { - "is-number": "^7.0.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": ">=8.0" + "node": ">=0.10.0" } }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" + }, "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "devOptional": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "node_modules/trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "devOptional": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dependencies": { + "isarray": "1.0.0" }, "engines": { - "node": ">=14.17" + "node": ">=0.10.0" } }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "engines": { - "node": ">= 10.0.0" + "node": ">=0.10.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "devOptional": true, - "dependencies": { - "punycode": "^2.1.0" + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "node_modules/validate-npm-package-license": { "version": "3.0.4", @@ -4884,7 +5003,8 @@ "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, "dependencies": { "defaults": "^1.0.3" } @@ -4900,10 +5020,16 @@ "which": "bin/which" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "engines": { "node": ">=0.10.0" } @@ -4911,8 +5037,7 @@ "node_modules/wrap-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", - "dev": true, + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", "dependencies": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0" @@ -4921,20 +5046,10 @@ "node": ">=4" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -4945,16 +5060,13 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true }, "node_modules/yallist": { "version": "4.0.0", @@ -4963,40 +5075,67 @@ "dev": true }, "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "devOptional": true, "engines": { - "node": ">= 14" + "node": ">= 6" } }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "engines": { - "node": ">=12" + "node": ">=8" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz", + "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==", "dev": true, "engines": { "node": ">=10" } }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -5006,34 +5145,74 @@ "node": ">=8" } }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, "engines": { "node": ">=6" } @@ -5049,656 +5228,443 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/yup": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", + "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "fn-name": "~2.0.1", + "lodash": "^4.17.11", + "property-expr": "^1.5.0", + "synchronous-promise": "^2.0.6", + "toposort": "^2.0.2" + } } }, "dependencies": { "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "devOptional": true, "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "devOptional": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "devOptional": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "devOptional": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "devOptional": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "devOptional": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "devOptional": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "@babel/highlight": "^7.12.13" } }, "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "devOptional": true }, "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", "devOptional": true, "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "devOptional": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "devOptional": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "devOptional": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "devOptional": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "devOptional": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "devOptional": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, - "@commitlint/cli": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.7.1.tgz", - "integrity": "sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==", - "dev": true, + "@babel/runtime": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { - "@commitlint/format": "^17.4.4", - "@commitlint/lint": "^17.7.0", - "@commitlint/load": "^17.7.1", - "@commitlint/read": "^17.5.1", - "@commitlint/types": "^17.4.4", - "execa": "^5.0.0", - "lodash.isfunction": "^3.0.9", + "regenerator-runtime": "^0.13.4" + } + }, + "@commitlint/cli": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-9.1.2.tgz", + "integrity": "sha512-ctRrrPqjZ8r4Vc4FXpPaScEpkPwfvB0Us3NK2SD2AnLwXGMxOLFTabDmNySU1Xc40ud2CmJsaV8lpavvzs8ZZA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.9.6", + "@commitlint/format": "^9.1.2", + "@commitlint/lint": "^9.1.2", + "@commitlint/load": "^9.1.2", + "@commitlint/read": "^9.1.2", + "chalk": "4.1.0", + "core-js": "^3.6.1", + "get-stdin": "7.0.0", + "lodash": "^4.17.19", "resolve-from": "5.0.0", "resolve-global": "1.0.0", - "yargs": "^17.0.0" + "yargs": "^15.1.0" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "@commitlint/execute-rule": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-9.1.2.tgz", + "integrity": "sha512-NGbeo0KCVYo1yj9vVPFHv6RGFpIF6wcQxpFYUKGIzZVV9Vz1WyiKS689JXa99Dt1aN0cZlEJJLnTNDIgYls0Vg==", + "dev": true + }, + "@commitlint/load": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-9.1.2.tgz", + "integrity": "sha512-FPL82xBuF7J3EJ57kLVoligQP4BFRwrknooP+vNT787AXmQ/Fddc/iYYwHwy67pNkk5N++/51UyDl/CqiHb6nA==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@commitlint/execute-rule": "^9.1.2", + "@commitlint/resolve-extends": "^9.1.2", + "@commitlint/types": "^9.1.2", + "chalk": "4.1.0", + "cosmiconfig": "^6.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0" } }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "@commitlint/resolve-extends": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-9.1.2.tgz", + "integrity": "sha512-HcoL+qFGmWEu9VM4fY0HI+VzF4yHcg3x+9Hx6pYFZ+r2wLbnKs964y0v68oyMO/mS/46MVoLNXZGR8U3adpadg==", "dev": true, "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" } }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", "dev": true }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { - "path-key": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, "requires": { - "shebang-regex": "^3.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, "@commitlint/config-conventional": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.7.0.tgz", - "integrity": "sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-8.3.4.tgz", + "integrity": "sha512-w0Yc5+aVAjZgjYqx29igBOnVCj8O22gy3Vo6Fyp7PwoS7+AYS1x3sN7IBq6i7Ae15Mv5P+rEx1pkxXo5zOMe4g==", "dev": true, "requires": { - "conventional-changelog-conventionalcommits": "^6.1.0" - } - }, - "@commitlint/config-validator": { - "version": "17.6.7", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz", - "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==", - "devOptional": true, - "requires": { - "@commitlint/types": "^17.4.4", - "ajv": "^8.11.0" + "conventional-changelog-conventionalcommits": "4.2.1" } }, "@commitlint/ensure": { - "version": "17.6.7", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz", - "integrity": "sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-9.1.2.tgz", + "integrity": "sha512-hwQICwpNSTsZgj/1/SdPvYAzhwjwgCJI4vLbT879+Jc+AJ6sj2bUDGw/F89vzgKz1VnaMm4D65bNhoWhG3pdhQ==", "dev": true, "requires": { - "@commitlint/types": "^17.4.4", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" + "@commitlint/types": "^9.1.2", + "lodash": "^4.17.19" + }, + "dependencies": { + "@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "dev": true + } } }, "@commitlint/execute-rule": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz", - "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==", - "devOptional": true + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-11.0.0.tgz", + "integrity": "sha512-g01p1g4BmYlZ2+tdotCavrMunnPFPhTzG1ZiLKTCYrooHRbmvqo42ZZn4QMStUEIcn+jfLb6BRZX3JzIwA1ezQ==", + "optional": true }, "@commitlint/format": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz", - "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-9.1.2.tgz", + "integrity": "sha512-+ZWTOSGEU6dbn3NRh1q7sY5K5QLiSs7E2uSzuYnWHXcQk8nlTvnE0ibwMCQxdKLaOTZiN57fHM/7M9Re2gsRuw==", "dev": true, "requires": { - "@commitlint/types": "^17.4.4", - "chalk": "^4.1.0" + "@commitlint/types": "^9.1.2", + "chalk": "^4.0.0" + }, + "dependencies": { + "@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "@commitlint/is-ignored": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz", - "integrity": "sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-9.1.2.tgz", + "integrity": "sha512-423W/+Ro+Cc8cg81+t9gds1EscMZNjnGT31nKDvxVxJxXiXQsYYoFEQbU+nfUrRGQsUikEgEJ3ppVGr1linvcQ==", "dev": true, "requires": { - "@commitlint/types": "^17.4.4", - "semver": "7.5.4" + "@commitlint/types": "^9.1.2", + "semver": "7.3.2" + }, + "dependencies": { + "@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } } }, "@commitlint/lint": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.7.0.tgz", - "integrity": "sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-9.1.2.tgz", + "integrity": "sha512-XvggqHZ4XSTKOgzJhCzz52cWRRO57QQnEviwGj0qnD4jdwC+8h2u9LNZwoa2tGAuaNM3nSm//wNK7FRZhgiiFA==", "dev": true, "requires": { - "@commitlint/is-ignored": "^17.7.0", - "@commitlint/parse": "^17.7.0", - "@commitlint/rules": "^17.7.0", - "@commitlint/types": "^17.4.4" + "@commitlint/is-ignored": "^9.1.2", + "@commitlint/parse": "^9.1.2", + "@commitlint/rules": "^9.1.2", + "@commitlint/types": "^9.1.2" + }, + "dependencies": { + "@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", + "dev": true + } } }, "@commitlint/load": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.1.tgz", - "integrity": "sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==", - "devOptional": true, - "requires": { - "@commitlint/config-validator": "^17.6.7", - "@commitlint/execute-rule": "^17.4.0", - "@commitlint/resolve-extends": "^17.6.7", - "@commitlint/types": "^17.4.4", - "@types/node": "20.4.7", - "chalk": "^4.1.0", - "cosmiconfig": "^8.0.0", - "cosmiconfig-typescript-loader": "^4.0.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0", - "ts-node": "^10.8.1", - "typescript": "^4.6.4 || ^5.0.0" + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-11.0.0.tgz", + "integrity": "sha512-t5ZBrtgvgCwPfxmG811FCp39/o3SJ7L+SNsxFL92OR4WQxPcu6c8taD0CG2lzOHGuRyuMxZ7ps3EbngT2WpiCg==", + "optional": true, + "requires": { + "@commitlint/execute-rule": "^11.0.0", + "@commitlint/resolve-extends": "^11.0.0", + "@commitlint/types": "^11.0.0", + "chalk": "4.1.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "@commitlint/message": { - "version": "17.4.2", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz", - "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-9.1.2.tgz", + "integrity": "sha512-ndlx5z7bPVLG347oYJUHuQ41eTcsw+aUYT1ZwQyci0Duy2atpuoeeSw9SuM1PjufzRCpb6ExzFEgGzcCRKAJsg==", "dev": true }, "@commitlint/parse": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.7.0.tgz", - "integrity": "sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-9.1.2.tgz", + "integrity": "sha512-d+/VYbkotctW+lzDpus/R6xTerOqFQkW1myH+3PwnqYSE6JU/uHT4MlZNGJBv8pX9SPlR66t6X9puFobqtezEw==", "dev": true, "requires": { - "@commitlint/types": "^17.4.4", - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-parser": "^4.0.0" + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-parser": "^3.0.0" } }, "@commitlint/read": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz", - "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-9.1.2.tgz", + "integrity": "sha512-C2sNBQOqeQXMxpWtRnXYKYB3D9yuybPtQNY/P67A6o8XH/UMHkFaUTyIx1KRgu0IG0yTTItRt46FGnsMWLotvA==", "dev": true, "requires": { - "@commitlint/top-level": "^17.4.0", - "@commitlint/types": "^17.4.4", - "fs-extra": "^11.0.0", - "git-raw-commits": "^2.0.11", - "minimist": "^1.2.6" + "@commitlint/top-level": "^9.1.2", + "fs-extra": "^8.1.0", + "git-raw-commits": "^2.0.0" } }, "@commitlint/resolve-extends": { - "version": "17.6.7", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz", - "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==", - "devOptional": true, + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-11.0.0.tgz", + "integrity": "sha512-WinU6Uv6L7HDGLqn/To13KM1CWvZ09VHZqryqxXa1OY+EvJkfU734CwnOEeNlSCK7FVLrB4kmodLJtL1dkEpXw==", + "optional": true, "requires": { - "@commitlint/config-validator": "^17.6.7", - "@commitlint/types": "^17.4.4", "import-fresh": "^3.0.0", - "lodash.mergewith": "^4.6.2", + "lodash": "^4.17.19", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0" } }, "@commitlint/rules": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.7.0.tgz", - "integrity": "sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-9.1.2.tgz", + "integrity": "sha512-1vecFuzqVqjiT57ocXq1bL8V6GEF1NZs3BR0dQzObaqHftImIxBVII299gasckTkcuxNc8M+7XxZyKxUthukpQ==", "dev": true, "requires": { - "@commitlint/ensure": "^17.6.7", - "@commitlint/message": "^17.4.2", - "@commitlint/to-lines": "^17.4.0", - "@commitlint/types": "^17.4.4", - "execa": "^5.0.0" + "@commitlint/ensure": "^9.1.2", + "@commitlint/message": "^9.1.2", + "@commitlint/to-lines": "^9.1.2", + "@commitlint/types": "^9.1.2" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "@commitlint/types": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.1.2.tgz", + "integrity": "sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==", "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, "@commitlint/to-lines": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz", - "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-9.1.2.tgz", + "integrity": "sha512-o4zWcMf9EnzA3MOqx01780SgrKq5hqDJmUBPk30g6an0XcDuDy3OSZHHTJFdzsg4V9FjC4OY44sFeK7GN7NaxQ==", "dev": true }, "@commitlint/top-level": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz", - "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-9.1.2.tgz", + "integrity": "sha512-KMPP5xVePcz3B1dKqcZdU4FZBVOkT+bG3ip4RQX2TeCJoomMkTjd0utALs7rpTGLID6BXbwwXepZCZJREjR/Bw==", "dev": true, "requires": { - "find-up": "^5.0.0" + "find-up": "^4.0.0" }, "dependencies": { "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^6.0.0", + "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "p-locate": "^4.1.0" } }, "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^3.0.2" + "p-limit": "^2.2.0" } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true } } }, "@commitlint/types": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", - "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==", - "devOptional": true, - "requires": { - "chalk": "^4.1.0" - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "devOptional": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "devOptional": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "devOptional": true + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-11.0.0.tgz", + "integrity": "sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==", + "optional": true }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "devOptional": true, + "@samverschueren/stream-to-observable": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", + "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "any-observable": "^0.3.0" } }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "devOptional": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true - }, - "@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "devOptional": true - }, "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", "dev": true }, - "@types/node": { - "version": "20.4.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz", - "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==", - "devOptional": true - }, "@types/normalize-package-data": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", - "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "devOptional": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "devOptional": true }, - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "devOptional": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" }, "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "devOptional": true, "requires": { "color-convert": "^2.0.1" } }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true + "any-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==" }, "argparse": { "version": "1.0.10", @@ -5708,41 +5674,113 @@ "sprintf-js": "~1.0.2" } }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, "array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, - "at-least-node": { + "assign-symbols": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, "brace-expansion": { @@ -5755,31 +5793,57 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz", + "integrity": "sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==" }, "caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "requires": { "callsites": "^2.0.0" }, @@ -5787,14 +5851,14 @@ "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==" + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" } } }, "caller-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "requires": { "caller-callsite": "^2.0.0" } @@ -5823,12 +5887,49 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "chardet": { @@ -5841,45 +5942,99 @@ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { - "restore-cursor": "^3.1.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } } }, - "cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==" + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } }, "cli-truncate": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", - "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", - "dev": true, + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", "requires": { - "slice-ansi": "^1.0.0", - "string-width": "^2.0.0" + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" }, "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" }, "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "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", @@ -5887,20 +6042,29 @@ "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==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" } }, "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==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -5913,12 +6077,28 @@ "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.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==", + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -5926,54 +6106,48 @@ "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==" - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "devOptional": true }, "commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==" + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "commitizen": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", - "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.2.3.tgz", + "integrity": "sha512-pYlYEng7XMV2TW4xtjDKBGqeJ0Teq2zyRSx2S3Ml1XAplHSlJZK8vm1KdGclpMEZuGafbS5TeHXIVnHk8RWIzQ==", "requires": { - "cachedir": "2.3.0", - "cz-conventional-changelog": "3.3.0", + "cachedir": "2.2.0", + "cz-conventional-changelog": "3.2.0", "dedent": "0.7.0", - "detect-indent": "6.1.0", - "find-node-modules": "^2.1.2", + "detect-indent": "6.0.0", + "find-node-modules": "2.0.0", "find-root": "1.1.0", - "fs-extra": "9.1.0", - "glob": "7.2.3", - "inquirer": "8.2.5", + "fs-extra": "8.1.0", + "glob": "7.1.4", + "inquirer": "6.5.2", "is-utf8": "^0.2.1", - "lodash": "4.17.21", - "minimist": "1.2.7", + "lodash": "^4.17.20", + "minimist": "1.2.5", "strip-bom": "4.0.0", - "strip-json-comments": "3.1.1" + "strip-json-comments": "3.0.1" }, "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "cz-conventional-changelog": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz", + "integrity": "sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==", "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@commitlint/load": ">6.1.1", + "chalk": "^2.4.1", + "commitizen": "^4.0.3", + "conventional-commit-types": "^3.0.0", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "word-wrap": "^1.0.3" } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" } } }, @@ -5987,27 +6161,62 @@ "dot-prop": "^5.1.0" } }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "conventional-changelog-angular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", + "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", "dev": true, "requires": { - "compare-func": "^2.0.0" + "compare-func": "^2.0.0", + "q": "^1.5.1" } }, "conventional-changelog-conventionalcommits": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz", - "integrity": "sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.1.tgz", + "integrity": "sha512-vC02KucnkNNap+foDKFm7BVUSDAXktXrUJqGszUuYnt6T0J2azsbYz/w9TDc3VsrW2v6JOtiQWVcgZnporHr4Q==", "dev": true, "requires": { - "compare-func": "^2.0.0" + "compare-func": "^1.3.1", + "lodash": "^4.2.1", + "q": "^1.5.1" + }, + "dependencies": { + "compare-func": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz", + "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^3.0.0" + } + }, + "dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + } } }, "conventional-commit-types": { @@ -6016,59 +6225,44 @@ "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==" }, "conventional-commits-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", - "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", + "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", "dev": true, "requires": { "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0", + "trim-off-newlines": "^1.0.0" } }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", + "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", + "dev": true + }, "cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "devOptional": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "optional": true, "requires": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "devOptional": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "devOptional": true, - "requires": { - "argparse": "^2.0.1" - } - } + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, - "cosmiconfig-typescript-loader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", - "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", - "devOptional": true, - "requires": {} - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true - }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -6079,13 +6273,6 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - } } }, "cz-conventional-changelog": { @@ -6100,52 +6287,6 @@ "lodash.map": "^4.5.1", "longest": "^2.0.1", "word-wrap": "^1.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "cz-emoji": { @@ -6166,6 +6307,16 @@ "wrap-ansi": "^3.0.0" }, "dependencies": { + "cli-truncate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", + "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", + "dev": true, + "requires": { + "slice-ansi": "^1.0.0", + "string-width": "^2.0.0" + } + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -6202,6 +6353,21 @@ "requires": { "p-limit": "^3.0.2" } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } } } }, @@ -6211,24 +6377,29 @@ "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true }, + "date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" + }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ms": "2.1.2" + "ms": "2.0.0" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "requires": { "decamelize": "^1.1.0", @@ -6238,39 +6409,89 @@ "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true } } }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" }, "defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, "requires": { "clone": "^1.0.2" } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + } + }, "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==" + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" }, "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", + "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==" }, "dot-prop": { "version": "5.3.0", @@ -6280,15 +6501,16 @@ "is-obj": "^2.0.0" } }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" }, "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "end-of-stream": { "version": "1.4.4", @@ -6306,27 +6528,16 @@ "is-arrayish": "^0.2.1" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, - "eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -6341,14 +6552,65 @@ "strip-eof": "^1.0.0" } }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "requires": { "homedir-polyfill": "^1.0.1" } }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -6359,35 +6621,101 @@ "tmp": "^0.0.33" } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "devOptional": true + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } }, "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { "escape-string-regexp": "^1.0.5" } }, "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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "to-regex-range": "^5.0.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "find-node-modules": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", - "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz", + "integrity": "sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==", "requires": { - "findup-sync": "^4.0.0", - "merge": "^2.1.1" + "findup-sync": "^3.0.0", + "merge": "^1.2.1" } }, "find-root": { @@ -6396,41 +6724,56 @@ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "locate-path": "^3.0.0" } }, "findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "requires": { "detect-file": "^1.0.0", "is-glob": "^4.0.0", - "micromatch": "^4.0.2", + "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" } }, + "fn-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", + "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "requires": { "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "function-bind": { "version": "1.1.1", @@ -6443,12 +6786,32 @@ "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", "dev": true }, + "g-status": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", + "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", + "requires": { + "arrify": "^1.0.1", + "matcher": "^1.0.0", + "simple-git": "^1.85.0" + } + }, "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 }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -6457,10 +6820,15 @@ "pump": "^3.0.0" } }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, "git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", "dev": true, "requires": { "dargs": "^7.0.0", @@ -6471,14 +6839,14 @@ } }, "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -6486,7 +6854,7 @@ "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "devOptional": true, "requires": { "ini": "^1.3.4" @@ -6505,7 +6873,7 @@ "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "requires": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -6514,10 +6882,29 @@ "which": "^1.2.14" } }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, "hard-rejection": { "version": "2.1.0", @@ -6533,15 +6920,60 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } }, "homedir": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/homedir/-/homedir-0.6.0.tgz", - "integrity": "sha512-KZFBHenkVuyyG4uaqRSXqWJr3HTxcaPguM7rU1BlH/mtbDlzaXNSXTa9AhV+fXEjrNemHu9vtLRIaM8/8OW0xA==", + "integrity": "sha1-KyHbZr8Ipts4JJo+/1LX0YcGrx4=", "dev": true }, "homedir-polyfill": { @@ -6553,19 +6985,9 @@ } }, "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" }, "husky": { "version": "1.3.1", @@ -6595,63 +7017,28 @@ "parse-json": "^4.0.0" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" - }, "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "requires": { "caller-path": "^2.0.0", "resolve-from": "^3.0.0" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - }, "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" } } }, @@ -6663,11 +7050,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -6687,15 +7069,14 @@ } }, "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -6712,61 +7093,23 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.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==" - }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "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==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" } }, "inquirer-autocomplete-prompt": { @@ -6782,72 +7125,10 @@ "run-async": "^2.3.0" }, "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, "external-editor": { @@ -6861,21 +7142,6 @@ "tmp": "^0.0.33" } }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, "inquirer": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.0.tgz", @@ -6901,59 +7167,19 @@ "ansi-escapes": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", - "integrity": "sha512-tH/fSoQp4DrEodDK3QpdiWiZTSe7sBJ9eOqcQBZ0o9HTM+5M/viSEn+sPMoTuPjQQ8n++w3QJoPEjt8LVPcrCg==", + "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", "dev": true } } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "^3.0.0" } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -6970,72 +7196,10 @@ "lodash.partialright": "^4.2.1" }, "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, "external-editor": { @@ -7049,21 +7213,6 @@ "tmp": "^0.0.33" } }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, "inquirer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", @@ -7081,39 +7230,8 @@ "run-async": "^2.2.0", "rxjs": "^5.5.2", "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "strip-ansi": "^4.0.0", + "through": "^2.3.6" } }, "rxjs": { @@ -7128,33 +7246,47 @@ "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, "symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", "dev": true } } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-ci": { "version": "2.0.0", @@ -7165,91 +7297,190 @@ } }, "is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "requires": { "has": "^1.0.3" } }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==" + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "requires": { "is-extglob": "^2.1.1" } }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - }, "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, + "is-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", + "requires": { + "symbol-observable": "^1.1.0" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, "requires": { "text-extensions": "^1.0.0" } }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "js-tokens": { "version": "4.0.0", @@ -7277,25 +7508,18 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "devOptional": true }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "devOptional": true - }, "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "graceful-fs": "^4.1.6" } }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, "JSONStream": { @@ -7311,421 +7535,261 @@ "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "devOptional": true }, "lint-staged": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", - "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", - "requires": { - "chalk": "5.3.0", - "commander": "11.0.0", - "debug": "4.3.4", - "execa": "7.2.0", - "lilconfig": "2.1.0", - "listr2": "6.6.1", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.1" + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz", + "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", + "requires": { + "chalk": "^2.3.1", + "commander": "^2.14.1", + "cosmiconfig": "^5.2.0", + "debug": "^3.1.0", + "dedent": "^0.7.0", + "del": "^3.0.0", + "execa": "^1.0.0", + "g-status": "^2.0.2", + "is-glob": "^4.0.0", + "is-windows": "^1.0.2", + "listr": "^0.14.2", + "listr-update-renderer": "^0.5.0", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "micromatch": "^3.1.8", + "npm-which": "^3.0.1", + "p-map": "^1.1.1", + "path-is-inside": "^1.0.2", + "pify": "^3.0.0", + "please-upgrade-node": "^3.0.2", + "staged-git-files": "1.1.2", + "string-argv": "^0.0.2", + "stringify-object": "^3.2.2", + "yup": "^0.27.0" }, "dependencies": { - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" } }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" - } + "ms": "^2.1.1" } }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "requires": { - "mimic-fn": "^4.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { - "shebang-regex": "^3.0.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "strip-final-newline": { + "resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" } } }, - "listr2": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", - "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", + "listr": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^5.0.1", - "rfdc": "^1.3.0", - "wrap-ansi": "^8.1.0" + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - } - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" - }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - } - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" } } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "lodash.invoke": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.invoke/-/lodash.invoke-4.5.2.tgz", - "integrity": "sha512-SC4Usc0XbIKuz3eH7oNwPqibKHfTJSGVZwO/6eGhdoPzqexOY7z43pKo8xz0M5zzXSRteADV6fW7cRf6Ru0+VA==", - "dev": true - }, - "lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "devOptional": true - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "devOptional": true - }, - "lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "devOptional": true - }, - "lodash.partialright": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", - "integrity": "sha512-yebmPMQZH7i4El6SdJTW9rn8irWl8VTcsmiWqm/I4sY8/ZjbSo0Z512HL6soeAu3mh5rhx5uIIo6kYJOQXbCxw==", - "dev": true - }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "devOptional": true - }, - "lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "dev": true + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" }, - "log-update": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", - "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", + "listr-update-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", "requires": { - "ansi-escapes": "^5.0.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^5.0.0", - "strip-ansi": "^7.0.1", - "wrap-ansi": "^8.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" }, "dependencies": { - "ansi-escapes": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", - "requires": { - "type-fest": "^1.0.2" - } - }, "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - }, - "cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "requires": { - "restore-cursor": "^4.0.0" - } - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, - "restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "chalk": "^1.0.0" } }, "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^2.0.0" } }, - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, + "listr-verbose-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "requires": { + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.invoke": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.invoke/-/lodash.invoke-4.5.2.tgz", + "integrity": "sha1-AcoH5HCQOv+j/+x60u0icj0vaXw=", + "dev": true + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, + "lodash.partialright": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", + "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" + } + }, + "log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "requires": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + } + }, "longest": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", - "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==" + "integrity": "sha1-eB4YMpaqlPbU2RbcM10NF676I/g=" }, "lru-cache": { "version": "6.0.0", @@ -7736,18 +7800,33 @@ "yallist": "^4.0.0" } }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", "dev": true }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "matcher": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", + "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "requires": { + "escape-string-regexp": "^1.0.4" + } + }, "meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -7767,37 +7846,67 @@ "yargs-parser": "^20.2.3" }, "dependencies": { - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true + "hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", + "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", + "dev": true, + "requires": { + "hosted-git-info": "^3.0.6", + "resolve": "^1.17.0", + "semver": "^7.3.2", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "merge": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", - "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "min-indent": { "version": "1.0.1", @@ -7806,17 +7915,17 @@ "dev": true }, "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minimist-options": { "version": "4.1.0", @@ -7829,15 +7938,52 @@ "kind-of": "^6.0.3" } }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } }, "nice-try": { "version": "1.0.5", @@ -7845,77 +7991,121 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, + "npm-path": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", + "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "requires": { + "which": "^1.2.10" + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { "path-key": "^2.0.0" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", "requires": { - "wrappy": "1" + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" } } } }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { "version": "2.3.0", @@ -7926,14 +8116,18 @@ } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "requires": { - "p-limit": "^2.2.0" + "p-limit": "^2.0.0" } }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -7972,28 +8166,37 @@ "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-type": { "version": "4.0.0", @@ -8001,20 +8204,23 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "devOptional": true }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==" - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } }, "pkg-dir": { "version": "3.0.0", @@ -8022,38 +8228,6 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "requires": { "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - } } }, "please-upgrade-node": { @@ -8064,12 +8238,22 @@ "semver-compare": "^1.0.0" } }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, "prettier": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, + "property-expr": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", + "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==" + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -8079,11 +8263,11 @@ "once": "^1.3.1" } }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "devOptional": true + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true }, "quick-lru": { "version": "4.0.1", @@ -8094,42 +8278,21 @@ "read-pkg": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha512-+UBirHHDm5J+3WDmLBZYSklRYg82nMlz+enn+GMZ22nSR2f4bzxmhso6rzQW/3mT2PVzpzDTiYIZahk8UmZ44w==", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", "requires": { "normalize-package-data": "^2.3.2", "parse-json": "^4.0.0", "pify": "^3.0.0" }, "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, @@ -8144,24 +8307,40 @@ "type-fest": "^0.8.1" }, "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -8182,12 +8361,6 @@ } } }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -8197,9 +8370,10 @@ } }, "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -8212,36 +8386,67 @@ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + } + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "devOptional": true + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, "resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -8262,19 +8467,32 @@ "global-dirs": "^0.1.1" } }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { - "onetime": "^5.1.0", + "onetime": "^2.0.0", "signal-exit": "^3.0.2" } }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } }, "run-async": { "version": "2.4.1", @@ -8289,30 +8507,39 @@ "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", "dev": true }, "rx-lite-aggregates": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { "rx-lite": "*" } }, "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", "requires": { - "tslib": "^2.1.0" + "tslib": "^1.9.0" } }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } }, "safer-buffer": { "version": "2.1.2", @@ -8320,23 +8547,46 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { "shebang-regex": "^1.0.0" } @@ -8344,12 +8594,35 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-git": { + "version": "1.132.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz", + "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", + "requires": { + "debug": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } }, "slash": { "version": "2.0.0", @@ -8357,18 +8630,133 @@ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "requires": { - "is-fullwidth-code-point": "^2.0.0" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -8389,9 +8777,17 @@ } }, "spdx-license-ids": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", - "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } }, "split2": { "version": "3.2.2", @@ -8405,54 +8801,95 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "staged-git-files": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", + "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } }, "string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==" + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", + "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=" }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" } } } }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + } + } + }, "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + } } }, "strip-bom": { @@ -8463,13 +8900,7 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-indent": { "version": "3.0.0", @@ -8481,22 +8912,28 @@ } }, "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "devOptional": true, "requires": { "has-flag": "^4.0.0" } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "synchronous-promise": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.15.tgz", + "integrity": "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==" }, "text-extensions": { "version": "1.9.0", @@ -8507,7 +8944,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "4.0.2", @@ -8526,81 +8963,139 @@ "os-tmpdir": "~1.0.2" } }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, "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==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { - "is-number": "^7.0.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, + "toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" + }, "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", "dev": true }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "devOptional": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } + "trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true }, "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - }, - "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "devOptional": true + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } }, "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "devOptional": true, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "requires": { - "punycode": "^2.1.0" + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } } }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "validate-npm-package-license": { "version": "3.0.4", @@ -8614,7 +9109,8 @@ "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, "requires": { "defaults": "^1.0.3" } @@ -8627,32 +9123,30 @@ "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wrap-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", - "dev": true, + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" } @@ -8662,12 +9156,12 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "yallist": { @@ -8677,67 +9171,132 @@ "dev": true }, "yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "devOptional": true }, "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.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 }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "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==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" } }, "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, "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==", + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz", + "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==", "dev": true }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true + }, + "yup": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", + "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "fn-name": "~2.0.1", + "lodash": "^4.17.11", + "property-expr": "^1.5.0", + "synchronous-promise": "^2.0.6", + "toposort": "^2.0.2" + } } } } diff --git a/package.json b/package.json index 7455f64..1be5ace 100644 --- a/package.json +++ b/package.json @@ -45,13 +45,13 @@ "cz-conventional-changelog": "^3.1.0", "dot-prop": "^5.2.0", "husky": "^1.3.1", - "lint-staged": "^14.0.1", + "lint-staged": "^8.1.5", "lodash": "^4.17.19", "minimist": "^1.2.5" }, "devDependencies": { - "@commitlint/cli": "^17.7.1", - "@commitlint/config-conventional": "^17.7.0", + "@commitlint/cli": "^9.1.2", + "@commitlint/config-conventional": "^8.3.4", "cz-emoji": "^1.3.1" }, "config": { From 0bf7e2faadf2bf54b25794161c28f0ac505f6522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E6=B3=B0=E7=91=8B=28Chang=20Tai=20Wei=29?= Date: Sun, 24 Dec 2023 22:05:34 +0900 Subject: [PATCH 89/89] :construction_worker: (docker) test it (#131) --- .github/workflows/dockerimage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index d33bd9d..87d329c 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -54,7 +54,7 @@ jobs: - name: Push staging to docker registry uses: actions-hub/docker@master - if: github.ref == 'refs/heads/master' && success() + if: ${{ github.ref == 'refs/heads/master' }} && success() with: args: push ${RC_NAME}:staging