+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Password Recovery
+
+
+
+
+
+
+
+
+
+
+
+
+ Use the code below to reset your password (valid for 24 hours only):
+
+
+ %(code)s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ If you no longer wish to make this change or did not initiate this request, plrease ignore this e-mail.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/chalicelib/utils/jira_client.py b/api/chalicelib/utils/jira_client.py
new file mode 100644
index 000000000..6da501bbe
--- /dev/null
+++ b/api/chalicelib/utils/jira_client.py
@@ -0,0 +1,327 @@
+from jira import JIRA
+from jira.exceptions import JIRAError
+import time
+from datetime import datetime
+import requests
+from requests.auth import HTTPBasicAuth
+
+fields = "id, summary, description, creator, reporter, created, assignee, status, updated, comment, issuetype, labels"
+
+
+class JiraManager:
+ # retries = 5
+ retries = 0
+
+ def __init__(self, url, username, password, project_id=None):
+ self._config = {"JIRA_PROJECT_ID": project_id, "JIRA_URL": url, "JIRA_USERNAME": username,
+ "JIRA_PASSWORD": password}
+ self._jira = JIRA({'server': url}, basic_auth=(username, password), logging=True)
+
+ def set_jira_project_id(self, project_id):
+ self._config["JIRA_PROJECT_ID"] = project_id
+
+ def get_projects(self):
+ try:
+ projects = self._jira.projects()
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_projects()
+ print(f"=>Error {e.text}")
+ raise e
+ projects_dict_list = []
+ for project in projects:
+ projects_dict_list.append(self.__parser_project_info(project))
+
+ return projects_dict_list
+
+ def get_project(self):
+ try:
+ project = self._jira.project(self._config['JIRA_PROJECT_ID'])
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_project()
+ print(f"=>Error {e.text}")
+ raise e
+ return self.__parser_project_info(project)
+
+ def get_issues(self, sql: str, offset: int = 0):
+ jql = "project = " + self._config['JIRA_PROJECT_ID'] \
+ + ((" AND " + sql) if sql is not None and len(sql) > 0 else "") \
+ + " ORDER BY createdDate DESC"
+
+ try:
+ issues = self._jira.search_issues(jql, maxResults=1000, startAt=offset, fields=fields)
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_issues(sql, offset)
+ print(f"=>Error {e.text}")
+ raise e
+
+ issue_dict_list = []
+ for issue in issues:
+ # print(issue.raw)
+ issue_dict_list.append(self.__parser_issue_info(issue, include_comments=False))
+
+ return {"total": issues.total, "issues": issue_dict_list}
+
+ def get_issue(self, issue_id: str):
+ try:
+ # issue = self._jira.issue(issue_id)
+ issue = self._jira.issue(issue_id, fields=fields)
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_issue(issue_id)
+ print(f"=>Error {e.text}")
+ raise e
+ return self.__parser_issue_info(issue)
+
+ def get_issue_v3(self, issue_id: str):
+ try:
+ url = f"{self._config['JIRA_URL']}/rest/api/3/issue/{issue_id}?fields={fields}"
+ auth = HTTPBasicAuth(self._config['JIRA_USERNAME'], self._config['JIRA_PASSWORD'])
+ issue = requests.get(
+ url,
+ headers={
+ "Accept": "application/json"
+ },
+ auth=auth
+ )
+ except Exception as e:
+ self.retries -= 1
+ if self.retries > 0:
+ time.sleep(1)
+ return self.get_issue_v3(issue_id)
+ print(f"=>Error {e}")
+ raise e
+ return self.__parser_issue_info(issue.json())
+
+ def create_issue(self, issue_dict):
+ issue_dict["project"] = {"id": self._config['JIRA_PROJECT_ID']}
+ try:
+ issue = self._jira.create_issue(fields=issue_dict)
+ return self.__parser_issue_info(issue)
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.create_issue(issue_dict)
+ print(f"=>Error {e.text}")
+ raise e
+
+ def close_issue(self, issue):
+ try:
+ # jira.transition_issue(issue, '5', assignee={'name': 'pm_user'}, resolution={'id': '3'})
+ self._jira.transition_issue(issue, 'Close')
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.close_issue(issue)
+ print(f"=>Error {e.text}")
+ raise e
+
+ def assign_issue(self, issue_id, account_id) -> bool:
+ try:
+ return self._jira.assign_issue(issue_id, account_id)
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.assign_issue(issue_id, account_id)
+ print(f"=>Error {e.text}")
+ raise e
+
+ def add_comment(self, issue_id: str, comment: str):
+ try:
+ comment = self._jira.add_comment(issue_id, comment)
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.add_comment(issue_id, comment)
+ print(f"=>Error {e.text}")
+ raise e
+ return self.__parser_comment_info(comment)
+
+ def add_comment_v3(self, issue_id: str, comment: str):
+ try:
+ url = f"{self._config['JIRA_URL']}/rest/api/3/issue/{issue_id}/comment"
+ auth = HTTPBasicAuth(self._config['JIRA_USERNAME'], self._config['JIRA_PASSWORD'])
+ comment_response = requests.post(
+ url,
+ headers={
+ "Accept": "application/json"
+ },
+ auth=auth,
+ json={
+ "body": {
+ "type": "doc",
+ "version": 1,
+ "content": [
+ {
+ "type": "paragraph",
+ "content": [
+ {
+ "text": comment,
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ )
+ except Exception as e:
+ self.retries -= 1
+ if self.retries > 0:
+ time.sleep(1)
+ return self.add_comment_v3(issue_id, comment)
+ print(f"=>Error {e}")
+ raise e
+ return self.__parser_comment_info(comment_response.json())
+
+ def get_comments(self, issueKey):
+ try:
+ comments = self._jira.comments(issueKey)
+ results = []
+ for c in comments:
+ results.append(self.__parser_comment_info(c.raw))
+ return results
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_comments(issueKey)
+ print(f"=>Error {e.text}")
+ raise e
+
+ def get_meta(self):
+ meta = {}
+ meta['issueTypes'] = self.get_issue_types()
+ meta['users'] = self.get_assignable_users()
+ return meta
+
+ def get_assignable_users(self):
+ try:
+ users = self._jira.search_assignable_users_for_issues('', project=self._config['JIRA_PROJECT_ID'])
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_assignable_users()
+ print(f"=>Error {e.text}")
+ raise e
+ users_dict = []
+ for user in users:
+ users_dict.append({
+ 'name': user.displayName,
+ 'email': user.emailAddress,
+ 'id': user.accountId,
+ 'avatarUrls': user.raw["avatarUrls"]
+ })
+
+ return users_dict
+
+ def get_issue_types(self):
+ try:
+ types = self._jira.issue_types()
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_issue_types()
+ print(f"=>Error {e.text}")
+ raise e
+ types_dict = []
+ for type in types:
+ if not type.subtask and not type.name.lower() == "epic":
+ types_dict.append({
+ 'id': type.id,
+ 'name': type.name,
+ 'iconUrl': type.iconUrl,
+ 'description': type.description
+ })
+ return types_dict
+
+ def __parser_comment_info(self, comment):
+ if not isinstance(comment, dict):
+ comment = comment.raw
+
+ pattern = '%Y-%m-%dT%H:%M:%S.%f%z'
+ creation = datetime.strptime(comment['created'], pattern)
+ # update = datetime.strptime(comment['updated'], pattern)
+
+ return {
+ 'id': comment['id'],
+ 'author': comment['author']['accountId'],
+ 'message': comment['body'],
+ # 'created': comment['created'],
+ 'createdAt': int((creation - creation.utcoffset()).timestamp() * 1000),
+ # 'updated': comment['updated'],
+ # 'updatedAt': int((update - update.utcoffset()).timestamp() * 1000)
+ }
+
+ @staticmethod
+ def __get_closed_status(status):
+ return status.lower() == "done" or status.lower() == "close" or status.lower() == "closed" or status.lower() == "finish" or status.lower() == "finished"
+
+ def __parser_issue_info(self, issue, include_comments=True):
+ results_dict = {}
+ if not isinstance(issue, dict):
+ raw_info = issue.raw
+ else:
+ raw_info = issue
+
+ fields = raw_info['fields']
+ results_dict["id"] = raw_info["id"]
+ results_dict["key"] = raw_info["key"]
+ # results_dict["ticketNumber"] = raw_info["key"]
+ results_dict["title"] = fields["summary"]
+ results_dict["description"] = fields["description"]
+ results_dict["issueType"] = [fields["issuetype"]["id"]]
+
+ # results_dict["assignee"] = None
+ # results_dict["reporter"] = None
+
+ if isinstance(fields["assignee"], dict):
+ results_dict["assignees"] = [fields["assignee"]["accountId"]]
+ # if isinstance(fields["reporter"], dict):
+ # results_dict["reporter"] = fields["reporter"]["accountId"]
+ if isinstance(fields["creator"], dict):
+ results_dict["creator"] = fields["creator"]["accountId"]
+
+ if "comment" in fields:
+ if include_comments:
+ comments_dict = []
+ for comment in fields["comment"]["comments"]:
+ comments_dict.append(self.__parser_comment_info(comment))
+
+ results_dict['comments'] = comments_dict
+ results_dict['commentsCount'] = fields["comment"]["total"]
+
+ results_dict["status"] = fields["status"]['name']
+ results_dict["createdAt"] = fields["created"]
+ # results_dict["updated"] = fields["updated"]
+ results_dict["labels"] = fields["labels"]
+ results_dict["closed"] = self.__get_closed_status(fields["status"]['name'])
+
+ return results_dict
+
+ @staticmethod
+ def __parser_project_info(project):
+ results_dict = {}
+ raw_info = project.raw
+ results_dict["id"] = raw_info["id"]
+ results_dict["name"] = raw_info["name"]
+ results_dict["avatarUrls"] = raw_info["avatarUrls"]
+ results_dict["description"] = raw_info["description"] if "description" in raw_info else ""
+
+ return results_dict
diff --git a/api/chalicelib/utils/metrics_helper.py b/api/chalicelib/utils/metrics_helper.py
new file mode 100644
index 000000000..e0cde1201
--- /dev/null
+++ b/api/chalicelib/utils/metrics_helper.py
@@ -0,0 +1,5 @@
+def __get_step_size(startTimestamp, endTimestamp, density, decimal=False, factor=1000):
+ step_size = (endTimestamp // factor - startTimestamp // factor)
+ if decimal:
+ return step_size / density
+ return step_size // (density - 1)
diff --git a/api/chalicelib/utils/pg_client.py b/api/chalicelib/utils/pg_client.py
new file mode 100644
index 000000000..8d1e37d40
--- /dev/null
+++ b/api/chalicelib/utils/pg_client.py
@@ -0,0 +1,53 @@
+import psycopg2
+import psycopg2.extras
+from chalicelib.utils.helper import environ
+
+PG_CONFIG = {"host": environ["pg_host"],
+ "database": environ["pg_dbname"],
+ "user": environ["pg_user"],
+ "password": environ["pg_password"],
+ "port": int(environ["pg_port"])}
+
+from psycopg2 import pool
+
+try:
+ postgreSQL_pool = psycopg2.pool.ThreadedConnectionPool(6, 20, **PG_CONFIG)
+ if (postgreSQL_pool):
+ print("Connection pool created successfully")
+except (Exception, psycopg2.DatabaseError) as error:
+ print("Error while connecting to PostgreSQL", error)
+ raise error
+
+
+# finally:
+# # closing database connection.
+# # use closeall method to close all the active connection if you want to turn of the application
+# if (postgreSQL_pool):
+# postgreSQL_pool.closeall
+# print("PostgreSQL connection pool is closed")
+
+class PostgresClient:
+ connection = None
+ cursor = None
+
+ def __init__(self):
+ self.connection = postgreSQL_pool.getconn()
+
+ def __enter__(self):
+ if self.cursor is None:
+ self.cursor = self.connection.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
+ return self.cursor
+
+ def __exit__(self, *args):
+ try:
+ self.connection.commit()
+ self.cursor.close()
+ except:
+ print("Error while committing/closing PG-connection", error)
+ raise error
+ finally:
+ postgreSQL_pool.putconn(self.connection)
+
+
+def close():
+ pass
diff --git a/api/chalicelib/utils/s3.py b/api/chalicelib/utils/s3.py
new file mode 100644
index 000000000..544827001
--- /dev/null
+++ b/api/chalicelib/utils/s3.py
@@ -0,0 +1,57 @@
+from botocore.exceptions import ClientError
+
+import boto3
+
+client = boto3.client('s3')
+sts_client = boto3.client('sts')
+
+
+def exists(bucket, key):
+ response = client.list_objects_v2(
+ Bucket=bucket,
+ Prefix=key,
+ )
+ for obj in response.get('Contents', []):
+ if obj['Key'] == key:
+ return True
+ return False
+
+
+def get_presigned_url_for_sharing(bucket, expires_in, key, check_exists=False):
+ if check_exists and not exists(bucket, key):
+ return None
+
+ return client.generate_presigned_url(
+ 'get_object',
+ Params={
+ 'Bucket': bucket,
+ 'Key': key
+ },
+ ExpiresIn=expires_in
+ )
+
+
+def get_presigned_url_for_upload(bucket, expires_in, key):
+ return client.generate_presigned_url(
+ 'put_object',
+ Params={
+ 'Bucket': bucket,
+ 'Key': key
+ },
+ ExpiresIn=expires_in
+ )
+
+
+def get_file(source_bucket, source_key):
+ try:
+ result = client.get_object(
+ Bucket=source_bucket,
+ Key=source_key
+ )
+ except ClientError as ex:
+ if ex.response['Error']['Code'] == 'NoSuchKey':
+ print(f'======> No object found - returning None for {source_bucket}/{source_key}')
+ return None
+ else:
+ raise ex
+ return result["Body"].read().decode()
diff --git a/api/chalicelib/utils/smtp.py b/api/chalicelib/utils/smtp.py
new file mode 100644
index 000000000..90c95693b
--- /dev/null
+++ b/api/chalicelib/utils/smtp.py
@@ -0,0 +1,39 @@
+import smtplib
+from chalicelib.utils.helper import environ
+
+
+class EmptySMTP:
+ def sendmail(self, from_addr, to_addrs, msg, mail_options=(), rcpt_options=()):
+ print("!! CANNOT SEND EMAIL, NO VALID SMTP CONFIGURATION FOUND")
+
+
+class SMTPClient:
+ server = None
+
+ def __init__(self):
+ if environ["EMAIL_HOST"] is None or len(environ["EMAIL_HOST"]) == 0:
+ return
+ elif environ["EMAIL_USE_SSL"].lower() == "false":
+ self.server = smtplib.SMTP(host=environ["EMAIL_HOST"], port=int(environ["EMAIL_PORT"]))
+ else:
+ if len(environ["EMAIL_SSL_KEY"]) == 0 or len(environ["EMAIL_SSL_CERT"]) == 0:
+ self.server = smtplib.SMTP_SSL(host=environ["EMAIL_HOST"], port=int(environ["EMAIL_PORT"]))
+ else:
+ self.server = smtplib.SMTP_SSL(host=environ["EMAIL_HOST"], port=int(environ["EMAIL_PORT"]),
+ keyfile=environ["EMAIL_SSL_KEY"], certfile=environ["EMAIL_SSL_CERT"])
+
+ def __enter__(self):
+ if self.server is None:
+ return EmptySMTP()
+ self.server.ehlo()
+ if environ["EMAIL_USE_SSL"].lower() == "false" and environ["EMAIL_USE_TLS"].lower() == "true":
+ self.server.starttls()
+ # stmplib docs recommend calling ehlo() before & after starttls()
+ self.server.ehlo()
+ self.server.login(user=environ["EMAIL_USER"], password=environ["EMAIL_PASSWORD"])
+ return self.server
+
+ def __exit__(self, *args):
+ if self.server is None:
+ return
+ self.server.quit()
diff --git a/api/chalicelib/utils/strings.py b/api/chalicelib/utils/strings.py
new file mode 100644
index 000000000..8b07bb373
--- /dev/null
+++ b/api/chalicelib/utils/strings.py
@@ -0,0 +1,45 @@
+import string
+
+jsonb = "'::jsonb,'"
+dash = '", "'
+dash_nl = ',\n'
+dash_key = ")s, %("
+
+
+def __filter(s, chars, l):
+ s = filter(lambda c: c in chars, s)
+ s = "".join(s)
+ if len(s) == 0:
+ return None
+ return s[0:l]
+
+
+__keyword_chars = string.ascii_lowercase + string.ascii_uppercase + string.digits + "_"
+
+
+def keyword(s):
+ if not isinstance(s, str):
+ return None
+ s = s.strip().replace(" ", "_")
+ return __filter(s, __keyword_chars, 30)
+
+
+__pattern_chars = string.ascii_lowercase + string.ascii_uppercase + string.digits + "_-/*."
+
+
+def pattern(s):
+ if not isinstance(s, str):
+ return None
+ return __filter(s, __pattern_chars, 1000)
+
+
+def join(*args):
+ return '\x00'.join(args)
+
+
+def split(s):
+ return s.split('\x00')
+
+
+def hexed(n):
+ return hex(n)[2:]
diff --git a/api/requirements.txt b/api/requirements.txt
new file mode 100644
index 000000000..094d32758
--- /dev/null
+++ b/api/requirements.txt
@@ -0,0 +1,14 @@
+requests==2.24.0
+urllib3==1.25.11
+boto3==1.16.1
+pyjwt==1.7.1
+psycopg2-binary==2.8.6
+pytz==2020.1
+sentry-sdk==0.19.1
+rollbar==0.15.1
+bugsnag==4.0.1
+kubernetes==12.0.0
+elasticsearch==7.9.1
+jira==2.0.0
+schedule==1.1.0
+croniter==1.0.12
\ No newline at end of file
diff --git a/api/sourcemaps_reader/.gitignore b/api/sourcemaps_reader/.gitignore
new file mode 100644
index 000000000..f642462b1
--- /dev/null
+++ b/api/sourcemaps_reader/.gitignore
@@ -0,0 +1,11 @@
+# package directories
+node_modules
+jspm_packages
+
+# Serverless directories
+.serverless/*.zip
+
+
+node_modules/
+.idea
+test.js
\ No newline at end of file
diff --git a/api/sourcemaps_reader/README.md b/api/sourcemaps_reader/README.md
new file mode 100644
index 000000000..d543da338
--- /dev/null
+++ b/api/sourcemaps_reader/README.md
@@ -0,0 +1,15 @@
+# sourcemap-reader
+Source Map Reader
+
+# For SAAS:
+to run local; put your test values in handler then run `node handler.js`
+to deploy `sls deploy --stage [staging|prod|dev]`
+
+# Requirements:
+- nodeJS 12 or greater
+
+# Install for OS:
+```
+npm install
+node server.js
+```
\ No newline at end of file
diff --git a/api/sourcemaps_reader/package-lock.json b/api/sourcemaps_reader/package-lock.json
new file mode 100644
index 000000000..719a55bb3
--- /dev/null
+++ b/api/sourcemaps_reader/package-lock.json
@@ -0,0 +1,109 @@
+{
+ "name": "sourcemap-reader",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "aws-sdk": {
+ "version": "2.654.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.654.0.tgz",
+ "integrity": "sha512-RAx/SJ74zAqBW1wyRxiHNflmrv50i35pu8kPxfMIJ418TJzIMt+LKgn55rTJgyUdUzKi+MC9XMY4n7IDtwj3HA==",
+ "requires": {
+ "buffer": "4.9.1",
+ "events": "1.1.1",
+ "ieee754": "1.1.13",
+ "jmespath": "0.15.0",
+ "querystring": "0.2.0",
+ "sax": "1.2.1",
+ "url": "0.10.3",
+ "uuid": "3.3.2",
+ "xml2js": "0.4.19"
+ },
+ "dependencies": {
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
+ },
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ },
+ "url": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
+ "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+ },
+ "ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "jmespath": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
+ "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc="
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "sax": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
+ "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o="
+ },
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
+ },
+ "xml2js": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~9.0.1"
+ }
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
+ }
+ }
+}
diff --git a/api/sourcemaps_reader/package.json b/api/sourcemaps_reader/package.json
new file mode 100644
index 000000000..ed169326e
--- /dev/null
+++ b/api/sourcemaps_reader/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "sourcemap-reader",
+ "version": "1.0.0",
+ "description": "",
+ "main": "handler.js",
+ "dependencies": {
+ "aws-sdk": "^2.654.0",
+ "source-map": "^0.7.3"
+ },
+ "devDependencies": {},
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "Kraiem taha yassine
",
+ "license": "ISC"
+}
diff --git a/ee/api/.chalice/config.json b/ee/api/.chalice/config.json
new file mode 100644
index 000000000..2884836a2
--- /dev/null
+++ b/ee/api/.chalice/config.json
@@ -0,0 +1,77 @@
+{
+ "version": "2.0",
+ "app_name": "parrot",
+ "environment_variables": {
+ "version": "0.0.0"
+ },
+ "stages": {
+ "default-ee": {
+ "api_gateway_stage": "default-ee",
+ "manage_iam_role": false,
+ "iam_role_arn": "",
+ "autogen_policy": true,
+ "environment_variables": {
+ "isFOS": "false",
+ "isEE": "true",
+ "stage": "default-ee",
+ "jwt_issuer": "asayer-default-ee",
+ "allowCron": "true",
+ "sentry": "false",
+ "sentryURL": "",
+ "pg_host": "127.0.0.1",
+ "pg_port": "9202",
+ "pg_dbname": "app",
+ "pg_user": "",
+ "pg_password": "",
+ "ch_host": "",
+ "ch_port": "",
+ "alert_ntf": "http://127.0.0.1:8000/async/alerts/notifications/%s",
+ "email_signup": "http://127.0.0.1:8000/async/email_signup/%s",
+ "email_funnel": "http://127.0.0.1:8000/async/funnel/%s",
+ "email_plans": "http://127.0.0.1:8000/async/plans/%s",
+ "email_basic": "http://127.0.0.1:8000/async/basic/%s",
+ "assign_link": "http://127.0.0.1:8000/async/email_assignment",
+ "verification_link": "http://127.0.0.1:8000/email/validate/",
+ "verification_success_redirect": "",
+ "verification_fail_redirect": "",
+ "captcha_server": "",
+ "captcha_key": "",
+ "jira_api": "http://127.0.0.1:3000/dev",
+ "github_api": "http://127.0.0.1:4000/dev",
+ "sessions_bucket": "asayer-mobs-staging",
+ "sessions_region": "eu-central-1",
+ "stack_reader": "",
+ "put_S3_TTL": "20",
+ "sourcemaps_bucket": "",
+ "sourcemaps_bucket_key": "",
+ "sourcemaps_bucket_secret": "",
+ "sourcemaps_bucket_region": "",
+ "js_cache_bucket": "",
+ "SIGN_ID": "",
+ "SIGN_KEY": "",
+ "web_mobs": "https://mobs-staging.asayer.io",
+ "async_Token": "",
+ "EMAIL_HOST": "",
+ "EMAIL_PORT": "587",
+ "EMAIL_USER": "",
+ "EMAIL_PASSWORD": "",
+ "EMAIL_USE_TLS": "true",
+ "EMAIL_USE_SSL": "false",
+ "EMAIL_SSL_KEY": "",
+ "EMAIL_SSL_CERT": "",
+ "EMAIL_FROM": "OpenReplay",
+ "SITE_URL": "",
+ "announcement_bucket": "",
+ "jwt_secret": "",
+ "jwt_algorithm": "",
+ "jwt_exp_delta_seconds": ""
+ },
+ "lambda_timeout": 150,
+ "lambda_memory_size": 400,
+ "subnet_ids": [
+ ],
+ "security_group_ids": [
+ ]
+ }
+ }
+}
diff --git a/ee/api/.gitignore b/ee/api/.gitignore
new file mode 100644
index 000000000..812abce9c
--- /dev/null
+++ b/ee/api/.gitignore
@@ -0,0 +1,177 @@
+# Created by .ignore support plugin (hsz.mobi)
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff:
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/dictionaries
+
+# Sensitive or high-churn files:
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.xml
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+
+# Gradle:
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# CMake
+cmake-build-debug/
+
+# Mongo Explorer plugin:
+.idea/**/mongoSettings.xml
+
+## File-based project format:
+*.iws
+
+## Plugin-specific files:
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+### Example user template template
+### Example user template
+
+# IntelliJ project files
+.idea
+*.iml
+out
+gen### Python template
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+.static_storage/
+.media/
+local_settings.py
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+/.chalice/deployments/
+
+vendor
+
+
+logs*.txt
+*.csv
+
+*.p
+*.js
+SUBNETS.json
+
+chalicelib/.config
+chalicelib/saas
\ No newline at end of file
diff --git a/ee/api/app.py b/ee/api/app.py
new file mode 100644
index 000000000..32d81c844
--- /dev/null
+++ b/ee/api/app.py
@@ -0,0 +1,110 @@
+import sentry_sdk
+from chalice import Chalice, Response
+from sentry_sdk import configure_scope
+
+from chalicelib import _overrides
+from chalicelib.blueprints import bp_authorizers
+from chalicelib.blueprints import bp_core, bp_core_crons
+from chalicelib.blueprints import bp_core_dynamic, bp_core_dynamic_crons
+from chalicelib.blueprints.subs import bp_dashboard
+from chalicelib.utils import helper
+from chalicelib.utils import pg_client
+from chalicelib.utils.helper import environ
+
+from chalicelib.blueprints import bp_ee, bp_ee_crons
+
+app = Chalice(app_name='parrot')
+app.debug = not helper.is_production() or helper.is_local()
+
+sentry_sdk.init(environ["sentryURL"])
+
+# Monkey-patch print for DataDog hack
+import sys
+import traceback
+
+old_tb = traceback.print_exception
+old_f = sys.stdout
+old_e = sys.stderr
+ASAYER_SESSION_ID = None
+
+
+class F:
+ def write(self, x):
+ if ASAYER_SESSION_ID is not None and x != '\n' and not helper.is_local():
+ old_f.write(f"[asayer_session_id={ASAYER_SESSION_ID}] {x}")
+ else:
+ old_f.write(x)
+
+ def flush(self):
+ pass
+
+
+def tb_print_exception(etype, value, tb, limit=None, file=None, chain=True):
+ if ASAYER_SESSION_ID is not None and not helper.is_local():
+ # bugsnag.notify(Exception(str(value)), meta_data={"special_info": {"asayerSessionId": ASAYER_SESSION_ID}})
+ value = type(value)(f"[asayer_session_id={ASAYER_SESSION_ID}] " + str(value))
+
+ old_tb(etype, value, tb, limit, file, chain)
+
+
+if helper.is_production():
+ traceback.print_exception = tb_print_exception
+
+sys.stdout = F()
+sys.stderr = F()
+# ---End Monkey-patch
+
+
+_overrides.chalice_app(app)
+
+
+@app.middleware('http')
+def asayer_middleware(event, get_response):
+ if "{projectid}" in event.path.lower():
+ from chalicelib.ee import projects
+ if not projects.is_authorized(project_id=event.uri_params["projectId"],
+ tenant_id=event.context["authorizer"]["tenantId"]):
+ print("unauthorized project")
+ # return {"errors": ["unauthorized project"]}
+ pg_client.close()
+ return Response(body={"errors": ["unauthorized project"]}, status_code=401)
+ global ASAYER_SESSION_ID
+ ASAYER_SESSION_ID = app.current_request.headers.get('vnd.asayer.io.sid')
+ if "authorizer" in event.context and event.context["authorizer"] is None:
+ print("Deleted user!!")
+ pg_client.close()
+ return Response(body={"errors": ["Deleted user"]}, status_code=403)
+
+ try:
+ if helper.TRACK_TIME:
+ import time
+ now = int(time.time() * 1000)
+ response = get_response(event)
+ if helper.TRACK_TIME:
+ print(f"Execution time: {int(time.time() * 1000) - now} ms")
+ except Exception as e:
+ print("middleware exception handling")
+ print(e)
+ pg_client.close()
+ if helper.allow_sentry() and ASAYER_SESSION_ID is not None and not helper.is_local():
+ with configure_scope() as scope:
+ scope.set_tag('stage', environ["stage"])
+ scope.set_tag('openReplaySessionToken', ASAYER_SESSION_ID)
+ scope.set_extra("context", event.context)
+ sentry_sdk.capture_exception(e)
+ raise e
+ pg_client.close()
+ return response
+
+
+# Open source
+app.register_blueprint(bp_authorizers.app)
+app.register_blueprint(bp_core.app)
+app.register_blueprint(bp_core_crons.app)
+app.register_blueprint(bp_core_dynamic.app)
+app.register_blueprint(bp_core_dynamic_crons.app)
+app.register_blueprint(bp_dashboard.app)
+
+# Enterprise
+app.register_blueprint(bp_ee.app)
+app.register_blueprint(bp_ee_crons.app)
diff --git a/ee/api/chalicelib/__init__.py b/ee/api/chalicelib/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/ee/api/chalicelib/_overrides.py b/ee/api/chalicelib/_overrides.py
new file mode 100644
index 000000000..5033b0324
--- /dev/null
+++ b/ee/api/chalicelib/_overrides.py
@@ -0,0 +1,104 @@
+from chalice import Chalice, CORSConfig
+from chalicelib.blueprints import bp_authorizers
+from chalicelib.core import authorizers
+
+import sched
+import threading
+import time
+from datetime import datetime
+import pytz
+from croniter import croniter
+
+base_time = datetime.now(pytz.utc)
+
+cors_config = CORSConfig(
+ allow_origin='*',
+ allow_headers=['vnd.asayer.io.sid'],
+ # max_age=600,
+ # expose_headers=['X-Special-Header'],
+ allow_credentials=True
+)
+
+
+def chalice_app(app):
+ def app_route(self, path, **kwargs):
+ kwargs.setdefault('cors', cors_config)
+ kwargs.setdefault('authorizer', bp_authorizers.jwt_authorizer)
+ handler_type = 'route'
+ name = kwargs.pop('name', None)
+ registration_kwargs = {'path': path, 'kwargs': kwargs, 'authorizer': kwargs.get("authorizer")}
+
+ def _register_handler(user_handler):
+ handler_name = name
+ if handler_name is None:
+ handler_name = user_handler.__name__
+ if registration_kwargs is not None:
+ kwargs = registration_kwargs
+ else:
+ kwargs = {}
+
+ if kwargs['authorizer'] == bp_authorizers.jwt_authorizer \
+ or kwargs['authorizer'] == bp_authorizers.api_key_authorizer:
+ def _user_handler(context=None, **args):
+ if context is not None:
+ args['context'] = context
+ else:
+ authorizer_context = app.current_request.context['authorizer']
+ if kwargs['authorizer'] == bp_authorizers.jwt_authorizer:
+ args['context'] = authorizers.jwt_context(authorizer_context)
+ else:
+ args['context'] = authorizer_context
+ return user_handler(**args)
+
+ wrapped = self._wrap_handler(handler_type, handler_name, _user_handler)
+ self._register_handler(handler_type, handler_name, _user_handler, wrapped, kwargs)
+ else:
+ wrapped = self._wrap_handler(handler_type, handler_name, user_handler)
+ self._register_handler(handler_type, handler_name, user_handler, wrapped, kwargs)
+ return wrapped
+
+ return _register_handler
+
+ app.route = app_route.__get__(app, Chalice)
+
+ def app_schedule(self, expression, name=None, description=''):
+ handler_type = 'schedule'
+ registration_kwargs = {'expression': expression,
+ 'description': description}
+
+ def _register_handler(user_handler):
+ handler_name = name
+ if handler_name is None:
+ handler_name = user_handler.__name__
+ kwargs = registration_kwargs
+ cron_expression = kwargs["expression"].to_string()[len("cron("):-1]
+ if len(cron_expression.split(" ")) > 5:
+ cron_expression = " ".join(cron_expression.split(" ")[:-1])
+ cron_expression = cron_expression.replace("?", "*")
+ cron_shell(user_handler, cron_expression)
+
+ wrapped = self._wrap_handler(handler_type, handler_name, user_handler)
+ self._register_handler(handler_type, handler_name, user_handler, wrapped, kwargs)
+ return wrapped
+
+ return _register_handler
+
+ app.schedule = app_schedule.__get__(app, Chalice)
+
+ def spawn(function, args):
+ th = threading.Thread(target=function, kwargs=args)
+ th.setDaemon(True)
+ th.start()
+
+ def cron_shell(function, cron_expression):
+ def to_start():
+ scheduler = sched.scheduler(time.time, time.sleep)
+ citer = croniter(cron_expression, base_time)
+ while True:
+ next_execution = citer.get_next(datetime)
+ print(f"{function.__name__} next execution: {next_execution}")
+ scheduler.enterabs(next_execution.timestamp(), 1, function, argument=(None,))
+ scheduler.run()
+ print(f"{function.__name__} executed: {next_execution}")
+
+ spawn(to_start, None)
diff --git a/ee/api/chalicelib/blueprints/__init__.py b/ee/api/chalicelib/blueprints/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/ee/api/chalicelib/blueprints/bp_authorizers.py b/ee/api/chalicelib/blueprints/bp_authorizers.py
new file mode 100644
index 000000000..d84a89781
--- /dev/null
+++ b/ee/api/chalicelib/blueprints/bp_authorizers.py
@@ -0,0 +1,38 @@
+from chalice import Blueprint, AuthResponse
+from chalicelib.utils import helper
+from chalicelib.core import authorizers
+
+from chalicelib.ee import users
+
+app = Blueprint(__name__)
+
+
+@app.authorizer()
+def api_key_authorizer(auth_request):
+ r = authorizers.api_key_authorizer(auth_request.token)
+ if r is None:
+ return AuthResponse(routes=[], principal_id=None)
+
+ return AuthResponse(
+ routes=['*'],
+ principal_id=r['tenantId'],
+ context=r
+ )
+
+
+@app.authorizer(ttl_seconds=60)
+def jwt_authorizer(auth_request):
+ print("---- Auth")
+ jwt_payload = authorizers.jwt_authorizer(auth_request.token)
+ print(jwt_payload)
+ if jwt_payload is None \
+ or jwt_payload.get("iat") is None or jwt_payload.get("aud") is None \
+ or not users.auth_exists(user_id=jwt_payload["userId"], tenant_id=jwt_payload["tenantId"],
+ jwt_iat=jwt_payload["iat"], jwt_aud=jwt_payload["aud"]):
+ return AuthResponse(routes=[], principal_id=None)
+
+ return AuthResponse(
+ routes=['*'],
+ principal_id=jwt_payload['userId'],
+ context=jwt_payload
+ )
diff --git a/ee/api/chalicelib/blueprints/bp_core.py b/ee/api/chalicelib/blueprints/bp_core.py
new file mode 100644
index 000000000..f2ca10746
--- /dev/null
+++ b/ee/api/chalicelib/blueprints/bp_core.py
@@ -0,0 +1,879 @@
+from chalicelib.utils.helper import environ
+
+from chalice import Blueprint
+from chalice import Response
+
+from chalicelib import _overrides
+from chalicelib.blueprints import bp_authorizers
+from chalicelib.core import log_tool_rollbar, sourcemaps, events, sessions_assignments, projects, \
+ sessions_metas, alerts, funnels, issues, integrations_manager, errors_favorite_viewed, metadata, \
+ log_tool_elasticsearch, log_tool_datadog, \
+ log_tool_stackdriver, reset_password, sessions_favorite_viewed, \
+ log_tool_cloudwatch, log_tool_sentry, log_tool_sumologic, log_tools, errors, sessions, \
+ log_tool_newrelic, announcements, log_tool_bugsnag, weekly_report, integration_jira_cloud, integration_github
+from chalicelib.core.collaboration_slack import Slack
+from chalicelib.utils import email_helper
+
+app = Blueprint(__name__)
+_overrides.chalice_app(app)
+
+
+@app.route('/{projectId}/sessions2/favorite', methods=['GET'])
+def get_favorite_sessions2(projectId, context):
+ params = app.current_request.query_params
+
+ return {
+ 'data': sessions.get_favorite_sessions(project_id=projectId, user_id=context["userId"], include_viewed=True)
+ }
+
+
+@app.route('/{projectId}/sessions2/{sessionId}', methods=['GET'])
+def get_session2(projectId, sessionId, context):
+ data = sessions.get_by_id2_pg(project_id=projectId, session_id=sessionId, full_data=True, user_id=context["userId"],
+ include_fav_viewed=True, group_metadata=True)
+ if data is not None:
+ sessions_favorite_viewed.view_session(project_id=projectId, user_id=context['userId'], session_id=sessionId)
+ return {
+ 'data': data
+ }
+
+
+@app.route('/{projectId}/sessions2/{sessionId}/favorite', methods=['GET'])
+def add_remove_favorite_session2(projectId, sessionId, context):
+ return {
+ "data": sessions_favorite_viewed.favorite_session(project_id=projectId, user_id=context['userId'],
+ session_id=sessionId)}
+
+
+@app.route('/{projectId}/sessions2/{sessionId}/assign', methods=['GET'])
+def assign_session(projectId, sessionId, context):
+ data = sessions_assignments.get_by_session(project_id=projectId, session_id=sessionId,
+ tenant_id=context['tenantId'],
+ user_id=context["userId"])
+ if "errors" in data:
+ return data
+ return {
+ 'data': data
+ }
+
+
+@app.route('/{projectId}/sessions2/{sessionId}/errors/{errorId}/sourcemaps', methods=['GET'])
+def get_error_trace(projectId, sessionId, errorId, context):
+ data = errors.get_trace(project_id=projectId, error_id=errorId)
+ if "errors" in data:
+ return data
+ return {
+ 'data': data
+ }
+
+
+@app.route('/{projectId}/sessions2/{sessionId}/assign/{issueId}', methods=['GET'])
+def assign_session(projectId, sessionId, issueId, context):
+ data = sessions_assignments.get(project_id=projectId, session_id=sessionId, assignment_id=issueId,
+ tenant_id=context['tenantId'], user_id=context["userId"])
+ if "errors" in data:
+ return data
+ return {
+ 'data': data
+ }
+
+
+@app.route('/{projectId}/sessions2/{sessionId}/assign/{issueId}/comment', methods=['POST', 'PUT'])
+def comment_assignment(projectId, sessionId, issueId, context):
+ data = app.current_request.json_body
+ data = sessions_assignments.comment(tenant_id=context['tenantId'], project_id=projectId,
+ session_id=sessionId, assignment_id=issueId,
+ user_id=context["userId"], message=data["message"])
+ if "errors" in data.keys():
+ return data
+ return {
+ 'data': data
+ }
+
+
+@app.route('/{projectId}/events/search', methods=['GET'])
+def events_search(projectId, context):
+ params = app.current_request.query_params
+ if params is None:
+ return {"data": []}
+
+ q = params.get('q', '')
+ if len(q) == 0:
+ return {"data": []}
+ result = events.search_pg2(q, params.get('type', ''), project_id=projectId, source=params.get('source'),
+ key=params.get("key"))
+ return result
+
+
+@app.route('/{projectId}/sessions/search2', methods=['POST'])
+def sessions_search2(projectId, context):
+ data = app.current_request.json_body
+
+ data = sessions.search2_pg(data, projectId, user_id=context["userId"])
+ return {'data': data}
+
+
+@app.route('/{projectId}/sessions/filters', methods=['GET'])
+def session_filter_values(projectId, context):
+ return {'data': sessions_metas.get_key_values(projectId)}
+
+
+@app.route('/{projectId}/sessions/filters/top', methods=['GET'])
+def session_top_filter_values(projectId, context):
+ return {'data': sessions_metas.get_top_key_values(projectId)}
+
+
+@app.route('/{projectId}/sessions/filters/search', methods=['GET'])
+def get_session_filters_meta(projectId, context):
+ params = app.current_request.query_params
+ if params is None:
+ return {"data": []}
+
+ meta_type = params.get('type', '')
+ if len(meta_type) == 0:
+ return {"data": []}
+ q = params.get('q', '')
+ if len(q) == 0:
+ return {"data": []}
+ return sessions_metas.search(project_id=projectId, meta_type=meta_type, text=q)
+
+
+@app.route('/{projectId}/integrations/{integration}/notify/{integrationId}/{source}/{sourceId}',
+ methods=['POST', 'PUT'])
+def integration_notify(projectId, integration, integrationId, source, sourceId, context):
+ data = app.current_request.json_body
+ comment = None
+ if "comment" in data:
+ comment = data["comment"]
+ if integration == "slack":
+ args = {"tenant_id": context["tenantId"],
+ "user": context['email'], "comment": comment, "project_id": projectId,
+ "integration_id": integrationId}
+ if source == "sessions":
+ return Slack.share_session(session_id=sourceId, **args)
+ elif source == "errors":
+ return Slack.share_error(error_id=sourceId, **args)
+ return {"data": None}
+
+
+@app.route('/integrations/sentry', methods=['GET'])
+def get_all_sentry(context):
+ return {"data": log_tool_sentry.get_all(tenant_id=context["tenantId"])}
+
+
+@app.route('/{projectId}/integrations/sentry', methods=['GET'])
+def get_sentry(projectId, context):
+ return {"data": log_tool_sentry.get(project_id=projectId)}
+
+
+@app.route('/{projectId}/integrations/sentry', methods=['POST', 'PUT'])
+def add_edit_sentry(projectId, context):
+ data = app.current_request.json_body
+
+ return {"data": log_tool_sentry.add_edit(tenant_id=context["tenantId"], project_id=projectId, data=data)}
+
+
+@app.route('/{projectId}/integrations/sentry', methods=['DELETE'])
+def delete_sentry(projectId, context):
+ return {"data": log_tool_sentry.delete(tenant_id=context["tenantId"], project_id=projectId)}
+
+
+@app.route('/{projectId}/integrations/sentry/events/{eventId}', methods=['GET'])
+def proxy_sentry(projectId, eventId, context):
+ return {"data": log_tool_sentry.proxy_get(tenant_id=context["tenantId"], project_id=projectId, event_id=eventId)}
+
+
+@app.route('/integrations/datadog', methods=['GET'])
+def get_all_datadog(context):
+ return {"data": log_tool_datadog.get_all(tenant_id=context["tenantId"])}
+
+
+@app.route('/{projectId}/integrations/datadog', methods=['GET'])
+def get_datadog(projectId, context):
+ return {"data": log_tool_datadog.get(project_id=projectId)}
+
+
+@app.route('/{projectId}/integrations/datadog', methods=['POST', 'PUT'])
+def add_edit_datadog(projectId, context):
+ data = app.current_request.json_body
+
+ return {"data": log_tool_datadog.add_edit(tenant_id=context["tenantId"], project_id=projectId, data=data)}
+
+
+@app.route('/{projectId}/integrations/datadog', methods=['DELETE'])
+def delete_datadog(projectId, context):
+ return {"data": log_tool_datadog.delete(tenant_id=context["tenantId"], project_id=projectId)}
+
+
+@app.route('/integrations/stackdriver', methods=['GET'])
+def get_all_stackdriver(context):
+ return {"data": log_tool_stackdriver.get_all(tenant_id=context["tenantId"])}
+
+
+@app.route('/{projectId}/integrations/stackdriver', methods=['GET'])
+def get_stackdriver(projectId, context):
+ return {"data": log_tool_stackdriver.get(project_id=projectId)}
+
+
+@app.route('/{projectId}/integrations/stackdriver', methods=['POST', 'PUT'])
+def add_edit_stackdriver(projectId, context):
+ data = app.current_request.json_body
+
+ return {"data": log_tool_stackdriver.add_edit(tenant_id=context["tenantId"], project_id=projectId, data=data)}
+
+
+@app.route('/{projectId}/integrations/stackdriver', methods=['DELETE'])
+def delete_stackdriver(projectId, context):
+ return {"data": log_tool_stackdriver.delete(tenant_id=context["tenantId"], project_id=projectId)}
+
+
+@app.route('/integrations/newrelic', methods=['GET'])
+def get_all_newrelic(context):
+ return {"data": log_tool_newrelic.get_all(tenant_id=context["tenantId"])}
+
+
+@app.route('/{projectId}/integrations/newrelic', methods=['GET'])
+def get_newrelic(projectId, context):
+ return {"data": log_tool_newrelic.get(project_id=projectId)}
+
+
+@app.route('/{projectId}/integrations/newrelic', methods=['POST', 'PUT'])
+def add_edit_newrelic(projectId, context):
+ data = app.current_request.json_body
+
+ return {"data": log_tool_newrelic.add_edit(tenant_id=context["tenantId"], project_id=projectId, data=data)}
+
+
+@app.route('/{projectId}/integrations/newrelic', methods=['DELETE'])
+def delete_newrelic(projectId, context):
+ return {"data": log_tool_newrelic.delete(tenant_id=context["tenantId"], project_id=projectId)}
+
+
+@app.route('/integrations/rollbar', methods=['GET'])
+def get_all_rollbar(context):
+ return {"data": log_tool_rollbar.get_all(tenant_id=context["tenantId"])}
+
+
+@app.route('/{projectId}/integrations/rollbar', methods=['GET'])
+def get_rollbar(projectId, context):
+ return {"data": log_tool_rollbar.get(project_id=projectId)}
+
+
+@app.route('/{projectId}/integrations/rollbar', methods=['POST', 'PUT'])
+def add_edit_rollbar(projectId, context):
+ data = app.current_request.json_body
+
+ return {"data": log_tool_rollbar.add_edit(tenant_id=context["tenantId"], project_id=projectId, data=data)}
+
+
+@app.route('/{projectId}/integrations/rollbar', methods=['DELETE'])
+def delete_datadog(projectId, context):
+ return {"data": log_tool_rollbar.delete(tenant_id=context["tenantId"], project_id=projectId)}
+
+
+@app.route('/integrations/bugsnag/list_projects', methods=['POST'])
+def list_projects_bugsnag(context):
+ data = app.current_request.json_body
+ return {"data": log_tool_bugsnag.list_projects(auth_token=data["authorizationToken"])}
+
+
+@app.route('/integrations/bugsnag', methods=['GET'])
+def get_all_bugsnag(context):
+ return {"data": log_tool_bugsnag.get_all(tenant_id=context["tenantId"])}
+
+
+@app.route('/{projectId}/integrations/bugsnag', methods=['GET'])
+def get_bugsnag(projectId, context):
+ return {"data": log_tool_bugsnag.get(project_id=projectId)}
+
+
+@app.route('/{projectId}/integrations/bugsnag', methods=['POST', 'PUT'])
+def add_edit_bugsnag(projectId, context):
+ data = app.current_request.json_body
+
+ return {"data": log_tool_bugsnag.add_edit(tenant_id=context["tenantId"], project_id=projectId, data=data)}
+
+
+@app.route('/{projectId}/integrations/bugsnag', methods=['DELETE'])
+def delete_bugsnag(projectId, context):
+ return {"data": log_tool_bugsnag.delete(tenant_id=context["tenantId"], project_id=projectId)}
+
+
+@app.route('/integrations/cloudwatch/list_groups', methods=['POST'])
+def list_groups_cloudwatch(context):
+ data = app.current_request.json_body
+ return {"data": log_tool_cloudwatch.list_log_groups(aws_access_key_id=data["awsAccessKeyId"],
+ aws_secret_access_key=data["awsSecretAccessKey"],
+ region=data["region"])}
+
+
+@app.route('/integrations/cloudwatch', methods=['GET'])
+def get_all_cloudwatch(context):
+ return {"data": log_tool_cloudwatch.get_all(tenant_id=context["tenantId"])}
+
+
+@app.route('/{projectId}/integrations/cloudwatch', methods=['GET'])
+def get_cloudwatch(projectId, context):
+ return {"data": log_tool_cloudwatch.get(project_id=projectId)}
+
+
+@app.route('/{projectId}/integrations/cloudwatch', methods=['POST', 'PUT'])
+def add_edit_cloudwatch(projectId, context):
+ data = app.current_request.json_body
+
+ return {"data": log_tool_cloudwatch.add_edit(tenant_id=context["tenantId"], project_id=projectId, data=data)}
+
+
+@app.route('/{projectId}/integrations/cloudwatch', methods=['DELETE'])
+def delete_cloudwatch(projectId, context):
+ return {"data": log_tool_cloudwatch.delete(tenant_id=context["tenantId"], project_id=projectId)}
+
+
+@app.route('/integrations/elasticsearch', methods=['GET'])
+def get_all_elasticsearch(context):
+ return {"data": log_tool_elasticsearch.get_all(tenant_id=context["tenantId"])}
+
+
+@app.route('/{projectId}/integrations/elasticsearch', methods=['GET'])
+def get_elasticsearch(projectId, context):
+ return {"data": log_tool_elasticsearch.get(project_id=projectId)}
+
+
+@app.route('/integrations/elasticsearch/test', methods=['POST'])
+def test_elasticsearch_connection(context):
+ data = app.current_request.json_body
+ return {"data": log_tool_elasticsearch.ping(tenant_id=context["tenantId"], **data)}
+
+
+@app.route('/{projectId}/integrations/elasticsearch', methods=['POST', 'PUT'])
+def add_edit_elasticsearch(projectId, context):
+ data = app.current_request.json_body
+
+ return {"data": log_tool_elasticsearch.add_edit(tenant_id=context["tenantId"], project_id=projectId, data=data)}
+
+
+@app.route('/{projectId}/integrations/elasticsearch', methods=['DELETE'])
+def delete_elasticsearch(projectId, context):
+ return {"data": log_tool_elasticsearch.delete(tenant_id=context["tenantId"], project_id=projectId)}
+
+
+@app.route('/integrations/sumologic', methods=['GET'])
+def get_all_sumologic(context):
+ return {"data": log_tool_sumologic.get_all(tenant_id=context["tenantId"])}
+
+
+@app.route('/{projectId}/integrations/sumologic', methods=['GET'])
+def get_sumologic(projectId, context):
+ return {"data": log_tool_sumologic.get(project_id=projectId)}
+
+
+@app.route('/{projectId}/integrations/sumologic', methods=['POST', 'PUT'])
+def add_edit_sumologic(projectId, context):
+ data = app.current_request.json_body
+
+ return {"data": log_tool_sumologic.add_edit(tenant_id=context["tenantId"], project_id=projectId, data=data)}
+
+
+@app.route('/{projectId}/integrations/sumologic', methods=['DELETE'])
+def delete_sumologic(projectId, context):
+ return {"data": log_tool_sumologic.delete(tenant_id=context["tenantId"], project_id=projectId)}
+
+
+@app.route('/integrations/issues', methods=['GET'])
+def get_integration_status(context):
+ error, integration = integrations_manager.get_integration(tenant_id=context["tenantId"],
+ user_id=context["userId"])
+ if error is not None:
+ return {"data": {}}
+ return {"data": integration.get_obfuscated()}
+
+
+@app.route('/integrations/jira', methods=['POST', 'PUT'])
+def add_edit_jira_cloud(context):
+ data = app.current_request.json_body
+ error, integration = integrations_manager.get_integration(tool=integration_jira_cloud.PROVIDER,
+ tenant_id=context["tenantId"],
+ user_id=context["userId"])
+ if error is not None:
+ return error
+ return {"data": integration.add_edit(data=data)}
+
+
+@app.route('/integrations/github', methods=['POST', 'PUT'])
+def add_edit_github(context):
+ data = app.current_request.json_body
+ error, integration = integrations_manager.get_integration(tool=integration_github.PROVIDER,
+ tenant_id=context["tenantId"],
+ user_id=context["userId"])
+ if error is not None:
+ return error
+ return {"data": integration.add_edit(data=data)}
+
+
+@app.route('/integrations/issues', methods=['DELETE'])
+def delete_default_issue_tracking_tool(context):
+ error, integration = integrations_manager.get_integration(tenant_id=context["tenantId"],
+ user_id=context["userId"])
+ if error is not None:
+ return error
+ return {"data": integration.delete()}
+
+
+@app.route('/integrations/jira', methods=['DELETE'])
+def delete_jira_cloud(context):
+ error, integration = integrations_manager.get_integration(tool=integration_jira_cloud.PROVIDER,
+ tenant_id=context["tenantId"],
+ user_id=context["userId"])
+ if error is not None:
+ return error
+ return {"data": integration.delete()}
+
+
+@app.route('/integrations/github', methods=['DELETE'])
+def delete_github(context):
+ error, integration = integrations_manager.get_integration(tool=integration_github.PROVIDER,
+ tenant_id=context["tenantId"],
+ user_id=context["userId"])
+ if error is not None:
+ return error
+ return {"data": integration.delete()}
+
+
+@app.route('/integrations/issues/list_projects', methods=['GET'])
+def get_all_issue_tracking_projects(context):
+ error, integration = integrations_manager.get_integration(tenant_id=context["tenantId"],
+ user_id=context["userId"])
+ if error is not None:
+ return error
+ data = integration.issue_handler.get_projects()
+ if "errors" in data:
+ return data
+ return {"data": data}
+
+
+@app.route('/integrations/issues/{integrationProjectId}', methods=['GET'])
+def get_integration_metadata(integrationProjectId, context):
+ error, integration = integrations_manager.get_integration(tenant_id=context["tenantId"],
+ user_id=context["userId"])
+ if error is not None:
+ return error
+ data = integration.issue_handler.get_metas(integrationProjectId)
+ if "errors" in data.keys():
+ return data
+ return {"data": data}
+
+
+@app.route('/{projectId}/assignments', methods=['GET'])
+def get_all_assignments(projectId, context):
+ data = sessions_assignments.get_all(project_id=projectId, user_id=context["userId"])
+ return {
+ 'data': data
+ }
+
+
+@app.route('/{projectId}/sessions2/{sessionId}/assign/projects/{integrationProjectId}', methods=['POST', 'PUT'])
+def create_issue_assignment(projectId, sessionId, integrationProjectId, context):
+ data = app.current_request.json_body
+ data = sessions_assignments.create_new_assignment(tenant_id=context['tenantId'], project_id=projectId,
+ session_id=sessionId,
+ creator_id=context["userId"], assignee=data["assignee"],
+ description=data["description"], title=data["title"],
+ issue_type=data["issueType"],
+ integration_project_id=integrationProjectId)
+ if "errors" in data.keys():
+ return data
+ return {
+ 'data': data
+ }
+
+
+@app.route('/{projectId}/gdpr', methods=['GET'])
+def get_gdpr(projectId, context):
+ return {"data": projects.get_gdpr(project_id=projectId)}
+
+
+@app.route('/{projectId}/gdpr', methods=['POST', 'PUT'])
+def edit_gdpr(projectId, context):
+ data = app.current_request.json_body
+
+ return {"data": projects.edit_gdpr(project_id=projectId, gdpr=data)}
+
+
+@app.route('/password/reset/{step}', methods=['PUT', 'POST'], authorizer=None)
+def reset_password_handler(step):
+ data = app.current_request.json_body
+ if step == "1":
+ if "email" not in data or len(data["email"]) < 5:
+ return {"errors": ["please provide a valid email address"]}
+ return reset_password.step1(data)
+ elif step == "2":
+ return reset_password.step2(data)
+
+
+@app.route('/{projectId}/metadata', methods=['GET'])
+def get_metadata(projectId, context):
+ return {"data": metadata.get(project_id=projectId)}
+
+
+@app.route('/{projectId}/metadata/list', methods=['POST', 'PUT'])
+def add_edit_delete_metadata(projectId, context):
+ data = app.current_request.json_body
+
+ return metadata.add_edit_delete(tenant_id=context["tenantId"], project_id=projectId, new_metas=data["list"])
+
+
+@app.route('/{projectId}/metadata', methods=['POST', 'PUT'])
+def add_metadata(projectId, context):
+ data = app.current_request.json_body
+
+ return metadata.add(tenant_id=context["tenantId"], project_id=projectId, new_name=data["key"])
+
+
+@app.route('/{projectId}/metadata/{index}', methods=['POST', 'PUT'])
+def edit_metadata(projectId, index, context):
+ data = app.current_request.json_body
+
+ return metadata.edit(tenant_id=context["tenantId"], project_id=projectId, index=int(index),
+ new_name=data["key"])
+
+
+@app.route('/{projectId}/metadata/{index}', methods=['DELETE'])
+def delete_metadata(projectId, index, context):
+ return metadata.delete(tenant_id=context["tenantId"], project_id=projectId, index=index)
+
+
+@app.route('/{projectId}/metadata/search', methods=['GET'])
+def search_metadata(projectId, context):
+ params = app.current_request.query_params
+ q = params.get('q', '')
+ key = params.get('key', '')
+ if len(q) == 0 and len(key) == 0:
+ return {"data": []}
+ if len(q) == 0:
+ return {"errors": ["please provide a value for search"]}
+ if len(key) == 0:
+ return {"errors": ["please provide a key for search"]}
+ return metadata.search(tenant_id=context["tenantId"], project_id=projectId, value=q, key=key)
+
+
+@app.route('/{projectId}/integration/sources', methods=['GET'])
+def search_integrations(projectId, context):
+ return log_tools.search(project_id=projectId)
+
+
+@app.route('/async/email_assignment', methods=['POST', 'PUT'], authorizer=None)
+def async_send_signup_emails():
+ data = app.current_request.json_body
+ if data.pop("auth") != environ["async_Token"]:
+ return {}
+ email_helper.send_assign_session(recipient=data["email"], link=data["link"], message=data["message"])
+
+
+@app.route('/async/funnel/weekly_report2', methods=['POST', 'PUT'], authorizer=None)
+def async_weekly_report():
+ print("=========================> Sending weekly report")
+ data = app.current_request.json_body
+ if data.pop("auth") != environ["async_Token"]:
+ return {}
+ email_helper.weekly_report2(recipients=data["email"], data=data.get("data", None))
+
+
+@app.route('/async/basic/{step}', methods=['POST', 'PUT'], authorizer=None)
+def async_basic_emails(step):
+ data = app.current_request.json_body
+ if data.pop("auth") != environ["async_Token"]:
+ return {}
+ if step.lower() == "member_invitation":
+ email_helper.send_team_invitation(recipient=data["email"], user_name=data["userName"],
+ temp_password=data["tempPassword"], client_id=data["clientId"],
+ sender_name=data["senderName"])
+
+
+@app.route('/{projectId}/sample_rate', methods=['GET'])
+def get_capture_status(projectId, context):
+ return {"data": projects.get_capture_status(project_id=projectId)}
+
+
+@app.route('/{projectId}/sample_rate', methods=['POST', 'PUT'])
+def update_capture_status(projectId, context):
+ data = app.current_request.json_body
+
+ return {"data": projects.update_capture_status(project_id=projectId, changes=data)}
+
+
+@app.route('/announcements', methods=['GET'])
+def get_all_announcements(context):
+ return {"data": announcements.get_all(context["userId"])}
+
+
+@app.route('/announcements/view', methods=['GET'])
+def get_all_announcements(context):
+ return {"data": announcements.view(user_id=context["userId"])}
+
+
+@app.route('/{projectId}/errors/{errorId}/{action}', methods=['GET'])
+def add_remove_favorite_error(projectId, errorId, action, context):
+ if action == "favorite":
+ return errors_favorite_viewed.favorite_error(project_id=projectId, user_id=context['userId'], error_id=errorId)
+ elif action == "sessions":
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+ start_date = params.get("startDate")
+ end_date = params.get("endDate")
+ return {
+ "data": errors.get_sessions(project_id=projectId, user_id=context['userId'], error_id=errorId,
+ start_date=start_date, end_date=end_date)}
+ elif action in list(errors.ACTION_STATE.keys()):
+ return errors.change_state(project_id=projectId, user_id=context['userId'], error_id=errorId, action=action)
+ else:
+ return {"errors": ["undefined action"]}
+
+
+@app.route('/{projectId}/errors/merge', methods=['POST'])
+def errors_merge(projectId, context):
+ data = app.current_request.json_body
+
+ data = errors.merge(error_ids=data.get("errors", []))
+ return data
+
+
+@app.route('/show_banner', methods=['GET'])
+def errors_merge(context):
+ return {"data": False}
+
+
+@app.route('/{projectId}/alerts', methods=['POST', 'PUT'])
+def create_alert(projectId, context):
+ data = app.current_request.json_body
+ return alerts.create(projectId, data)
+
+
+@app.route('/{projectId}/alerts', methods=['GET'])
+def get_all_alerts(projectId, context):
+ return {"data": alerts.get_all(projectId)}
+
+
+@app.route('/{projectId}/alerts/{alertId}', methods=['GET'])
+def get_alert(projectId, alertId, context):
+ return {"data": alerts.get(alertId)}
+
+
+@app.route('/{projectId}/alerts/{alertId}', methods=['POST', 'PUT'])
+def update_alert(projectId, alertId, context):
+ data = app.current_request.json_body
+ return alerts.update(alertId, data)
+
+
+@app.route('/{projectId}/alerts/{alertId}', methods=['DELETE'])
+def delete_alert(projectId, alertId, context):
+ return alerts.delete(projectId, alertId)
+
+
+@app.route('/alerts/notifications', methods=['POST', 'PUT'], authorizer=None)
+def send_alerts_notifications():
+ data = app.current_request.json_body
+ if data.get("token", "") != "nF46JdQqAM5v9KI9lPMpcu8o9xiJGvNNWOGL7TJP":
+ return {"errors": ["missing token"]}
+ return {"data": alerts.process_notifications(data.get("notifications", []))}
+
+
+@app.route('/{projectId}/funnels', methods=['POST', 'PUT'])
+def add_funnel(projectId, context):
+ data = app.current_request.json_body
+ return funnels.create(project_id=projectId,
+ user_id=context['userId'],
+ name=data["name"],
+ filter=data["filter"],
+ is_public=data.get("isPublic", False))
+
+
+@app.route('/{projectId}/funnels', methods=['GET'])
+def get_funnels(projectId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+
+ return {"data": funnels.get_by_user(project_id=projectId,
+ user_id=context['userId'],
+ range_value=None,
+ start_date=None,
+ end_date=None,
+ details=False)}
+
+
+@app.route('/{projectId}/funnels/details', methods=['GET'])
+def get_funnels_with_details(projectId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+
+ return {"data": funnels.get_by_user(project_id=projectId,
+ user_id=context['userId'],
+ range_value=params.get("rangeValue", None),
+ start_date=params.get('startDate', None),
+ end_date=params.get('endDate', None),
+ details=True)}
+
+
+@app.route('/{projectId}/funnels/issue_types', methods=['GET'])
+def get_possible_issue_types(projectId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+
+ return {"data": funnels.get_possible_issue_types(project_id=projectId)}
+
+
+@app.route('/{projectId}/funnels/{funnelId}/insights', methods=['GET'])
+def get_funnel_insights(projectId, funnelId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+
+ return {"data": funnels.get_top_insights(funnel_id=funnelId, project_id=projectId,
+ range_value=params.get("range_value", None),
+ start_date=params.get('startDate', None),
+ end_date=params.get('endDate', None))}
+
+
+@app.route('/{projectId}/funnels/{funnelId}/insights', methods=['POST', 'PUT'])
+def get_funnel_insights_on_the_fly(projectId, funnelId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+
+ return {
+ "data": funnels.get_top_insights_on_the_fly(funnel_id=funnelId, project_id=projectId, data={**params, **data})}
+
+
+@app.route('/{projectId}/funnels/{funnelId}/issues', methods=['GET'])
+def get_funnel_issues(projectId, funnelId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+
+ return funnels.get_issues(funnel_id=funnelId, project_id=projectId,
+ range_value=params.get("range_value", None),
+ start_date=params.get('startDate', None), end_date=params.get('endDate', None))
+
+
+@app.route('/{projectId}/funnels/{funnelId}/issues', methods=['POST', 'PUT'])
+def get_funnel_issues_on_the_fly(projectId, funnelId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+
+ return {"data": funnels.get_issues_on_the_fly(funnel_id=funnelId, project_id=projectId, data={**params, **data})}
+
+
+@app.route('/{projectId}/funnels/{funnelId}/sessions', methods=['GET'])
+def get_funnel_sessions(projectId, funnelId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+
+ return {"data": funnels.get_sessions(funnel_id=funnelId, user_id=context['userId'], project_id=projectId,
+ range_value=params.get("range_value", None),
+ start_date=params.get('startDate', None),
+ end_date=params.get('endDate', None))}
+
+
+@app.route('/{projectId}/funnels/{funnelId}/sessions', methods=['POST', 'PUT'])
+def get_funnel_sessions_on_the_fly(projectId, funnelId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ return {"data": funnels.get_sessions_on_the_fly(funnel_id=funnelId, user_id=context['userId'], project_id=projectId,
+ data={**params, **data})}
+
+
+@app.route('/{projectId}/funnels/issues/{issueId}/sessions', methods=['GET'])
+def get_issue_sessions(projectId, issueId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+
+ issue = issues.get(project_id=projectId, issue_id=issueId)
+ return {
+ "data": {"sessions": sessions.search_by_issue(user_id=context["userId"], project_id=projectId, issue=issue,
+ start_date=params.get('startDate', None),
+ end_date=params.get('endDate', None)),
+ "issue": issue}}
+
+
+@app.route('/{projectId}/funnels/{funnelId}/issues/{issueId}/sessions', methods=['POST', 'PUT'])
+def get_funnel_issue_sessions(projectId, funnelId, issueId, context):
+ data = app.current_request.json_body
+
+ data = funnels.search_by_issue(project_id=projectId, user_id=context["userId"], issue_id=issueId,
+ funnel_id=funnelId, data=data)
+ if "errors" in data:
+ return data
+ if data.get("issue") is None:
+ data["issue"] = issues.get(project_id=projectId, issue_id=issueId)
+ return {
+ "data": data
+ }
+
+
+@app.route('/{projectId}/funnels/{funnelId}', methods=['GET'])
+def get_funnel(projectId, funnelId, context):
+ return {"data": funnels.get(funnel_id=funnelId,
+ project_id=projectId)}
+
+
+@app.route('/{projectId}/funnels/{funnelId}', methods=['POST', 'PUT'])
+def edit_funnel(projectId, funnelId, context):
+ data = app.current_request.json_body
+ return funnels.update(funnel_id=funnelId,
+ user_id=context['userId'],
+ name=data.get("name"),
+ filter=data.get("filter"),
+ is_public=data.get("isPublic"))
+
+
+@app.route('/{projectId}/funnels/{funnelId}', methods=['DELETE'])
+def delete_filter(projectId, funnelId, context):
+ return funnels.delete(user_id=context['userId'], funnel_id=funnelId, project_id=projectId)
+
+
+@app.route('/{projectId}/sourcemaps', methods=['PUT'], authorizer=bp_authorizers.api_key_authorizer)
+def sign_sourcemap_for_upload(projectId, context):
+ data = app.current_request.json_body
+ project_id = projects.get_internal_project_id(projectId)
+ if project_id is None:
+ return Response(status_code=400, body='invalid projectId')
+
+ return {"data": sourcemaps.presign_upload_urls(project_id=project_id, urls=data["URL"])}
+
+
+@app.route('/config/weekly_report', methods=['GET'])
+def get_weekly_report_config(context):
+ return {"data": weekly_report.get_config(user_id=context['userId'])}
+
+
+@app.route('/config/weekly_report', methods=['POST', 'PUT'])
+def get_weekly_report_config(context):
+ data = app.current_request.json_body
+ return {"data": weekly_report.edit_config(user_id=context['userId'], weekly_report=data.get("weeklyReport", True))}
+
+
+@app.route('/{projectId}/issue_types', methods=['GET'])
+def issue_types(projectId, context):
+ return {"data": issues.get_types(project_id=projectId)}
+
+
+@app.route('/flows', methods=['GET', 'PUT', 'POST', 'DELETE'])
+@app.route('/{projectId}/flows', methods=['GET', 'PUT', 'POST', 'DELETE'])
+def removed_endpoints(context):
+ return Response(body={"errors": ["Endpoint no longer available"]}, status_code=410)
diff --git a/ee/api/chalicelib/blueprints/bp_core_crons.py b/ee/api/chalicelib/blueprints/bp_core_crons.py
new file mode 100644
index 000000000..a64d7ce10
--- /dev/null
+++ b/ee/api/chalicelib/blueprints/bp_core_crons.py
@@ -0,0 +1,18 @@
+from chalice import Blueprint
+from chalice import Cron
+from chalicelib import _overrides
+from chalicelib.core import reset_password, weekly_report
+
+app = Blueprint(__name__)
+_overrides.chalice_app(app)
+
+
+@app.schedule(Cron('0/60', '*', '*', '*', '?', '*'))
+def clear_password_reset(event):
+ reset_password.cron()
+
+
+# Run every monday.
+@app.schedule(Cron('5', '0', '?', '*', 'MON', '*'))
+def weekly_report2(event):
+ weekly_report.cron()
diff --git a/ee/api/chalicelib/blueprints/bp_core_dynamic.py b/ee/api/chalicelib/blueprints/bp_core_dynamic.py
new file mode 100644
index 000000000..54e20eda1
--- /dev/null
+++ b/ee/api/chalicelib/blueprints/bp_core_dynamic.py
@@ -0,0 +1,391 @@
+from chalice import Blueprint, Response
+
+from chalicelib import _overrides
+from chalicelib.core import metadata, errors_favorite_viewed, slack, alerts, sessions, integration_github, \
+ integrations_manager
+from chalicelib.utils import captcha
+from chalicelib.utils import helper
+from chalicelib.utils.helper import environ
+
+from chalicelib.ee import tenants
+from chalicelib.ee import signup
+from chalicelib.ee import users
+from chalicelib.ee import projects
+from chalicelib.ee import errors
+from chalicelib.ee import notifications
+from chalicelib.ee import boarding
+from chalicelib.ee import webhook
+from chalicelib.core.collaboration_slack import Slack
+
+app = Blueprint(__name__)
+_overrides.chalice_app(app)
+
+
+@app.route('/signedups', methods=['GET'], authorizer=None)
+def signed_ups():
+ return {
+ 'data': tenants.get_tenants()
+ }
+
+
+@app.route('/login', methods=['POST'], authorizer=None)
+def login():
+ data = app.current_request.json_body
+ if helper.allow_captcha() and not captcha.is_valid(data["g-recaptcha-response"]):
+ return {"errors": ["Invalid captcha."]}
+ r = users.authenticate(data['email'], data['password'],
+ for_plugin=False
+ )
+ if r is None:
+ return {
+ 'errors': ['You’ve entered invalid Email or Password.']
+ }
+
+ tenant_id = r.pop("tenantId")
+ # change this in open-source
+ r["limits"] = {
+ "teamMember": -1,
+ "projects": -1,
+ "metadata": metadata.get_remaining_metadata_with_count(tenant_id)}
+
+ c = tenants.get_by_tenant_id(tenant_id)
+ c.pop("createdAt")
+ c["projects"] = projects.get_projects(tenant_id=tenant_id, recording_state=True, recorded=True,
+ stack_integrations=True)
+ return {
+ 'jwt': r.pop('jwt'),
+ 'data': {
+ "user": r,
+ "client": c,
+ }
+ }
+
+
+@app.route('/account', methods=['GET'])
+def get_account(context):
+ r = users.get(tenant_id=context['tenantId'], user_id=context['userId'])
+ return {
+ 'data': {
+ **r,
+ "limits": {
+ "teamMember": -1,
+ # change this in open-source
+ "projects": -1, # change this in open-source
+ "metadata": metadata.get_remaining_metadata_with_count(context['tenantId'])},
+ }
+ }
+
+
+@app.route('/projects', methods=['GET'])
+def get_projects(context):
+ return {"data": projects.get_projects(tenant_id=context["tenantId"], recording_state=True, gdpr=True, recorded=True,
+ stack_integrations=True)}
+
+
+@app.route('/projects', methods=['POST', 'PUT'])
+def create_project(context):
+ data = app.current_request.json_body
+ return projects.create(tenant_id=context["tenantId"], user_id=context["userId"], data=data)
+
+
+@app.route('/projects/{projectId}', methods=['POST', 'PUT'])
+def create_edit_project(projectId, context):
+ data = app.current_request.json_body
+
+ return projects.edit(tenant_id=context["tenantId"], user_id=context["userId"], data=data, project_id=projectId)
+
+
+@app.route('/projects/{projectId}', methods=['GET'])
+def get_project(projectId, context):
+ return {"data": projects.get_project(tenant_id=context["tenantId"], project_id=projectId, include_last_session=True,
+ include_gdpr=True)}
+
+
+@app.route('/projects/{projectId}', methods=['DELETE'])
+def delete_project(projectId, context):
+ return projects.delete(tenant_id=context["tenantId"], user_id=context["userId"], project_id=projectId)
+
+
+@app.route('/projects/limit', methods=['GET'])
+def get_projects_limit(context):
+ return {"data": {
+ "current": projects.count_by_tenant(tenant_id=context["tenantId"]),
+ "remaining": -1 # change this in open-source
+ }}
+
+
+@app.route('/client', methods=['GET'])
+def get_client(context):
+ r = tenants.get_by_tenant_id(context['tenantId'])
+ if r is not None:
+ r.pop("createdAt")
+ r["projects"] = projects.get_projects(tenant_id=context['tenantId'], recording_state=True, recorded=True,
+ stack_integrations=True)
+ return {
+ 'data': r
+ }
+
+
+@app.route('/client/new_api_key', methods=['GET'])
+def generate_new_tenant_token(context):
+ return {
+ 'data': tenants.generate_new_api_key(context['tenantId'])
+ }
+
+
+@app.route('/client', methods=['PUT', 'POST'])
+def put_client(context):
+ data = app.current_request.json_body
+ return tenants.update(tenant_id=context["tenantId"], user_id=context["userId"], data=data)
+
+
+# TODO: delete this for production; it is used for dev only
+@app.route('/signup', methods=['GET'], authorizer=None)
+def get_all_signup():
+ return {"data": signup.get_signed_ups()}
+
+
+@app.route('/signup', methods=['POST', 'PUT'], authorizer=None)
+def signup_handler():
+ data = app.current_request.json_body
+ return signup.create_step1(data)
+
+
+@app.route('/integrations/slack', methods=['POST', 'PUT'])
+def add_slack_client(context):
+ data = app.current_request.json_body
+ if "url" not in data or "name" not in data:
+ return {"errors": ["please provide a url and a name"]}
+ if Slack.add_integration(tenant_id=context["tenantId"], url=data["url"], name=data["name"]):
+ return {"data": {"status": "success"}}
+ else:
+ return {
+ "errors": ["failed URL verification, if you received a message on slack, please notify our dev-team"]
+ }
+
+
+@app.route('/{projectId}/errors/search', methods=['POST'])
+def errors_search(projectId, context):
+ data = app.current_request.json_body
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+
+ return errors.search(data, projectId, user_id=context["userId"], status=params.get("status", "ALL"),
+ favorite_only="favorite" in params)
+
+
+@app.route('/{projectId}/errors/stats', methods=['GET'])
+def errors_stats(projectId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+
+ return errors.stats(projectId, user_id=context["userId"], **params)
+
+
+@app.route('/{projectId}/errors/{errorId}', methods=['GET'])
+def errors_get_details(projectId, errorId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+
+ data = errors.get_details(project_id=projectId, user_id=context["userId"], error_id=errorId, **params)
+ if data.get("data") is not None:
+ errors_favorite_viewed.viewed_error(project_id=projectId, user_id=context['userId'], error_id=errorId)
+ return data
+
+
+@app.route('/{projectId}/errors/{errorId}/stats', methods=['GET'])
+def errors_get_details_right_column(projectId, errorId, context):
+ params = app.current_request.query_params
+ if params is None:
+ params = {}
+
+ data = errors.get_details_chart(project_id=projectId, user_id=context["userId"], error_id=errorId, **params)
+ return data
+
+
+@app.route('/{projectId}/errors/{errorId}/sourcemaps', methods=['GET'])
+def errors_get_details_sourcemaps(projectId, errorId, context):
+ data = errors.get_trace(project_id=projectId, error_id=errorId)
+ if "errors" in data:
+ return data
+ return {
+ 'data': data
+ }
+
+
+@app.route('/async/alerts/notifications/{step}', methods=['POST', 'PUT'], authorizer=None)
+def send_alerts_notification_async(step):
+ data = app.current_request.json_body
+ if data.pop("auth") != environ["async_Token"]:
+ return {"errors": ["missing auth"]}
+ if step == "slack":
+ slack.send_batch(notifications_list=data.get("notifications"))
+ elif step == "email":
+ alerts.send_by_email_batch(notifications_list=data.get("notifications"))
+ elif step == "webhook":
+ webhook.trigger_batch(data_list=data.get("notifications"))
+
+
+@app.route('/notifications', methods=['GET'])
+def get_notifications(context):
+ return {"data": notifications.get_all(tenant_id=context['tenantId'], user_id=context['userId'])}
+
+
+@app.route('/notifications/{notificationId}/view', methods=['GET'])
+def view_notifications(notificationId, context):
+ return {"data": notifications.view_notification(notification_ids=[notificationId], user_id=context['userId'])}
+
+
+@app.route('/notifications/view', methods=['POST', 'PUT'])
+def batch_view_notifications(context):
+ data = app.current_request.json_body
+ return {"data": notifications.view_notification(notification_ids=data.get("ids", []),
+ startTimestamp=data.get("startTimestamp"),
+ endTimestamp=data.get("endTimestamp"),
+ user_id=context['userId'],
+ tenant_id=context["tenantId"])}
+
+
+@app.route('/notifications', methods=['POST', 'PUT'], authorizer=None)
+def create_notifications():
+ data = app.current_request.json_body
+ if data.get("token", "") != "nF46JdQqAM5v9KI9lPMpcu8o9xiJGvNNWOGL7TJP":
+ return {"errors": ["missing token"]}
+ return notifications.create(data.get("notifications", []))
+
+
+@app.route('/boarding', methods=['GET'])
+def get_boarding_state(context):
+ return {"data": boarding.get_state(tenant_id=context["tenantId"])}
+
+
+@app.route('/boarding/installing', methods=['GET'])
+def get_boarding_state_installing(context):
+ return {"data": boarding.get_state_installing(tenant_id=context["tenantId"])}
+
+
+@app.route('/boarding/identify-users', methods=['GET'])
+def get_boarding_state_identify_users(context):
+ return {"data": boarding.get_state_identify_users(tenant_id=context["tenantId"])}
+
+
+@app.route('/boarding/manage-users', methods=['GET'])
+def get_boarding_state_manage_users(context):
+ return {"data": boarding.get_state_manage_users(tenant_id=context["tenantId"])}
+
+
+@app.route('/boarding/integrations', methods=['GET'])
+def get_boarding_state_integrations(context):
+ return {"data": boarding.get_state_integrations(tenant_id=context["tenantId"])}
+
+
+# this endpoint supports both jira & github based on `provider` attribute
+@app.route('/integrations/issues', methods=['POST', 'PUT'])
+def add_edit_jira_cloud_github(context):
+ data = app.current_request.json_body
+ provider = data.get("provider", "").upper()
+ error, integration = integrations_manager.get_integration(tool=provider, tenant_id=context["tenantId"],
+ user_id=context["userId"])
+ if error is not None:
+ return error
+ return {"data": integration.add_edit(data=data)}
+
+
+@app.route('/integrations/slack/{integrationId}', methods=['GET'])
+def get_slack_webhook(integrationId, context):
+ return {"data": webhook.get(tenant_id=context["tenantId"], webhook_id=integrationId)}
+
+
+@app.route('/integrations/slack/channels', methods=['GET'])
+def get_slack_integration(context):
+ return {"data": webhook.get_by_type(tenant_id=context["tenantId"], webhook_type='slack')}
+
+
+@app.route('/integrations/slack/{integrationId}', methods=['DELETE'])
+def delete_slack_integration(integrationId, context):
+ return webhook.delete(context["tenantId"], integrationId)
+
+
+@app.route('/webhooks', methods=['POST', 'PUT'])
+def add_edit_webhook(context):
+ data = app.current_request.json_body
+ return {"data": webhook.add_edit(tenant_id=context["tenantId"], data=data, replace_none=True)}
+
+
+@app.route('/webhooks', methods=['GET'])
+def get_webhooks(context):
+ return {"data": webhook.get_by_tenant(tenant_id=context["tenantId"], replace_none=True)}
+
+
+@app.route('/webhooks/{webhookId}', methods=['DELETE'])
+def delete_webhook(webhookId, context):
+ return {"data": webhook.delete(tenant_id=context["tenantId"], webhook_id=webhookId)}
+
+
+@app.route('/client/members', methods=['GET'])
+def get_members(context):
+ return {"data": users.get_members(tenant_id=context['tenantId'])}
+
+
+@app.route('/client/members', methods=['PUT', 'POST'])
+def add_member(context):
+ data = app.current_request.json_body
+ return users.create_member(tenant_id=context['tenantId'], user_id=context['userId'], data=data)
+
+
+@app.route('/client/members/{memberId}', methods=['PUT', 'POST'])
+def edit_member(memberId, context):
+ data = app.current_request.json_body
+ return users.edit(tenant_id=context['tenantId'], editor_id=context['userId'], changes=data,
+ user_id_to_update=memberId)
+
+
+@app.route('/client/members/{memberId}', methods=['DELETE'])
+def delete_member(memberId, context):
+ return users.delete_member(tenant_id=context["tenantId"], user_id=context['userId'], id_to_delete=memberId)
+
+
+@app.route('/account/new_api_key', methods=['GET'])
+def generate_new_user_token(context):
+ return {"data": users.generate_new_api_key(user_id=context['userId'])}
+
+
+@app.route('/account', methods=['POST', 'PUT'])
+def edit_account(context):
+ data = app.current_request.json_body
+ return users.edit(tenant_id=context['tenantId'], user_id_to_update=context['userId'], changes=data,
+ editor_id=context['userId'])
+
+
+@app.route('/account/password', methods=['PUT', 'POST'])
+def change_client_password(context):
+ data = app.current_request.json_body
+ return users.change_password(email=context['email'], old_password=data["oldPassword"],
+ new_password=data["newPassword"], tenant_id=context["tenantId"],
+ user_id=context["userId"])
+
+
+@app.route('/metadata/session_search', methods=['GET'])
+def search_sessions_by_metadata(context):
+ params = app.current_request.query_params
+ if params is None:
+ return {"errors": ["please provide a key&value for search"]}
+ value = params.get('value', '')
+ key = params.get('key', '')
+ project_id = params.get('projectId')
+ if project_id is not None \
+ and not projects.is_authorized(project_id=project_id, tenant_id=context["tenantId"]):
+ return {"errors": ["unauthorized project"]}
+ if len(value) == 0 and len(key) == 0:
+ return {"errors": ["please provide a key&value for search"]}
+ if len(value) == 0:
+ return {"errors": ["please provide a value for search"]}
+ if len(key) == 0:
+ return {"errors": ["please provide a key for search"]}
+ return {
+ "data": sessions.search_by_metadata(tenant_id=context["tenantId"], user_id=context["userId"], m_value=value,
+ m_key=key,
+ project_id=project_id)}
diff --git a/ee/api/chalicelib/blueprints/bp_core_dynamic_crons.py b/ee/api/chalicelib/blueprints/bp_core_dynamic_crons.py
new file mode 100644
index 000000000..4c8f0beb4
--- /dev/null
+++ b/ee/api/chalicelib/blueprints/bp_core_dynamic_crons.py
@@ -0,0 +1,13 @@
+from chalice import Blueprint, Cron
+from chalicelib import _overrides
+from chalicelib.utils import helper
+
+app = Blueprint(__name__)
+_overrides.chalice_app(app)
+from chalicelib.ee import telemetry
+
+
+# Run every day.
+@app.schedule(Cron('0', '0', '?', '*', '*', '*'))
+def telemetry_cron(event):
+ telemetry.compute()
diff --git a/ee/api/chalicelib/blueprints/bp_ee.py b/ee/api/chalicelib/blueprints/bp_ee.py
new file mode 100644
index 000000000..7b3a9454a
--- /dev/null
+++ b/ee/api/chalicelib/blueprints/bp_ee.py
@@ -0,0 +1,6 @@
+from chalice import Blueprint
+
+from chalicelib import _overrides
+
+app = Blueprint(__name__)
+_overrides.chalice_app(app)
diff --git a/ee/api/chalicelib/blueprints/bp_ee_crons.py b/ee/api/chalicelib/blueprints/bp_ee_crons.py
new file mode 100644
index 000000000..3333fbb20
--- /dev/null
+++ b/ee/api/chalicelib/blueprints/bp_ee_crons.py
@@ -0,0 +1,6 @@
+from chalice import Blueprint
+from chalice import Cron
+from chalicelib import _overrides
+
+app = Blueprint(__name__)
+_overrides.chalice_app(app)
\ No newline at end of file
diff --git a/ee/api/chalicelib/blueprints/subs/__init__.py b/ee/api/chalicelib/blueprints/subs/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/ee/api/chalicelib/blueprints/subs/bp_dashboard.py b/ee/api/chalicelib/blueprints/subs/bp_dashboard.py
new file mode 100644
index 000000000..e14dd1b94
--- /dev/null
+++ b/ee/api/chalicelib/blueprints/subs/bp_dashboard.py
@@ -0,0 +1,606 @@
+from chalice import Blueprint
+from chalicelib.utils import helper
+from chalicelib import _overrides
+
+from chalicelib.ee import dashboard
+
+from chalicelib.core import metadata
+
+app = Blueprint(__name__)
+_overrides.chalice_app(app)
+
+
+@app.route('/{projectId}/dashboard/metadata', methods=['GET'])
+def get_metadata_map(projectId, context):
+ metamap = []
+ for m in metadata.get(project_id=projectId):
+ metamap.append({"name": m["key"], "key": f"metadata{m['index']}"})
+ return {"data": metamap}
+
+
+@app.route('/{projectId}/dashboard/sessions', methods=['GET', 'POST'])
+def get_dashboard_processed_sessions(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_processed_sessions(project_id=projectId, **{**data, **args})}
+
+
+@app.route('/{projectId}/dashboard/errors', methods=['GET', 'POST'])
+def get_dashboard_errors(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_errors(project_id=projectId, **{**data, **args})}
+
+
+@app.route('/{projectId}/dashboard/errors_trend', methods=['GET', 'POST'])
+def get_dashboard_errors_trend(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_errors_trend(project_id=projectId, **{**data, **args})}
+
+
+@app.route('/{projectId}/dashboard/application_activity', methods=['GET', 'POST'])
+def get_dashboard_application_activity(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_application_activity(project_id=projectId, **{**data, **args})}
+
+
+@app.route('/{projectId}/dashboard/page_metrics', methods=['GET', 'POST'])
+def get_dashboard_page_metrics(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_page_metrics(project_id=projectId, **{**data, **args})}
+
+
+@app.route('/{projectId}/dashboard/user_activity', methods=['GET', 'POST'])
+def get_dashboard_user_activity(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_user_activity(project_id=projectId, **{**data, **args})}
+
+
+@app.route('/{projectId}/dashboard/performance', methods=['GET', 'POST'])
+def get_dashboard_performance(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_performance(project_id=projectId, **{**data, **args})}
+
+
+@app.route('/{projectId}/dashboard/slowest_images', methods=['GET', 'POST'])
+def get_dashboard_slowest_images(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_slowest_images(project_id=projectId, **{**data, **args})}
+
+
+@app.route('/{projectId}/dashboard/missing_resources', methods=['GET', 'POST'])
+def get_performance_sessions(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_missing_resources_trend(project_id=projectId, **{**data, **args})}
+
+
+@app.route('/{projectId}/dashboard/network', methods=['GET', 'POST'])
+def get_network_widget(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_network(project_id=projectId, **{**data, **args})}
+
+
+@app.route('/{projectId}/dashboard/{widget}/search', methods=['GET'])
+def get_dashboard_autocomplete(projectId, widget, context):
+ params = app.current_request.query_params
+ if params is None:
+ return {"data": []}
+
+ if widget in ['performance']:
+ data = dashboard.search(params.get('q', ''), params.get('type', ''), project_id=projectId,
+ platform=params.get('platform', None), performance=True)
+ elif widget in ['pages', 'pages_dom_buildtime', 'top_metrics', 'time_to_render',
+ 'impacted_sessions_by_slow_pages', 'pages_response_time']:
+ data = dashboard.search(params.get('q', ''), params.get('type', ''), project_id=projectId,
+ platform=params.get('platform', None), pages_only=True)
+ elif widget in ['resources_loading_time']:
+ data = dashboard.search(params.get('q', ''), params.get('type', ''), project_id=projectId,
+ platform=params.get('platform', None), performance=False)
+ elif widget in ['time_between_events', 'events']:
+ data = dashboard.search(params.get('q', ''), params.get('type', ''), project_id=projectId,
+ platform=params.get('platform', None), performance=False, events_only=True)
+ elif widget in ['metadata']:
+ data = dashboard.search(params.get('q', ''), None, project_id=projectId,
+ platform=params.get('platform', None), metadata=True, key=params.get("key"))
+ else:
+ return {"errors": [f"unsupported widget: {widget}"]}
+ return {'data': data}
+
+
+# 1
+@app.route('/{projectId}/dashboard/slowest_resources', methods=['GET', 'POST'])
+def get_dashboard_slowest_resources(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_slowest_resources(project_id=projectId, **{**data, **args})}
+
+
+# 2
+@app.route('/{projectId}/dashboard/resources_loading_time', methods=['GET', 'POST'])
+def get_dashboard_resources(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_resources_loading_time(project_id=projectId, **{**data, **args})}
+
+
+# 3
+@app.route('/{projectId}/dashboard/pages_dom_buildtime', methods=['GET', 'POST'])
+def get_dashboard_pages_dom(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_pages_dom_build_time(project_id=projectId, **{**data, **args})}
+
+
+# 4
+@app.route('/{projectId}/dashboard/busiest_time_of_day', methods=['GET', 'POST'])
+def get_dashboard_busiest_time_of_day(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_busiest_time_of_day(project_id=projectId, **{**data, **args})}
+
+
+# 5
+@app.route('/{projectId}/dashboard/sessions_location', methods=['GET', 'POST'])
+def get_dashboard_sessions_location(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_sessions_location(project_id=projectId, **{**data, **args})}
+
+
+# 6
+@app.route('/{projectId}/dashboard/speed_location', methods=['GET', 'POST'])
+def get_dashboard_speed_location(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_speed_index_location(project_id=projectId, **{**data, **args})}
+
+
+# 7
+@app.route('/{projectId}/dashboard/pages_response_time', methods=['GET', 'POST'])
+def get_dashboard_pages_response_time(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_pages_response_time(project_id=projectId, **{**data, **args})}
+
+
+# 8
+@app.route('/{projectId}/dashboard/pages_response_time_distribution', methods=['GET', 'POST'])
+def get_dashboard_pages_response_time_distribution(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_pages_response_time_distribution(project_id=projectId, **{**data, **args})}
+
+
+# 9
+@app.route('/{projectId}/dashboard/top_metrics', methods=['GET', 'POST'])
+def get_dashboard_top_metrics(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_top_metrics(project_id=projectId, **{**data, **args})}
+
+
+# 10
+@app.route('/{projectId}/dashboard/time_to_render', methods=['GET', 'POST'])
+def get_dashboard_time_to_render(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_time_to_render(project_id=projectId, **{**data, **args})}
+
+
+# 11
+@app.route('/{projectId}/dashboard/impacted_sessions_by_slow_pages', methods=['GET', 'POST'])
+def get_dashboard_impacted_sessions_by_slow_pages(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_impacted_sessions_by_slow_pages(project_id=projectId, **{**data, **args})}
+
+
+# 12
+@app.route('/{projectId}/dashboard/memory_consumption', methods=['GET', 'POST'])
+def get_dashboard_memory_consumption(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_memory_consumption(project_id=projectId, **{**data, **args})}
+
+
+# 12.1
+@app.route('/{projectId}/dashboard/fps', methods=['GET', 'POST'])
+def get_dashboard_avg_fps(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_avg_fps(project_id=projectId, **{**data, **args})}
+
+
+# 12.2
+@app.route('/{projectId}/dashboard/cpu', methods=['GET', 'POST'])
+def get_dashboard_avg_cpu(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_avg_cpu(project_id=projectId, **{**data, **args})}
+
+
+# 13
+@app.route('/{projectId}/dashboard/crashes', methods=['GET', 'POST'])
+def get_dashboard_impacted_sessions_by_slow_pages(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_crashes(project_id=projectId, **{**data, **args})}
+
+
+# 14
+@app.route('/{projectId}/dashboard/domains_errors', methods=['GET', 'POST'])
+def get_dashboard_domains_errors(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_domains_errors(project_id=projectId, **{**data, **args})}
+
+
+# 14.1
+@app.route('/{projectId}/dashboard/domains_errors_4xx', methods=['GET', 'POST'])
+def get_dashboard_domains_errors_4xx(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_domains_errors_4xx(project_id=projectId, **{**data, **args})}
+
+
+# 14.2
+@app.route('/{projectId}/dashboard/domains_errors_5xx', methods=['GET', 'POST'])
+def get_dashboard_domains_errors_5xx(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_domains_errors_5xx(project_id=projectId, **{**data, **args})}
+
+
+# 15
+@app.route('/{projectId}/dashboard/slowest_domains', methods=['GET', 'POST'])
+def get_dashboard_slowest_domains(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_slowest_domains(project_id=projectId, **{**data, **args})}
+
+
+# 16
+@app.route('/{projectId}/dashboard/errors_per_domains', methods=['GET', 'POST'])
+def get_dashboard_errors_per_domains(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_errors_per_domains(project_id=projectId, **{**data, **args})}
+
+
+# 17
+@app.route('/{projectId}/dashboard/sessions_per_browser', methods=['GET', 'POST'])
+def get_dashboard_sessions_per_browser(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_sessions_per_browser(project_id=projectId, **{**data, **args})}
+
+
+# 18
+@app.route('/{projectId}/dashboard/calls_errors', methods=['GET', 'POST'])
+def get_dashboard_calls_errors(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_calls_errors(project_id=projectId, **{**data, **args})}
+
+
+# 18.1
+@app.route('/{projectId}/dashboard/calls_errors_4xx', methods=['GET', 'POST'])
+def get_dashboard_calls_errors_4xx(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_calls_errors_4xx(project_id=projectId, **{**data, **args})}
+
+
+# 18.2
+@app.route('/{projectId}/dashboard/calls_errors_5xx', methods=['GET', 'POST'])
+def get_dashboard_calls_errors_5xx(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_calls_errors_5xx(project_id=projectId, **{**data, **args})}
+
+
+# 19
+@app.route('/{projectId}/dashboard/errors_per_type', methods=['GET', 'POST'])
+def get_dashboard_errors_per_type(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_errors_per_type(project_id=projectId, **{**data, **args})}
+
+
+# 20
+@app.route('/{projectId}/dashboard/resources_by_party', methods=['GET', 'POST'])
+def get_dashboard_resources_by_party(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_resources_by_party(project_id=projectId, **{**data, **args})}
+
+
+# 21
+@app.route('/{projectId}/dashboard/resource_type_vs_response_end', methods=['GET', 'POST'])
+def get_dashboard_errors_per_resource_type(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.resource_type_vs_response_end(project_id=projectId, **{**data, **args})}
+
+
+# 22
+@app.route('/{projectId}/dashboard/resources_vs_visually_complete', methods=['GET', 'POST'])
+def get_dashboard_resources_vs_visually_complete(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_resources_vs_visually_complete(project_id=projectId, **{**data, **args})}
+
+
+# 23
+@app.route('/{projectId}/dashboard/impacted_sessions_by_js_errors', methods=['GET', 'POST'])
+def get_dashboard_impacted_sessions_by_js_errors(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_impacted_sessions_by_js_errors(project_id=projectId, **{**data, **args})}
+
+
+# 24
+@app.route('/{projectId}/dashboard/resources_count_by_type', methods=['GET', 'POST'])
+def get_dashboard_resources_count_by_type(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": dashboard.get_resources_count_by_type(project_id=projectId, **{**data, **args})}
+
+
+# 25
+@app.route('/{projectId}/dashboard/time_between_events', methods=['GET'])
+def get_dashboard_resources_count_by_type(projectId, context):
+ return {"errors": ["please choose 2 events"]}
+
+
+@app.route('/{projectId}/dashboard/overview', methods=['GET', 'POST'])
+def get_dashboard_group(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": [
+ *helper.explode_widget(key="count_sessions",
+ data=dashboard.get_processed_sessions(project_id=projectId, **{**data, **args})),
+ *helper.explode_widget(data={**dashboard.get_application_activity(project_id=projectId, **{**data, **args}),
+ "chart": dashboard.get_performance(project_id=projectId, **{**data, **args})
+ .get("chart", [])}),
+ *helper.explode_widget(data=dashboard.get_page_metrics(project_id=projectId, **{**data, **args})),
+ *helper.explode_widget(data=dashboard.get_user_activity(project_id=projectId, **{**data, **args})),
+ *helper.explode_widget(data=dashboard.get_pages_dom_build_time(project_id=projectId, **{**data, **args}),
+ key="avg_pages_dom_buildtime"),
+ *helper.explode_widget(data=dashboard.get_pages_response_time(project_id=projectId, **{**data, **args}),
+ key="avg_pages_response_time"),
+ *helper.explode_widget(dashboard.get_top_metrics(project_id=projectId, **{**data, **args})),
+ *helper.explode_widget(data=dashboard.get_time_to_render(project_id=projectId, **{**data, **args}),
+ key="avg_time_to_render"),
+ *helper.explode_widget(dashboard.get_memory_consumption(project_id=projectId, **{**data, **args})),
+ *helper.explode_widget(dashboard.get_avg_cpu(project_id=projectId, **{**data, **args})),
+ *helper.explode_widget(dashboard.get_avg_fps(project_id=projectId, **{**data, **args})),
+ ]}
+
+
+@app.route('/{projectId}/dashboard/errors_crashes', methods=['GET', 'POST'])
+def get_dashboard_group(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": [
+ {"key": "errors",
+ "data": dashboard.get_errors(project_id=projectId, **{**data, **args})},
+ {"key": "errors_trend",
+ "data": dashboard.get_errors_trend(project_id=projectId, **{**data, **args})},
+ {"key": "crashes",
+ "data": dashboard.get_crashes(project_id=projectId, **{**data, **args})},
+ {"key": "domains_errors",
+ "data": dashboard.get_domains_errors(project_id=projectId, **{**data, **args})},
+ {"key": "errors_per_domains",
+ "data": dashboard.get_errors_per_domains(project_id=projectId, **{**data, **args})},
+ {"key": "calls_errors",
+ "data": dashboard.get_calls_errors(project_id=projectId, **{**data, **args})},
+ {"key": "errors_per_type",
+ "data": dashboard.get_errors_per_type(project_id=projectId, **{**data, **args})},
+ {"key": "impacted_sessions_by_js_errors",
+ "data": dashboard.get_impacted_sessions_by_js_errors(project_id=projectId, **{**data, **args})}
+ ]}
+
+
+@app.route('/{projectId}/dashboard/resources', methods=['GET', 'POST'])
+def get_dashboard_group(projectId, context):
+ data = app.current_request.json_body
+ if data is None:
+ data = {}
+ params = app.current_request.query_params
+ args = dashboard.dashboard_args(params)
+
+ return {"data": [
+ {"key": "slowest_images",
+ "data": dashboard.get_slowest_images(project_id=projectId, **{**data, **args})},
+ {"key": "missing_resources",
+ "data": dashboard.get_missing_resources_trend(project_id=projectId, **{**data, **args})},
+ {"key": "slowest_resources",
+ "data": dashboard.get_slowest_resources(project_id=projectId, type='all', **{**data, **args})},
+ {"key": "resources_loading_time",
+ "data": dashboard.get_resources_loading_time(project_id=projectId, **{**data, **args})},
+ {"key": "resources_by_party",
+ "data": dashboard.get_resources_by_party(project_id=projectId, **{**data, **args})},
+ {"key": "resource_type_vs_response_end",
+ "data": dashboard.resource_type_vs_response_end(project_id=projectId, **{**data, **args})},
+ {"key": "resources_vs_visually_complete",
+ "data": dashboard.get_resources_vs_visually_complete(project_id=projectId, **{**data, **args})},
+ {"key": "resources_count_by_type",
+ "data": dashboard.get_resources_count_by_type(project_id=projectId, **{**data, **args})}
+ ]}
diff --git a/ee/api/chalicelib/core/__init__.py b/ee/api/chalicelib/core/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/ee/api/chalicelib/core/alerts.py b/ee/api/chalicelib/core/alerts.py
new file mode 100644
index 000000000..6ed9aff3e
--- /dev/null
+++ b/ee/api/chalicelib/core/alerts.py
@@ -0,0 +1,168 @@
+import time
+from chalicelib.utils.helper import environ
+
+from chalicelib.core import notifications
+from chalicelib.utils import pg_client, helper, email_helper
+from chalicelib.utils.TimeUTC import TimeUTC
+import json
+
+ALLOW_UPDATE = ["name", "description", "active", "detectionMethod", "query", "options"]
+
+
+def get(id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ SELECT *
+ FROM public.alerts
+ WHERE alert_id =%(id)s;""",
+ {"id": id})
+ )
+ a = helper.dict_to_camel_case(cur.fetchone())
+ return __process_circular(a)
+
+
+def get_all(project_id):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify("""\
+ SELECT *
+ FROM public.alerts
+ WHERE project_id =%(project_id)s AND deleted_at ISNULL
+ ORDER BY created_at;""",
+ {"project_id": project_id})
+ cur.execute(query=query)
+ all = helper.list_to_camel_case(cur.fetchall())
+ for a in all:
+ a = __process_circular(a)
+ return all
+
+
+SUPPORTED_THRESHOLD = [15, 30, 60, 120, 240, 1440]
+
+
+def __transform_structure(data):
+ if data.get("options") is None:
+ return f"Missing 'options'", None
+ if data["options"].get("currentPeriod") not in SUPPORTED_THRESHOLD:
+ return f"Unsupported currentPeriod, please provide one of these values {SUPPORTED_THRESHOLD}", None
+ if data["options"].get("previousPeriod", 15) not in SUPPORTED_THRESHOLD:
+ return f"Unsupported previousPeriod, please provide one of these values {SUPPORTED_THRESHOLD}", None
+ if data["options"].get("renotifyInterval") is None:
+ data["options"]["renotifyInterval"] = 720
+ data["query"]["right"] = float(data["query"]["right"])
+ data["query"] = json.dumps(data["query"])
+ data["description"] = data["description"] if data.get("description") is not None and len(
+ data["description"]) > 0 else None
+ if data.get("options"):
+ messages = []
+ for m in data["options"].get("message", []):
+ if m.get("value") is None:
+ continue
+ m["value"] = str(m["value"])
+ messages.append(m)
+ data["options"]["message"] = messages
+ data["options"] = json.dumps(data["options"])
+ return None, data
+
+
+def __process_circular(alert):
+ if alert is None:
+ return None
+ alert.pop("deletedAt")
+ alert["createdAt"] = TimeUTC.datetime_to_timestamp(alert["createdAt"])
+ return alert
+
+
+def create(project_id, data):
+ err, data = __transform_structure(data)
+ if err is not None:
+ return {"errors": [err]}
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ INSERT INTO public.alerts(project_id, name, description, detection_method, query, options)
+ VALUES (%(project_id)s, %(name)s, %(description)s, %(detectionMethod)s, %(query)s, %(options)s::jsonb)
+ RETURNING *;""",
+ {"project_id": project_id, **data})
+ )
+ a = helper.dict_to_camel_case(cur.fetchone())
+ return {"data": helper.dict_to_camel_case(__process_circular(a))}
+
+
+def update(id, changes):
+ changes = {k: changes[k] for k in changes.keys() if k in ALLOW_UPDATE}
+ err, changes = __transform_structure(changes)
+ if err is not None:
+ return {"errors": [err]}
+ updateq = []
+ for k in changes.keys():
+ updateq.append(f"{helper.key_to_snake_case(k)} = %({k})s")
+ if len(updateq) == 0:
+ return {"errors": ["nothing to update"]}
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(f"""\
+ UPDATE public.alerts
+ SET {", ".join(updateq)}
+ WHERE alert_id =%(id)s AND deleted_at ISNULL
+ RETURNING *;""",
+ {"id": id, **changes})
+ cur.execute(query=query)
+ a = helper.dict_to_camel_case(cur.fetchone())
+ return {"data": __process_circular(a)}
+
+
+def process_notifications(data):
+ full = {}
+ for n in data:
+ if "message" in n["options"]:
+ webhook_data = {}
+ if "data" in n["options"]:
+ webhook_data = n["options"].pop("data")
+ for c in n["options"].pop("message"):
+ if c["type"] not in full:
+ full[c["type"]] = []
+ if c["type"] in ["slack", "email"]:
+ full[c["type"]].append({
+ "notification": n,
+ "destination": c["value"]
+ })
+ elif c["type"] in ["webhook"]:
+ full[c["type"]].append({"data": webhook_data, "destination": c["value"]})
+ notifications.create(data)
+ BATCH_SIZE = 200
+ for t in full.keys():
+ for i in range(0, len(full[t]), BATCH_SIZE):
+ helper.async_post(environ['alert_ntf'] % t, {"notifications": full[t][i:i + BATCH_SIZE]})
+
+
+def send_by_email(notification, destination):
+ if notification is None:
+ return
+ email_helper.alert_email(recipients=destination,
+ subject=f'"{notification["title"]}" has been triggered',
+ data={
+ "message": f'"{notification["title"]}" {notification["description"]}',
+ "project_id": notification["options"]["projectId"]})
+
+
+def send_by_email_batch(notifications_list):
+ if notifications_list is None or len(notifications_list) == 0:
+ return
+ for n in notifications_list:
+ send_by_email(notification=n.get("notification"), destination=n.get("destination"))
+ time.sleep(1)
+
+
+def delete(project_id, alert_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ UPDATE public.alerts
+ SET
+ deleted_at = timezone('utc'::text, now()),
+ active = FALSE
+ WHERE
+ alert_id = %(alert_id)s AND project_id=%(project_id)s;""",
+ {"alert_id": alert_id, "project_id": project_id})
+ )
+ return {"data": {"state": "success"}}
diff --git a/ee/api/chalicelib/core/announcements.py b/ee/api/chalicelib/core/announcements.py
new file mode 100644
index 000000000..bb719afb9
--- /dev/null
+++ b/ee/api/chalicelib/core/announcements.py
@@ -0,0 +1,42 @@
+from chalicelib.utils import pg_client
+from chalicelib.utils import helper
+from chalicelib.utils.helper import environ
+from chalicelib.utils.TimeUTC import TimeUTC
+
+
+def get_all(user_id):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify("""
+ SELECT a.*, u.last >= (EXTRACT(EPOCH FROM a.created_at)*1000) AS viewed
+ FROM public.announcements AS a,
+ (SELECT COALESCE(CAST(data ->> 'lastAnnouncementView' AS bigint), 0)
+ FROM public.users
+ WHERE user_id = %(userId)s
+ LIMIT 1) AS u(last)
+ ORDER BY a.created_at DESC;""",
+ {"userId": user_id})
+ cur.execute(
+ query
+ )
+ announcements = helper.list_to_camel_case(cur.fetchall())
+ for a in announcements:
+ a["createdAt"] = TimeUTC.datetime_to_timestamp(a["createdAt"])
+ if a["imageUrl"] is not None and len(a["imageUrl"]) > 0:
+ a["imageUrl"] = environ["announcement_bucket"] + a["imageUrl"]
+ return announcements
+
+
+def view(user_id):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify("""
+ UPDATE public.users
+ SET data=data ||
+ ('{"lastAnnouncementView":' ||
+ (EXTRACT(EPOCH FROM timezone('utc'::text, now())) * 1000)::bigint - 20 * 000 ||
+ '}')::jsonb
+ WHERE user_id = %(userId)s;""",
+ {"userId": user_id})
+ cur.execute(
+ query
+ )
+ return True
diff --git a/ee/api/chalicelib/core/authorizers.py b/ee/api/chalicelib/core/authorizers.py
new file mode 100644
index 000000000..36884f1e0
--- /dev/null
+++ b/ee/api/chalicelib/core/authorizers.py
@@ -0,0 +1,61 @@
+from chalicelib.utils.helper import environ
+import jwt
+from chalicelib.utils import helper
+from chalicelib.utils.TimeUTC import TimeUTC
+
+from chalicelib.ee import tenants
+from chalicelib.ee import users
+
+
+def jwt_authorizer(token):
+ token = token.split(" ")
+ if len(token) != 2 or token[0].lower() != "bearer":
+ return None
+ try:
+ payload = jwt.decode(
+ token[1],
+ environ["jwt_secret"],
+ algorithms=environ["jwt_algorithm"],
+ audience=[f"plugin:{helper.get_stage_name()}", f"front:{helper.get_stage_name()}"]
+ )
+ except jwt.ExpiredSignatureError:
+ print("! JWT Expired signature")
+ return None
+ except BaseException as e:
+ print("! JWT Base Exception")
+ return None
+ return payload
+
+
+def jwt_context(context):
+ user = users.get(user_id=context["userId"], tenant_id=context["tenantId"])
+ if user is None:
+ return None
+ return {
+ "tenantId": context["tenantId"],
+ "userId": context["userId"],
+ **user
+ }
+
+
+def generate_jwt(id, tenant_id, iat, aud):
+ token = jwt.encode(
+ payload={
+ "userId": id,
+ "tenantId": tenant_id,
+ "exp": iat // 1000 + int(environ["jwt_exp_delta_seconds"]) + TimeUTC.get_utc_offset() // 1000,
+ "iss": environ["jwt_issuer"],
+ "iat": iat // 1000,
+ "aud": aud
+ },
+ key=environ["jwt_secret"],
+ algorithm=environ["jwt_algorithm"]
+ )
+ return token.decode("utf-8")
+
+
+def api_key_authorizer(token):
+ t = tenants.get_by_api_key(token)
+ if t is not None:
+ t["createdAt"] = TimeUTC.datetime_to_timestamp(t["createdAt"])
+ return t
diff --git a/ee/api/chalicelib/core/collaboration_slack.py b/ee/api/chalicelib/core/collaboration_slack.py
new file mode 100644
index 000000000..5fc80511c
--- /dev/null
+++ b/ee/api/chalicelib/core/collaboration_slack.py
@@ -0,0 +1,126 @@
+import requests
+from chalicelib.utils.helper import environ
+from datetime import datetime
+from chalicelib.core import webhook
+
+
+class Slack:
+ @classmethod
+ def add_integration(cls, tenant_id, **args):
+ url = args["url"]
+ name = args["name"]
+ if cls.__say_hello(url):
+ webhook.add(tenant_id=tenant_id,
+ endpoint=url,
+ webhook_type="slack",
+ name=name)
+ return True
+ return False
+
+ @classmethod
+ def __say_hello(cls, url):
+ r = requests.post(
+ url=url,
+ json={
+ "attachments": [
+ {
+ "text": "Welcome to OpenReplay",
+ "ts": datetime.now().timestamp(),
+ }
+ ]
+ })
+ if r.status_code != 200:
+ print("slack integration failed")
+ print(r.text)
+ return False
+ return True
+
+ @classmethod
+ def send_text(cls, tenant_id, webhook_id, text, **args):
+ integration = cls.__get(tenant_id=tenant_id, integration_id=webhook_id)
+ if integration is None:
+ return {"errors": ["slack integration not found"]}
+ print("====> sending slack notification")
+ r = requests.post(
+ url=integration["endpoint"],
+ json={
+ "attachments": [
+ {
+ "text": text,
+ "ts": datetime.now().timestamp(),
+ **args
+ }
+ ]
+ })
+ print(r)
+ print(r.text)
+ return {"data": r.text}
+
+ @classmethod
+ def send_batch(cls, tenant_id, webhook_id, attachments):
+ integration = cls.__get(tenant_id=tenant_id, integration_id=webhook_id)
+ if integration is None:
+ return {"errors": ["slack integration not found"]}
+ print(f"====> sending slack batch notification: {len(attachments)}")
+ for i in range(0, len(attachments), 100):
+ r = requests.post(
+ url=integration["endpoint"],
+ json={"attachments": attachments[i:i + 100]})
+ if r.status_code != 200:
+ print("!!!! something went wrong")
+ print(r)
+ print(r.text)
+
+ @classmethod
+ def __share_to_slack(cls, tenant_id, integration_id, fallback, pretext, title, title_link, text):
+ integration = cls.__get(tenant_id=tenant_id, integration_id=integration_id)
+ if integration is None:
+ return {"errors": ["slack integration not found"]}
+ r = requests.post(
+ url=integration["endpoint"],
+ json={
+ "attachments": [
+ {
+ "fallback": fallback,
+ "pretext": pretext,
+ "title": title,
+ "title_link": title_link,
+ "text": text,
+ "ts": datetime.now().timestamp()
+ }
+ ]
+ })
+ return r.text
+
+ @classmethod
+ def share_session(cls, tenant_id, project_id, session_id, user, comment, integration_id=None):
+ args = {"fallback": f"{user} has shared the below session!",
+ "pretext": f"{user} has shared the below session!",
+ "title": f"{environ['SITE_URL']}/{project_id}/session/{session_id}",
+ "title_link": f"{environ['SITE_URL']}/{project_id}/session/{session_id}",
+ "text": comment}
+ return {"data": cls.__share_to_slack(tenant_id, integration_id, **args)}
+
+ @classmethod
+ def share_error(cls, tenant_id, project_id, error_id, user, comment, integration_id=None):
+ args = {"fallback": f"{user} has shared the below error!",
+ "pretext": f"{user} has shared the below error!",
+ "title": f"{environ['SITE_URL']}/{project_id}/errors/{error_id}",
+ "title_link": f"{environ['SITE_URL']}/{project_id}/errors/{error_id}",
+ "text": comment}
+ return {"data": cls.__share_to_slack(tenant_id, integration_id, **args)}
+
+ @classmethod
+ def has_slack(cls, tenant_id):
+ integration = cls.__get(tenant_id=tenant_id)
+ return not (integration is None or len(integration) == 0)
+
+ @classmethod
+ def __get(cls, tenant_id, integration_id=None):
+ if integration_id is not None:
+ return webhook.get(tenant_id=tenant_id, webhook_id=integration_id)
+
+ integrations = webhook.get_by_type(tenant_id=tenant_id, webhook_type="slack")
+ if integrations is None or len(integrations) == 0:
+ return None
+ return integrations[0]
diff --git a/ee/api/chalicelib/core/errors_favorite_viewed.py b/ee/api/chalicelib/core/errors_favorite_viewed.py
new file mode 100644
index 000000000..0bbc10b68
--- /dev/null
+++ b/ee/api/chalicelib/core/errors_favorite_viewed.py
@@ -0,0 +1,91 @@
+from chalicelib.utils import pg_client
+
+
+def add_favorite_error(project_id, user_id, error_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""\
+ INSERT INTO public.user_favorite_errors
+ (user_id, error_id)
+ VALUES
+ (%(userId)s,%(error_id)s);""",
+ {"userId": user_id, "error_id": error_id})
+ )
+ return {"errorId": error_id, "favorite": True}
+
+
+def remove_favorite_error(project_id, user_id, error_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""\
+ DELETE FROM public.user_favorite_errors
+ WHERE
+ user_id = %(userId)s
+ AND error_id = %(error_id)s;""",
+ {"userId": user_id, "error_id": error_id})
+ )
+ return {"errorId": error_id, "favorite": False}
+
+
+def favorite_error(project_id, user_id, error_id):
+ exists, favorite = error_exists_and_favorite(user_id=user_id, error_id=error_id)
+ if not exists:
+ return {"errors": ["cannot bookmark non-rehydrated errors"]}
+ if favorite:
+ return remove_favorite_error(project_id=project_id, user_id=user_id, error_id=error_id)
+ return add_favorite_error(project_id=project_id, user_id=user_id, error_id=error_id)
+
+
+def error_exists_and_favorite(user_id, error_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ """SELECT errors.error_id AS exists, ufe.error_id AS favorite
+ FROM public.errors
+ LEFT JOIN (SELECT error_id FROM public.user_favorite_errors WHERE user_id = %(userId)s) AS ufe USING (error_id)
+ WHERE error_id = %(error_id)s;""",
+ {"userId": user_id, "error_id": error_id})
+ )
+ r = cur.fetchone()
+ if r is None:
+ return False, False
+ return True, r.get("favorite") is not None
+
+
+def add_viewed_error(project_id, user_id, error_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ INSERT INTO public.user_viewed_errors
+ (user_id, error_id)
+ VALUES
+ (%(userId)s,%(error_id)s);""",
+ {"userId": user_id, "error_id": error_id})
+ )
+
+
+def viewed_error_exists(user_id, error_id):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ """SELECT
+ errors.error_id AS hydrated,
+ COALESCE((SELECT TRUE
+ FROM public.user_viewed_errors AS ve
+ WHERE ve.error_id = %(error_id)s
+ AND ve.user_id = %(userId)s LIMIT 1), FALSE) AS viewed
+ FROM public.errors
+ WHERE error_id = %(error_id)s""",
+ {"userId": user_id, "error_id": error_id})
+ cur.execute(
+ query=query
+ )
+ r = cur.fetchone()
+ if r:
+ return r.get("viewed")
+ return True
+
+
+def viewed_error(project_id, user_id, error_id):
+ if viewed_error_exists(user_id=user_id, error_id=error_id):
+ return None
+ return add_viewed_error(project_id=project_id, user_id=user_id, error_id=error_id)
diff --git a/ee/api/chalicelib/core/events.py b/ee/api/chalicelib/core/events.py
new file mode 100644
index 000000000..65ade49ed
--- /dev/null
+++ b/ee/api/chalicelib/core/events.py
@@ -0,0 +1,422 @@
+from chalicelib.utils import pg_client, helper
+from chalicelib.core import sessions_metas, metadata
+from chalicelib.core import issues
+from chalicelib.utils.TimeUTC import TimeUTC
+from chalicelib.utils.event_filter_definition import SupportedFilter, Event
+
+
+def get_customs_by_sessionId2_pg(session_id, project_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify("""\
+ SELECT
+ c.*,
+ 'CUSTOM' AS type
+ FROM events_common.customs AS c
+ WHERE
+ c.session_id = %(session_id)s
+ ORDER BY c.timestamp;""",
+ {"project_id": project_id, "session_id": session_id})
+ )
+ rows = cur.fetchall()
+ return helper.dict_to_camel_case(rows)
+
+
+def __merge_cells(rows, start, count, replacement):
+ rows[start] = replacement
+ rows = rows[:start + 1] + rows[start + count:]
+ return rows
+
+
+def __get_grouped_clickrage(rows, session_id):
+ click_rage_issues = issues.get_by_session_id(session_id=session_id, issue_type="click_rage")
+ if len(click_rage_issues) == 0:
+ return rows
+
+ for c in click_rage_issues:
+ merge_count = c.get("payload")
+ if merge_count is not None:
+ merge_count = merge_count.get("count", 3)
+ else:
+ merge_count = 3
+ for i in range(len(rows)):
+ if rows[i]["timestamp"] == c["timestamp"]:
+ rows = __merge_cells(rows=rows,
+ start=i,
+ count=merge_count,
+ replacement={**rows[i], "type": "CLICKRAGE", "count": merge_count})
+ break
+ return rows
+
+
+def get_by_sessionId2_pg(session_id, project_id, group_clickrage=False):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify("""\
+ SELECT
+ c.*,
+ 'CLICK' AS type
+ FROM events.clicks AS c
+ WHERE
+ c.session_id = %(session_id)s
+ ORDER BY c.timestamp;""",
+ {"project_id": project_id, "session_id": session_id})
+ )
+ rows = cur.fetchall()
+ if group_clickrage:
+ rows = __get_grouped_clickrage(rows=rows, session_id=session_id)
+
+ cur.execute(cur.mogrify("""
+ SELECT
+ i.*,
+ 'INPUT' AS type
+ FROM events.inputs AS i
+ WHERE
+ i.session_id = %(session_id)s
+ ORDER BY i.timestamp;""",
+ {"project_id": project_id, "session_id": session_id})
+ )
+ rows += cur.fetchall()
+ cur.execute(cur.mogrify("""\
+ SELECT
+ l.*,
+ l.path AS value,
+ l.path AS url,
+ 'LOCATION' AS type
+ FROM events.pages AS l
+ WHERE
+ l.session_id = %(session_id)s
+ ORDER BY l.timestamp;""", {"project_id": project_id, "session_id": session_id}))
+ rows += cur.fetchall()
+ rows = helper.list_to_camel_case(rows)
+ rows = sorted(rows, key=lambda k: k["messageId"])
+ return rows
+
+
+def __get_data_for_extend(data):
+ if "errors" not in data:
+ return data["data"]
+
+
+def __pg_errors_query(source=None):
+ return f"""((SELECT DISTINCT ON(lg.message)
+ lg.message AS value,
+ source,
+ '{event_type.ERROR.ui_type}' AS type
+ FROM {event_type.ERROR.table} INNER JOIN public.errors AS lg USING (error_id) LEFT JOIN public.sessions AS s USING(session_id)
+ WHERE
+ s.project_id = %(project_id)s
+ AND lg.message ILIKE %(svalue)s
+ {"AND source = %(source)s" if source is not None else ""}
+ LIMIT 5)
+ UNION ALL
+ (SELECT DISTINCT ON(lg.name)
+ lg.name AS value,
+ source,
+ '{event_type.ERROR.ui_type}' AS type
+ FROM {event_type.ERROR.table} INNER JOIN public.errors AS lg USING (error_id) LEFT JOIN public.sessions AS s USING(session_id)
+ WHERE
+ s.project_id = %(project_id)s
+ AND lg.name ILIKE %(svalue)s
+ {"AND source = %(source)s" if source is not None else ""}
+ LIMIT 5)
+ UNION
+ (SELECT DISTINCT ON(lg.message)
+ lg.message AS value,
+ source,
+ '{event_type.ERROR.ui_type}' AS type
+ FROM {event_type.ERROR.table} INNER JOIN public.errors AS lg USING (error_id) LEFT JOIN public.sessions AS s USING(session_id)
+ WHERE
+ s.project_id = %(project_id)s
+ AND lg.message ILIKE %(value)s
+ {"AND source = %(source)s" if source is not None else ""}
+ LIMIT 5)
+ UNION ALL
+ (SELECT DISTINCT ON(lg.name)
+ lg.name AS value,
+ source,
+ '{event_type.ERROR.ui_type}' AS type
+ FROM {event_type.ERROR.table} INNER JOIN public.errors AS lg USING (error_id) LEFT JOIN public.sessions AS s USING(session_id)
+ WHERE
+ s.project_id = %(project_id)s
+ AND lg.name ILIKE %(value)s
+ {"AND source = %(source)s" if source is not None else ""}
+ LIMIT 5));"""
+
+
+def __search_pg_errors(project_id, value, key=None, source=None):
+ now = TimeUTC.now()
+
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(__pg_errors_query(source), {"project_id": project_id, "value": helper.string_to_sql_like(value),
+ "svalue": helper.string_to_sql_like("^" + value),
+ "source": source}))
+ results = helper.list_to_camel_case(cur.fetchall())
+ print(f"{TimeUTC.now() - now} : errors")
+ return results
+
+
+def __search_pg_errors_ios(project_id, value, key=None, source=None):
+ now = TimeUTC.now()
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""(SELECT DISTINCT ON(lg.reason)
+ lg.reason AS value,
+ '{event_type.ERROR_IOS.ui_type}' AS type
+ FROM {event_type.ERROR_IOS.table} INNER JOIN public.crashes_ios AS lg USING (crash_id) LEFT JOIN public.sessions AS s USING(session_id)
+ WHERE
+ s.project_id = %(project_id)s
+ AND lg.reason ILIKE %(value)s
+ LIMIT 5)
+ UNION ALL
+ (SELECT DISTINCT ON(lg.name)
+ lg.name AS value,
+ '{event_type.ERROR_IOS.ui_type}' AS type
+ FROM {event_type.ERROR_IOS.table} INNER JOIN public.crashes_ios AS lg USING (crash_id) LEFT JOIN public.sessions AS s USING(session_id)
+ WHERE
+ s.project_id = %(project_id)s
+ AND lg.name ILIKE %(value)s
+ LIMIT 5);""",
+ {"project_id": project_id, "value": helper.string_to_sql_like(value)}))
+ results = helper.list_to_camel_case(cur.fetchall())
+ print(f"{TimeUTC.now() - now} : errors")
+ return results
+
+
+def __search_pg_metadata(project_id, value, key=None, source=None):
+ meta_keys = metadata.get(project_id=project_id)
+ meta_keys = {m["key"]: m["index"] for m in meta_keys}
+ if len(meta_keys) == 0 or key is not None and key not in meta_keys.keys():
+ return []
+ sub_from = []
+ if key is not None:
+ meta_keys = {key: meta_keys[key]}
+
+ for k in meta_keys.keys():
+ colname = metadata.index_to_colname(meta_keys[k])
+ sub_from.append(
+ f"(SELECT DISTINCT ON ({colname}) {colname} AS value, '{k}' AS key FROM public.sessions WHERE project_id = %(project_id)s AND {colname} ILIKE %(value)s LIMIT 5)")
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify(f"""\
+ SELECT key, value, 'METADATA' AS TYPE
+ FROM({" UNION ALL ".join(sub_from)}) AS all_metas
+ LIMIT 5;""", {"project_id": project_id, "value": helper.string_to_sql_like(value)}))
+ results = helper.list_to_camel_case(cur.fetchall())
+ return results
+
+
+def __generic_query(typename):
+ return f"""\
+ (SELECT value, type
+ FROM public.autocomplete
+ WHERE
+ project_id = %(project_id)s
+ AND type='{typename}'
+ AND value ILIKE %(svalue)s
+ LIMIT 5)
+ UNION
+ (SELECT value, type
+ FROM public.autocomplete
+ WHERE
+ project_id = %(project_id)s
+ AND type='{typename}'
+ AND value ILIKE %(value)s
+ LIMIT 5)"""
+
+
+def __generic_autocomplete(event: Event):
+ def f(project_id, value, key=None, source=None):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify(__generic_query(event.ui_type),
+ {"project_id": project_id, "value": helper.string_to_sql_like(value),
+ "svalue": helper.string_to_sql_like("^" + value)}))
+ return helper.list_to_camel_case(cur.fetchall())
+
+ return f
+
+
+class event_type:
+ CLICK = Event(ui_type="CLICK", table="events.clicks", column="label")
+ INPUT = Event(ui_type="INPUT", table="events.inputs", column="label")
+ LOCATION = Event(ui_type="LOCATION", table="events.pages", column="base_path")
+ CUSTOM = Event(ui_type="CUSTOM", table="events_common.customs", column="name")
+ REQUEST = Event(ui_type="REQUEST", table="events_common.requests", column="url")
+ GRAPHQL = Event(ui_type="GRAPHQL", table="events.graphql", column="name")
+ STATEACTION = Event(ui_type="STATEACTION", table="events.state_actions", column="name")
+ ERROR = Event(ui_type="ERROR", table="events.errors",
+ column=None) # column=None because errors are searched by name or message
+ METADATA = Event(ui_type="METADATA", table="public.sessions", column=None)
+ # IOS
+ CLICK_IOS = Event(ui_type="CLICK_IOS", table="events_ios.clicks", column="label")
+ INPUT_IOS = Event(ui_type="INPUT_IOS", table="events_ios.inputs", column="label")
+ VIEW_IOS = Event(ui_type="VIEW_IOS", table="events_ios.views", column="name")
+ CUSTOM_IOS = Event(ui_type="CUSTOM_IOS", table="events_common.customs", column="name")
+ REQUEST_IOS = Event(ui_type="REQUEST_IOS", table="events_common.requests", column="url")
+ ERROR_IOS = Event(ui_type="ERROR_IOS", table="events_ios.crashes",
+ column=None) # column=None because errors are searched by name or message
+
+
+SUPPORTED_TYPES = {
+ event_type.CLICK.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.CLICK),
+ query=__generic_query(typename=event_type.CLICK.ui_type),
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=["/"]),
+ event_type.INPUT.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.INPUT),
+ query=__generic_query(typename=event_type.INPUT.ui_type),
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=["/"]),
+ event_type.LOCATION.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.LOCATION),
+ query=__generic_query(typename=event_type.LOCATION.ui_type),
+ value_limit=3,
+ starts_with="/",
+ starts_limit=3,
+ ignore_if_starts_with=[]),
+ event_type.CUSTOM.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.CUSTOM),
+ query=__generic_query(typename=event_type.CUSTOM.ui_type),
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=[""]),
+ event_type.REQUEST.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.REQUEST),
+ query=__generic_query(typename=event_type.REQUEST.ui_type),
+ value_limit=3,
+ starts_with="/",
+ starts_limit=3,
+ ignore_if_starts_with=[""]),
+ event_type.GRAPHQL.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.GRAPHQL),
+ query=__generic_query(typename=event_type.GRAPHQL.ui_type),
+ value_limit=3,
+ starts_with="/",
+ starts_limit=4,
+ ignore_if_starts_with=[]),
+ event_type.STATEACTION.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.STATEACTION),
+ query=__generic_query(typename=event_type.STATEACTION.ui_type),
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=[]),
+ event_type.ERROR.ui_type: SupportedFilter(get=__search_pg_errors,
+ query=None,
+ value_limit=4,
+ starts_with="",
+ starts_limit=4,
+ ignore_if_starts_with=["/"]),
+ event_type.METADATA.ui_type: SupportedFilter(get=__search_pg_metadata,
+ query=None,
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=["/"]),
+ # IOS
+ event_type.CLICK_IOS.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.CLICK_IOS),
+ query=__generic_query(typename=event_type.CLICK_IOS.ui_type),
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=["/"]),
+ event_type.INPUT_IOS.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.INPUT_IOS),
+ query=__generic_query(typename=event_type.INPUT_IOS.ui_type),
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=["/"]),
+ event_type.VIEW_IOS.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.VIEW_IOS),
+ query=__generic_query(typename=event_type.VIEW_IOS.ui_type),
+ value_limit=3,
+ starts_with="/",
+ starts_limit=3,
+ ignore_if_starts_with=[]),
+ event_type.CUSTOM_IOS.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.CUSTOM_IOS),
+ query=__generic_query(typename=event_type.CUSTOM_IOS.ui_type),
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=[""]),
+ event_type.REQUEST_IOS.ui_type: SupportedFilter(get=__generic_autocomplete(event_type.REQUEST_IOS),
+ query=__generic_query(typename=event_type.REQUEST_IOS.ui_type),
+ value_limit=3,
+ starts_with="/",
+ starts_limit=3,
+ ignore_if_starts_with=[""]),
+ event_type.ERROR_IOS.ui_type: SupportedFilter(get=__search_pg_errors,
+ query=None,
+ value_limit=4,
+ starts_with="",
+ starts_limit=4,
+ ignore_if_starts_with=["/"]),
+}
+
+
+def __get_merged_queries(queries, value, project_id):
+ if len(queries) == 0:
+ return []
+ now = TimeUTC.now()
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify("(" + ")UNION ALL(".join(queries) + ")",
+ {"project_id": project_id, "value": helper.string_to_sql_like(value)}))
+ results = helper.list_to_camel_case(cur.fetchall())
+ print(f"{TimeUTC.now() - now} : merged-queries for len: {len(queries)}")
+ return results
+
+
+def __get_autocomplete_table(value, project_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify("""SELECT DISTINCT ON(value,type) project_id, value, type
+ FROM (SELECT *
+ FROM (SELECT *,
+ ROW_NUMBER() OVER (PARTITION BY type ORDER BY value) AS Row_ID
+ FROM public.autocomplete
+ WHERE project_id = %(project_id)s
+ AND value ILIKE %(svalue)s
+ UNION
+ SELECT *,
+ ROW_NUMBER() OVER (PARTITION BY type ORDER BY value) AS Row_ID
+ FROM public.autocomplete
+ WHERE project_id = %(project_id)s
+ AND value ILIKE %(value)s) AS u
+ WHERE Row_ID <= 5) AS sfa
+ ORDER BY sfa.type;""",
+ {"project_id": project_id, "value": helper.string_to_sql_like(value),
+ "svalue": helper.string_to_sql_like("^" + value)}))
+ results = helper.list_to_camel_case(cur.fetchall())
+ return results
+
+
+def search_pg2(text, event_type, project_id, source, key):
+ if not event_type:
+ return {"data": __get_autocomplete_table(text, project_id)}
+
+ if event_type.upper() in SUPPORTED_TYPES.keys():
+ rows = SUPPORTED_TYPES[event_type.upper()].get(project_id=project_id, value=text, key=key, source=source)
+ if event_type.upper() + "_IOS" in SUPPORTED_TYPES.keys():
+ rows += SUPPORTED_TYPES[event_type.upper() + "_IOS"].get(project_id=project_id, value=text, key=key,
+ source=source)
+ elif event_type.upper() + "_IOS" in SUPPORTED_TYPES.keys():
+ rows = SUPPORTED_TYPES[event_type.upper() + "_IOS"].get(project_id=project_id, value=text, key=key,
+ source=source)
+ elif event_type.upper() in sessions_metas.SUPPORTED_TYPES.keys():
+ return sessions_metas.search(text, event_type, project_id)
+ elif event_type.upper().endswith("_IOS") \
+ and event_type.upper()[:-len("_IOS")] in sessions_metas.SUPPORTED_TYPES.keys():
+ return sessions_metas.search(text, event_type, project_id)
+ else:
+ return {"errors": ["unsupported event"]}
+
+ return {"data": rows}
+
+
+def get_errors_by_session_id(session_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify(f"""\
+ SELECT er.*,ur.*, er.timestamp - s.start_ts AS time
+ FROM {event_type.ERROR.table} AS er INNER JOIN public.errors AS ur USING (error_id) INNER JOIN public.sessions AS s USING (session_id)
+ WHERE
+ er.session_id = %(session_id)s
+ ORDER BY timestamp;""", {"session_id": session_id}))
+ errors = cur.fetchall()
+ for e in errors:
+ e["stacktrace_parsed_at"] = TimeUTC.datetime_to_timestamp(e["stacktrace_parsed_at"])
+ return helper.list_to_camel_case(errors)
diff --git a/ee/api/chalicelib/core/events_ios.py b/ee/api/chalicelib/core/events_ios.py
new file mode 100644
index 000000000..bae48599f
--- /dev/null
+++ b/ee/api/chalicelib/core/events_ios.py
@@ -0,0 +1,69 @@
+from chalicelib.utils import pg_client, helper
+from chalicelib.core import events
+
+
+def get_customs_by_sessionId(session_id, project_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify(f"""\
+ SELECT
+ c.*,
+ '{events.event_type.CUSTOM_IOS.ui_type}' AS type
+ FROM {events.event_type.CUSTOM_IOS.table} AS c
+ WHERE
+ c.session_id = %(session_id)s
+ ORDER BY c.timestamp;""",
+ {"project_id": project_id, "session_id": session_id})
+ )
+ rows = cur.fetchall()
+ return helper.dict_to_camel_case(rows)
+
+
+def get_by_sessionId(session_id, project_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify(f"""
+ SELECT
+ c.*,
+ '{events.event_type.CLICK_IOS.ui_type}' AS type
+ FROM {events.event_type.CLICK_IOS.table} AS c
+ WHERE
+ c.session_id = %(session_id)s
+ ORDER BY c.timestamp;""",
+ {"project_id": project_id, "session_id": session_id})
+ )
+ rows = cur.fetchall()
+
+ cur.execute(cur.mogrify(f"""
+ SELECT
+ i.*,
+ '{events.event_type.INPUT_IOS.ui_type}' AS type
+ FROM {events.event_type.INPUT_IOS.table} AS i
+ WHERE
+ i.session_id = %(session_id)s
+ ORDER BY i.timestamp;""",
+ {"project_id": project_id, "session_id": session_id})
+ )
+ rows += cur.fetchall()
+ cur.execute(cur.mogrify(f"""
+ SELECT
+ v.*,
+ '{events.event_type.VIEW_IOS.ui_type}' AS type
+ FROM {events.event_type.VIEW_IOS.table} AS v
+ WHERE
+ v.session_id = %(session_id)s
+ ORDER BY v.timestamp;""", {"project_id": project_id, "session_id": session_id}))
+ rows += cur.fetchall()
+ rows = helper.list_to_camel_case(rows)
+ rows = sorted(rows, key=lambda k: k["timestamp"])
+ return rows
+
+
+def get_crashes_by_session_id(session_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify(f"""
+ SELECT cr.*,uc.*, cr.timestamp - s.start_ts AS time
+ FROM {events.event_type.ERROR_IOS.table} AS cr INNER JOIN public.crashes_ios AS uc USING (crash_id) INNER JOIN public.sessions AS s USING (session_id)
+ WHERE
+ cr.session_id = %(session_id)s
+ ORDER BY timestamp;""", {"session_id": session_id}))
+ errors = cur.fetchall()
+ return helper.list_to_camel_case(errors)
diff --git a/ee/api/chalicelib/core/funnels.py b/ee/api/chalicelib/core/funnels.py
new file mode 100644
index 000000000..d14513a96
--- /dev/null
+++ b/ee/api/chalicelib/core/funnels.py
@@ -0,0 +1,275 @@
+import chalicelib.utils.helper
+from chalicelib.core import events, significance, sessions
+from chalicelib.utils.TimeUTC import TimeUTC
+
+from chalicelib.utils import helper, pg_client
+from chalicelib.utils import dev
+import json
+
+REMOVE_KEYS = ["key", "_key", "startDate", "endDate"]
+
+ALLOW_UPDATE_FOR = ["name", "filter"]
+
+
+def filter_stages(stages):
+ ALLOW_TYPES = [events.event_type.CLICK.ui_type, events.event_type.INPUT.ui_type,
+ events.event_type.LOCATION.ui_type, events.event_type.CUSTOM.ui_type,
+ events.event_type.CLICK_IOS.ui_type, events.event_type.INPUT_IOS.ui_type,
+ events.event_type.VIEW_IOS.ui_type, events.event_type.CUSTOM_IOS.ui_type, ]
+ return [s for s in stages if s["type"] in ALLOW_TYPES and s.get("value") is not None]
+
+
+def create(project_id, user_id, name, filter, is_public):
+ helper.delete_keys_from_dict(filter, REMOVE_KEYS)
+ filter["events"] = filter_stages(stages=filter.get("events", []))
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify("""\
+ INSERT INTO public.funnels (project_id, user_id, name, filter,is_public)
+ VALUES (%(project_id)s, %(user_id)s, %(name)s, %(filter)s::jsonb,%(is_public)s)
+ RETURNING *;""",
+ {"user_id": user_id, "project_id": project_id, "name": name, "filter": json.dumps(filter),
+ "is_public": is_public})
+
+ cur.execute(
+ query
+ )
+ r = cur.fetchone()
+ r["created_at"] = TimeUTC.datetime_to_timestamp(r["created_at"])
+ r = helper.dict_to_camel_case(r)
+ r["filter"]["startDate"], r["filter"]["endDate"] = TimeUTC.get_start_end_from_range(r["filter"]["rangeValue"])
+ return {"data": r}
+
+
+def update(funnel_id, user_id, name=None, filter=None, is_public=None):
+ s_query = []
+ if filter is not None:
+ helper.delete_keys_from_dict(filter, REMOVE_KEYS)
+ s_query.append("filter = %(filter)s::jsonb")
+ if name is not None and len(name) > 0:
+ s_query.append("name = %(name)s")
+ if is_public is not None:
+ s_query.append("is_public = %(is_public)s")
+ if len(s_query) == 0:
+ return {"errors": ["Nothing to update"]}
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(f"""\
+ UPDATE public.funnels
+ SET {" , ".join(s_query)}
+ WHERE funnel_id=%(funnel_id)s
+ RETURNING *;""",
+ {"user_id": user_id, "funnel_id": funnel_id, "name": name,
+ "filter": json.dumps(filter) if filter is not None else None, "is_public": is_public})
+ # print("--------------------")
+ # print(query)
+ # print("--------------------")
+ cur.execute(
+ query
+ )
+ r = cur.fetchone()
+ r["created_at"] = TimeUTC.datetime_to_timestamp(r["created_at"])
+ r = helper.dict_to_camel_case(r)
+ r["filter"]["startDate"], r["filter"]["endDate"] = TimeUTC.get_start_end_from_range(r["filter"]["rangeValue"])
+ return {"data": r}
+
+
+def get_by_user(project_id, user_id, range_value=None, start_date=None, end_date=None, details=False):
+ with pg_client.PostgresClient() as cur:
+ team_query = """INNER JOIN
+ (
+ SELECT collaborators.user_id
+ FROM public.users AS creator
+ INNER JOIN public.users AS collaborators USING (tenant_id)
+ WHERE creator.user_id=%(user_id)s
+ ) AS team USING (user_id)"""
+ cur.execute(
+ cur.mogrify(
+ f"""\
+ SELECT DISTINCT ON (funnels.funnel_id) funnel_id,project_id, user_id, name, created_at, deleted_at, is_public
+ {",filter" if details else ""}
+ FROM public.funnels {team_query}
+ WHERE project_id = %(project_id)s
+ AND funnels.deleted_at IS NULL
+ AND (funnels.user_id = %(user_id)s OR funnels.is_public);""",
+ {"project_id": project_id, "user_id": user_id}
+ )
+ )
+
+ rows = cur.fetchall()
+ rows = helper.list_to_camel_case(rows)
+ for row in rows:
+ row["createdAt"] = TimeUTC.datetime_to_timestamp(row["createdAt"])
+ if details:
+ row["filter"]["events"] = filter_stages(row["filter"]["events"])
+ get_start_end_time(filter_d=row["filter"], range_value=range_value, start_date=start_date,
+ end_date=end_date)
+ counts = sessions.search2_pg(data=row["filter"], project_id=project_id, user_id=None, count_only=True)
+ row["sessionsCount"] = counts["countSessions"]
+ row["usersCount"] = counts["countUsers"]
+ overview = significance.get_overview(filter_d=row["filter"], project_id=project_id)
+ row["stages"] = overview["stages"]
+ row.pop("filter")
+ row["stagesCount"] = len(row["stages"])
+ # TODO: ask david to count it alone
+ row["criticalIssuesCount"] = overview["criticalIssuesCount"]
+ row["missedConversions"] = 0 if len(row["stages"]) < 2 \
+ else row["stages"][0]["sessionsCount"] - row["stages"][-1]["sessionsCount"]
+ return rows
+
+
+def get_possible_issue_types(project_id):
+ return [{"type": t, "title": chalicelib.utils.helper.get_issue_title(t)} for t in
+ ['click_rage', 'dead_click', 'excessive_scrolling',
+ 'bad_request', 'missing_resource', 'memory', 'cpu',
+ 'slow_resource', 'slow_page_load', 'crash', 'custom_event_error',
+ 'js_error']]
+
+
+def get_start_end_time(filter_d, range_value, start_date, end_date):
+ if start_date is not None and end_date is not None:
+ filter_d["startDate"], filter_d["endDate"] = start_date, end_date
+ elif range_value is not None and len(range_value) > 0:
+ filter_d["rangeValue"] = range_value
+ filter_d["startDate"], filter_d["endDate"] = TimeUTC.get_start_end_from_range(range_value)
+ else:
+ filter_d["startDate"], filter_d["endDate"] = TimeUTC.get_start_end_from_range(filter_d["rangeValue"])
+
+
+def delete(project_id, funnel_id, user_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ UPDATE public.funnels
+ SET deleted_at = timezone('utc'::text, now())
+ WHERE project_id = %(project_id)s
+ AND funnel_id = %(funnel_id)s;""",
+ {"funnel_id": funnel_id, "project_id": project_id, "user_id": user_id})
+ )
+
+ return {"data": {"state": "success"}}
+
+
+def get_sessions(project_id, funnel_id, user_id, range_value=None, start_date=None, end_date=None):
+ f = get(funnel_id=funnel_id, project_id=project_id)
+ if f is None:
+ return {"errors": ["filter not found"]}
+ get_start_end_time(filter_d=f["filter"], range_value=range_value, start_date=start_date, end_date=end_date)
+ return sessions.search2_pg(data=f["filter"], project_id=project_id, user_id=user_id)
+
+
+def get_sessions_on_the_fly(funnel_id, project_id, user_id, data):
+ data["events"] = filter_stages(data.get("events", []))
+ if len(data["events"]) == 0:
+ f = get(funnel_id=funnel_id, project_id=project_id)
+ if f is None:
+ return {"errors": ["funnel not found"]}
+ get_start_end_time(filter_d=f["filter"], range_value=data.get("rangeValue", None),
+ start_date=data.get('startDate', None),
+ end_date=data.get('endDate', None))
+ data = f["filter"]
+ return sessions.search2_pg(data=data, project_id=project_id, user_id=user_id)
+
+
+def get_top_insights(project_id, funnel_id, range_value=None, start_date=None, end_date=None):
+ f = get(funnel_id=funnel_id, project_id=project_id)
+ if f is None:
+ return {"errors": ["filter not found"]}
+ get_start_end_time(filter_d=f["filter"], range_value=range_value, start_date=start_date, end_date=end_date)
+ insights, total_drop_due_to_issues = significance.get_top_insights(filter_d=f["filter"], project_id=project_id)
+ insights[-1]["dropDueToIssues"] = total_drop_due_to_issues
+ return {"stages": helper.list_to_camel_case(insights),
+ "totalDropDueToIssues": total_drop_due_to_issues}
+
+
+def get_top_insights_on_the_fly(funnel_id, project_id, data):
+ data["events"] = filter_stages(data.get("events", []))
+ if len(data["events"]) == 0:
+ f = get(funnel_id=funnel_id, project_id=project_id)
+ if f is None:
+ return {"errors": ["funnel not found"]}
+ get_start_end_time(filter_d=f["filter"], range_value=data.get("rangeValue", None),
+ start_date=data.get('startDate', None),
+ end_date=data.get('endDate', None))
+ data = f["filter"]
+ insights, total_drop_due_to_issues = significance.get_top_insights(filter_d=data, project_id=project_id)
+ if len(insights) > 0:
+ insights[-1]["dropDueToIssues"] = total_drop_due_to_issues
+ return {"stages": helper.list_to_camel_case(insights),
+ "totalDropDueToIssues": total_drop_due_to_issues}
+
+
+def get_issues(project_id, funnel_id, range_value=None, start_date=None, end_date=None):
+ f = get(funnel_id=funnel_id, project_id=project_id)
+ if f is None:
+ return {"errors": ["funnel not found"]}
+ get_start_end_time(filter_d=f["filter"], range_value=range_value, start_date=start_date, end_date=end_date)
+ return {"data": {
+ "issues": helper.dict_to_camel_case(significance.get_issues_list(filter_d=f["filter"], project_id=project_id))
+ }}
+
+
+@dev.timed
+def get_issues_on_the_fly(funnel_id, project_id, data):
+ first_stage = data.get("firstStage")
+ last_stage = data.get("lastStage")
+ data["events"] = filter_stages(data.get("events", []))
+ if len(data["events"]) == 0:
+ f = get(funnel_id=funnel_id, project_id=project_id)
+ if f is None:
+ return {"errors": ["funnel not found"]}
+ get_start_end_time(filter_d=f["filter"], range_value=data.get("rangeValue", None),
+ start_date=data.get('startDate', None),
+ end_date=data.get('endDate', None))
+ data = f["filter"]
+ return {
+ "issues": helper.dict_to_camel_case(
+ significance.get_issues_list(filter_d=data, project_id=project_id, first_stage=first_stage,
+ last_stage=last_stage))}
+
+
+def get(funnel_id, project_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ """\
+ SELECT
+ *
+ FROM public.funnels
+ WHERE project_id = %(project_id)s
+ AND deleted_at IS NULL
+ AND funnel_id = %(funnel_id)s;""",
+ {"funnel_id": funnel_id, "project_id": project_id}
+ )
+ )
+
+ f = helper.dict_to_camel_case(cur.fetchone())
+ if f is None:
+ return None
+
+ f["createdAt"] = TimeUTC.datetime_to_timestamp(f["createdAt"])
+ f["filter"]["events"] = filter_stages(stages=f["filter"]["events"])
+ return f
+
+
+@dev.timed
+def search_by_issue(user_id, project_id, funnel_id, issue_id, data, range_value=None, start_date=None, end_date=None):
+ if len(data.get("events", [])) == 0:
+ f = get(funnel_id=funnel_id, project_id=project_id)
+ if f is None:
+ return {"errors": ["funnel not found"]}
+ get_start_end_time(filter_d=f["filter"], range_value=range_value, start_date=data.get('startDate', start_date),
+ end_date=data.get('endDate', end_date))
+ data = f["filter"]
+
+ # insights, total_drop_due_to_issues = significance.get_top_insights(filter_d=data, project_id=project_id)
+ issues = get_issues_on_the_fly(funnel_id=funnel_id, project_id=project_id, data=data).get("issues", {})
+ issues = issues.get("significant", []) + issues.get("insignificant", [])
+ issue = None
+ for i in issues:
+ if i.get("issueId", "") == issue_id:
+ issue = i
+ break
+ return {"sessions": sessions.search2_pg(user_id=user_id, project_id=project_id, issue=issue,
+ data=data) if issue is not None else {"total": 0, "sessions": []},
+ # "stages": helper.list_to_camel_case(insights),
+ # "totalDropDueToIssues": total_drop_due_to_issues,
+ "issue": issue}
diff --git a/ee/api/chalicelib/core/integration_base.py b/ee/api/chalicelib/core/integration_base.py
new file mode 100644
index 000000000..45e1891a1
--- /dev/null
+++ b/ee/api/chalicelib/core/integration_base.py
@@ -0,0 +1,53 @@
+from abc import ABC, abstractmethod
+from chalicelib.utils import pg_client, helper
+
+
+class BaseIntegration(ABC):
+
+ def __init__(self, user_id, ISSUE_CLASS):
+ self._user_id = user_id
+ self.issue_handler = ISSUE_CLASS(self.integration_token)
+
+ @property
+ @abstractmethod
+ def provider(self):
+ pass
+
+ @property
+ def integration_token(self):
+ integration = self.get()
+ if integration is None:
+ print("no token configured yet")
+ return None
+ return integration["token"]
+
+ def get(self):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ """SELECT *
+ FROM public.oauth_authentication
+ WHERE user_id=%(user_id)s AND provider=%(provider)s;""",
+ {"user_id": self._user_id, "provider": self.provider.lower()})
+ )
+ return helper.dict_to_camel_case(cur.fetchone())
+
+ @abstractmethod
+ def get_obfuscated(self):
+ pass
+
+ @abstractmethod
+ def update(self, changes):
+ pass
+
+ @abstractmethod
+ def _add(self, data):
+ pass
+
+ @abstractmethod
+ def delete(self):
+ pass
+
+ @abstractmethod
+ def add_edit(self, data):
+ pass
diff --git a/ee/api/chalicelib/core/integration_base_issue.py b/ee/api/chalicelib/core/integration_base_issue.py
new file mode 100644
index 000000000..deb5792e6
--- /dev/null
+++ b/ee/api/chalicelib/core/integration_base_issue.py
@@ -0,0 +1,41 @@
+from abc import ABC, abstractmethod
+
+
+class RequestException(Exception):
+ pass
+
+
+def proxy_issues_handler(e):
+ print("=======__proxy_issues_handler=======")
+ print(str(e))
+ return {"errors": [str(e)]}
+
+
+class BaseIntegrationIssue(ABC):
+ def __init__(self, provider, integration_token):
+ self.provider = provider
+ self.integration_token = integration_token
+
+ @abstractmethod
+ def create_new_assignment(self, integration_project_id, title, description, assignee, issue_type):
+ pass
+
+ @abstractmethod
+ def get_by_ids(self, saved_issues):
+ pass
+
+ @abstractmethod
+ def get(self, integration_project_id, assignment_id):
+ pass
+
+ @abstractmethod
+ def comment(self, integration_project_id, assignment_id, comment):
+ pass
+
+ @abstractmethod
+ def get_metas(self, integration_project_id):
+ pass
+
+ @abstractmethod
+ def get_projects(self):
+ pass
diff --git a/ee/api/chalicelib/core/integration_github.py b/ee/api/chalicelib/core/integration_github.py
new file mode 100644
index 000000000..a13946e46
--- /dev/null
+++ b/ee/api/chalicelib/core/integration_github.py
@@ -0,0 +1,78 @@
+from chalicelib.utils import pg_client, helper
+from chalicelib.core.integration_github_issue import GithubIntegrationIssue
+from chalicelib.core import integration_base
+
+PROVIDER = "GITHUB"
+
+
+class GitHubIntegration(integration_base.BaseIntegration):
+
+ def __init__(self, tenant_id, user_id):
+ self.__tenant_id = tenant_id
+ super(GitHubIntegration, self).__init__(user_id=user_id, ISSUE_CLASS=GithubIntegrationIssue)
+
+ @property
+ def provider(self):
+ return PROVIDER
+
+
+
+ def get_obfuscated(self):
+ integration = self.get()
+ if integration is None:
+ return None
+ token = "*" * (len(integration["token"]) - 4) + integration["token"][-4:]
+ return {"token": token, "provider": self.provider.lower()}
+
+ def update(self, changes):
+ with pg_client.PostgresClient() as cur:
+ sub_query = [f"{helper.key_to_snake_case(k)} = %({k})s" for k in changes.keys()]
+ cur.execute(
+ cur.mogrify(f"""\
+ UPDATE public.oauth_authentication
+ SET {','.join(sub_query)}
+ WHERE user_id=%(user_id)s
+ RETURNING token;""",
+ {"user_id": self._user_id,
+ **changes})
+ )
+ w = helper.dict_to_camel_case(cur.fetchone())
+ return w
+
+ def _add(self, data):
+ pass
+
+ def add(self, token):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ INSERT INTO public.oauth_authentication(user_id, provider, provider_user_id, token)
+ VALUES(%(user_id)s, 'github', '', %(token)s)
+ RETURNING token;""",
+ {"user_id": self._user_id,
+ "token": token})
+ )
+ w = helper.dict_to_camel_case(cur.fetchone())
+ return w
+
+ # TODO: make a revoke token call
+ def delete(self):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ DELETE FROM public.oauth_authentication
+ WHERE user_id=%(user_id)s AND provider=%(provider)s;""",
+ {"user_id": self._user_id, "provider": self.provider.lower()})
+ )
+ return {"state": "success"}
+
+ def add_edit(self, data):
+ s = self.get()
+ if s is not None:
+ return self.update(
+ changes={
+ "token": data["token"]
+ }
+ )
+ else:
+ return self.add(token=data["token"])
diff --git a/ee/api/chalicelib/core/integration_github_issue.py b/ee/api/chalicelib/core/integration_github_issue.py
new file mode 100644
index 000000000..8bac3c619
--- /dev/null
+++ b/ee/api/chalicelib/core/integration_github_issue.py
@@ -0,0 +1,100 @@
+from chalicelib.core.integration_base_issue import BaseIntegrationIssue
+from chalicelib.utils import github_client_v3
+from chalicelib.utils.github_client_v3 import github_formatters as formatter
+
+
+class GithubIntegrationIssue(BaseIntegrationIssue):
+ def __init__(self, integration_token):
+ self.__client = github_client_v3.githubV3Request(integration_token)
+ super(GithubIntegrationIssue, self).__init__("GITHUB", integration_token)
+
+ def get_current_user(self):
+ return formatter.user(self.__client.get("/user"))
+
+ def get_meta(self, repoId):
+ current_user = self.get_current_user()
+ try:
+ users = self.__client.get(f"/repositories/{repoId}/collaborators")
+ except Exception as e:
+ users = []
+ users = [formatter.user(u) for u in users]
+ if current_user not in users:
+ users.insert(0, current_user)
+ meta = {
+ 'users': users,
+ 'issueTypes': [formatter.label(l) for l in
+ self.__client.get(f"/repositories/{repoId}/labels")]
+ }
+
+ return meta
+
+ def create_new_assignment(self, integration_project_id, title, description, assignee,
+ issue_type):
+ repoId = integration_project_id
+ assignees = [assignee]
+ labels = [str(issue_type)]
+
+ metas = self.get_meta(repoId)
+ real_assignees = []
+ for a in assignees:
+ for u in metas["users"]:
+ if a == str(u["id"]):
+ real_assignees.append(u["login"])
+ break
+ real_labels = ["Asayer"]
+ for l in labels:
+ found = False
+ for ll in metas["issueTypes"]:
+ if l == str(ll["id"]):
+ real_labels.append(ll["name"])
+ found = True
+ break
+ if not found:
+ real_labels.append(l)
+ issue = self.__client.post(f"/repositories/{repoId}/issues", body={"title": title, "body": description,
+ "assignees": real_assignees,
+ "labels": real_labels})
+ return formatter.issue(issue)
+
+ def get_by_ids(self, saved_issues):
+ results = []
+ for i in saved_issues:
+ results.append(self.get(integration_project_id=i["integrationProjectId"], assignment_id=i["id"]))
+ return {"issues": results}
+
+ def get(self, integration_project_id, assignment_id):
+ repoId = integration_project_id
+ issueNumber = assignment_id
+ issue = self.__client.get(f"/repositories/{repoId}/issues/{issueNumber}")
+ issue = formatter.issue(issue)
+ if issue["commentsCount"] > 0:
+ issue["comments"] = [formatter.comment(c) for c in
+ self.__client.get(f"/repositories/{repoId}/issues/{issueNumber}/comments")]
+ return issue
+
+ def comment(self, integration_project_id, assignment_id, comment):
+ repoId = integration_project_id
+ issueNumber = assignment_id
+ commentCreated = self.__client.post(f"/repositories/{repoId}/issues/{issueNumber}/comments",
+ body={"body": comment})
+ return formatter.comment(commentCreated)
+
+ def get_metas(self, integration_project_id):
+ current_user = self.get_current_user()
+ try:
+ users = self.__client.get(f"/repositories/{integration_project_id}/collaborators")
+ except Exception as e:
+ users = []
+ users = [formatter.user(u) for u in users]
+ if current_user not in users:
+ users.insert(0, current_user)
+
+ return {"provider": self.provider.lower(),
+ 'users': users,
+ 'issueTypes': [formatter.label(l) for l in
+ self.__client.get(f"/repositories/{integration_project_id}/labels")]
+ }
+
+ def get_projects(self):
+ repos = self.__client.get("/user/repos")
+ return [formatter.repo(r) for r in repos]
diff --git a/ee/api/chalicelib/core/integration_jira_cloud.py b/ee/api/chalicelib/core/integration_jira_cloud.py
new file mode 100644
index 000000000..65bad1e4a
--- /dev/null
+++ b/ee/api/chalicelib/core/integration_jira_cloud.py
@@ -0,0 +1,101 @@
+from chalicelib.utils import pg_client, helper
+from chalicelib.core.integration_jira_cloud_issue import JIRACloudIntegrationIssue
+from chalicelib.core import integration_base
+
+PROVIDER = "JIRA"
+
+
+class JIRAIntegration(integration_base.BaseIntegration):
+ def __init__(self, tenant_id, user_id):
+ self.__tenant_id = tenant_id
+ # TODO: enable super-constructor when OAuth is done
+ # super(JIRAIntegration, self).__init__(jwt, user_id, JIRACloudIntegrationProxy)
+ self._user_id = user_id
+ i = self.get()
+ if i is None:
+ return
+ self.issue_handler = JIRACloudIntegrationIssue(token=i["token"], username=i["username"], url=i["url"])
+
+ @property
+ def provider(self):
+ return PROVIDER
+
+ # TODO: remove this once jira-oauth is done
+ def get(self):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ """SELECT username, token, url
+ FROM public.jira_cloud
+ WHERE user_id=%(user_id)s;""",
+ {"user_id": self._user_id})
+ )
+ return helper.dict_to_camel_case(cur.fetchone())
+
+ def get_obfuscated(self):
+ integration = self.get()
+ if integration is None:
+ return None
+ integration["token"] = "*" * (len(integration["token"]) - 4) + integration["token"][-4:]
+ integration["provider"] = self.provider.lower()
+ return integration
+
+ def update(self, changes):
+ with pg_client.PostgresClient() as cur:
+ sub_query = [f"{helper.key_to_snake_case(k)} = %({k})s" for k in changes.keys()]
+ cur.execute(
+ cur.mogrify(f"""\
+ UPDATE public.jira_cloud
+ SET {','.join(sub_query)}
+ WHERE user_id=%(user_id)s
+ RETURNING username, token, url;""",
+ {"user_id": self._user_id,
+ **changes})
+ )
+ w = helper.dict_to_camel_case(cur.fetchone())
+ return w
+
+ # TODO: make this generic for all issue tracking integrations
+ def _add(self, data):
+ print("a pretty defined abstract method")
+ return
+
+ def add(self, username, token, url):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ INSERT INTO public.jira_cloud(username, token, user_id,url)
+ VALUES (%(username)s, %(token)s, %(user_id)s,%(url)s)
+ RETURNING username, token, url;""",
+ {"user_id": self._user_id, "username": username,
+ "token": token, "url": url})
+ )
+ w = helper.dict_to_camel_case(cur.fetchone())
+ return w
+
+ def delete(self):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ DELETE FROM public.jira_cloud
+ WHERE user_id=%(user_id)s;""",
+ {"user_id": self._user_id})
+ )
+ return {"state": "success"}
+
+ def add_edit(self, data):
+ s = self.get()
+ if s is not None:
+ return self.update(
+ changes={
+ "username": data["username"],
+ "token": data["token"],
+ "url": data["url"]
+ }
+ )
+ else:
+ return self.add(
+ username=data["username"],
+ token=data["token"],
+ url=data["url"]
+ )
diff --git a/ee/api/chalicelib/core/integration_jira_cloud_issue.py b/ee/api/chalicelib/core/integration_jira_cloud_issue.py
new file mode 100644
index 000000000..b765903c2
--- /dev/null
+++ b/ee/api/chalicelib/core/integration_jira_cloud_issue.py
@@ -0,0 +1,56 @@
+from chalicelib.utils import jira_client
+from chalicelib.core.integration_base_issue import BaseIntegrationIssue
+
+
+class JIRACloudIntegrationIssue(BaseIntegrationIssue):
+ def __init__(self, token, username, url):
+ self.username = username
+ self.url = url
+ self._client = jira_client.JiraManager(self.url, self.username, token, None)
+ super(JIRACloudIntegrationIssue, self).__init__("JIRA", token)
+
+ def create_new_assignment(self, integration_project_id, title, description, assignee, issue_type):
+ self._client.set_jira_project_id(integration_project_id)
+ data = {
+ 'summary': title,
+ 'description': description,
+ 'issuetype': {'id': issue_type},
+ 'assignee': {"id": assignee},
+ "labels": ["Asayer"]
+ }
+ return self._client.create_issue(data)
+
+ def get_by_ids(self, saved_issues):
+ projects_map = {}
+ for i in saved_issues:
+ if i["integrationProjectId"] not in projects_map.keys():
+ projects_map[i["integrationProjectId"]] = []
+ projects_map[i["integrationProjectId"]].append(i["id"])
+
+ results = []
+ for integration_project_id in projects_map:
+ self._client.set_jira_project_id(integration_project_id)
+ jql = 'labels = Asayer'
+ if len(projects_map[integration_project_id]) > 0:
+ jql += f" AND ID IN ({','.join(projects_map[integration_project_id])})"
+ issues = self._client.get_issues(jql, offset=0)
+ results += [issues]
+ return {"issues": results}
+
+ def get(self, integration_project_id, assignment_id):
+ self._client.set_jira_project_id(integration_project_id)
+ return self._client.get_issue_v3(assignment_id)
+
+ def comment(self, integration_project_id, assignment_id, comment):
+ self._client.set_jira_project_id(integration_project_id)
+ return self._client.add_comment_v3(assignment_id, comment)
+
+ def get_metas(self, integration_project_id):
+ meta = {}
+ self._client.set_jira_project_id(integration_project_id)
+ meta['issueTypes'] = self._client.get_issue_types()
+ meta['users'] = self._client.get_assignable_users()
+ return {"provider": self.provider.lower(), **meta}
+
+ def get_projects(self):
+ return self._client.get_projects()
diff --git a/ee/api/chalicelib/core/integrations_manager.py b/ee/api/chalicelib/core/integrations_manager.py
new file mode 100644
index 000000000..fca271870
--- /dev/null
+++ b/ee/api/chalicelib/core/integrations_manager.py
@@ -0,0 +1,42 @@
+from chalicelib.core import integration_github, integration_jira_cloud
+from chalicelib.utils import pg_client
+
+SUPPORTED_TOOLS = [integration_github.PROVIDER, integration_jira_cloud.PROVIDER]
+
+
+def get_available_integrations(user_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""\
+ SELECT EXISTS((SELECT 1
+ FROM public.oauth_authentication
+ WHERE user_id = %(user_id)s
+ AND provider = 'github')) AS github,
+ EXISTS((SELECT 1
+ FROM public.jira_cloud
+ WHERE user_id = %(user_id)s)) AS jira;""",
+ {"user_id": user_id})
+ )
+ current_integrations = cur.fetchone()
+ return dict(current_integrations)
+
+
+def __get_default_integration(user_id):
+ current_integrations = get_available_integrations(user_id)
+ return integration_github.PROVIDER if current_integrations["github"] else integration_jira_cloud.PROVIDER if \
+ current_integrations["jira"] else None
+
+
+def get_integration(tenant_id, user_id, tool=None):
+ if tool is None:
+ tool = __get_default_integration(user_id=user_id)
+ if tool is None:
+ return {"errors": [f"no issue tracking tool found"]}, None
+ tool = tool.upper()
+ if tool not in SUPPORTED_TOOLS:
+ return {"errors": [f"issue tracking tool not supported yet, available: {SUPPORTED_TOOLS}"]}, None
+ if tool == integration_jira_cloud.PROVIDER:
+ return None, integration_jira_cloud.JIRAIntegration(tenant_id=tenant_id, user_id=user_id)
+ elif tool == integration_github.PROVIDER:
+ return None, integration_github.GitHubIntegration(tenant_id=tenant_id, user_id=user_id)
+ return {"errors": ["lost integration"]}, None
diff --git a/ee/api/chalicelib/core/issues.py b/ee/api/chalicelib/core/issues.py
new file mode 100644
index 000000000..61a6946da
--- /dev/null
+++ b/ee/api/chalicelib/core/issues.py
@@ -0,0 +1,72 @@
+from chalicelib.utils import pg_client, helper
+
+ISSUE_TYPES = ['click_rage', 'dead_click', 'excessive_scrolling', 'bad_request', 'missing_resource', 'memory', 'cpu',
+ 'slow_resource', 'slow_page_load', 'crash', 'ml_cpu', 'ml_memory', 'ml_dead_click', 'ml_click_rage',
+ 'ml_mouse_thrashing', 'ml_excessive_scrolling', 'ml_slow_resources', 'custom', 'js_exception',
+ 'custom_event_error', 'js_error']
+ORDER_QUERY = """\
+(CASE WHEN type = 'js_exception' THEN 0
+ WHEN type = 'bad_request' THEN 1
+ WHEN type = 'missing_resource' THEN 2
+ WHEN type = 'click_rage' THEN 3
+ WHEN type = 'dead_click' THEN 4
+ WHEN type = 'memory' THEN 5
+ WHEN type = 'cpu' THEN 6
+ WHEN type = 'crash' THEN 7
+ ELSE -1 END)::INTEGER
+"""
+NAME_QUERY = """\
+(CASE WHEN type = 'js_exception' THEN 'Errors'
+ WHEN type = 'bad_request' THEN 'Bad Requests'
+ WHEN type = 'missing_resource' THEN 'Missing Images'
+ WHEN type = 'click_rage' THEN 'Click Rage'
+ WHEN type = 'dead_click' THEN 'Dead Clicks'
+ WHEN type = 'memory' THEN 'High Memory'
+ WHEN type = 'cpu' THEN 'High CPU'
+ WHEN type = 'crash' THEN 'Crashes'
+ ELSE type::text END)::text
+"""
+
+
+def get(project_id, issue_id):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ """\
+ SELECT
+ *
+ FROM public.issues
+ WHERE project_id = %(project_id)s
+ AND issue_id = %(issue_id)s;""",
+ {"project_id": project_id, "issue_id": issue_id}
+ )
+ cur.execute(query=query)
+ data = cur.fetchone()
+ return helper.dict_to_camel_case(data)
+
+
+def get_by_session_id(session_id, issue_type=None):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""\
+ SELECT *
+ FROM events_common.issues
+ INNER JOIN public.issues USING (issue_id)
+ WHERE session_id = %(session_id)s {"AND type = %(type)s" if issue_type is not None else ""}
+ ORDER BY timestamp;""",
+ {"session_id": session_id, "type": issue_type})
+ )
+ return helper.list_to_camel_case(cur.fetchall())
+
+
+def get_types(project_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""SELECT type,
+ {ORDER_QUERY}>=0 AS visible,
+ {ORDER_QUERY} AS order,
+ {NAME_QUERY} AS name
+ FROM (SELECT DISTINCT type
+ FROM public.issues
+ WHERE project_id = %(project_id)s) AS types
+ ORDER BY "order";""", {"project_id": project_id}))
+ return helper.list_to_camel_case(cur.fetchall())
diff --git a/ee/api/chalicelib/core/log_tool_bugsnag.py b/ee/api/chalicelib/core/log_tool_bugsnag.py
new file mode 100644
index 000000000..8354142ab
--- /dev/null
+++ b/ee/api/chalicelib/core/log_tool_bugsnag.py
@@ -0,0 +1,73 @@
+from chalicelib.core import log_tools
+import requests
+
+IN_TY = "bugsnag"
+
+
+def list_projects(auth_token):
+ r = requests.get(url="https://api.bugsnag.com/user/organizations",
+ params={"per_page": "100"},
+ headers={"Authorization": "token " + auth_token, "X-Version": "2"})
+ if r.status_code != 200:
+ print("=======> bugsnag get organizations: something went wrong")
+ print(r)
+ print(r.status_code)
+ print(r.text)
+ return []
+
+ orgs = []
+ for i in r.json():
+
+ pr = requests.get(url="https://api.bugsnag.com/organizations/%s/projects" % i["id"],
+ params={"per_page": "100"},
+ headers={"Authorization": "token " + auth_token, "X-Version": "2"})
+ if pr.status_code != 200:
+ print("=======> bugsnag get projects: something went wrong")
+ print(pr)
+ print(r.status_code)
+ print(r.text)
+ continue
+ orgs.append({"name": i["name"], "projects": [{"name": p["name"], "id": p["id"]} for p in pr.json()]})
+ return orgs
+
+
+def get_all(tenant_id):
+ return log_tools.get_all_by_tenant(tenant_id=tenant_id, integration=IN_TY)
+
+
+def get(project_id):
+ return log_tools.get(project_id=project_id, integration=IN_TY)
+
+
+def update(tenant_id, project_id, changes):
+ options = {}
+ if "authorizationToken" in changes:
+ options["authorizationToken"] = changes.pop("authorizationToken")
+ if "bugsnagProjectId" in changes:
+ options["bugsnagProjectId"] = changes.pop("bugsnagProjectId")
+ return log_tools.edit(project_id=project_id, integration=IN_TY, changes=options)
+
+
+def add(tenant_id, project_id, authorization_token, bugsnag_project_id):
+ options = {
+ "bugsnagProjectId": bugsnag_project_id,
+ "authorizationToken": authorization_token,
+ }
+ return log_tools.add(project_id=project_id, integration=IN_TY, options=options)
+
+
+def delete(tenant_id, project_id):
+ return log_tools.delete(project_id=project_id, integration=IN_TY)
+
+
+def add_edit(tenant_id, project_id, data):
+ s = get(project_id)
+ if s is not None:
+ return update(tenant_id=tenant_id, project_id=project_id,
+ changes={"authorizationToken": data["authorizationToken"],
+ "bugsnagProjectId": data["bugsnagProjectId"]})
+ else:
+ return add(tenant_id=tenant_id,
+ project_id=project_id,
+ authorization_token=data["authorizationToken"],
+ bugsnag_project_id=data["bugsnagProjectId"])
diff --git a/ee/api/chalicelib/core/log_tool_cloudwatch.py b/ee/api/chalicelib/core/log_tool_cloudwatch.py
new file mode 100644
index 000000000..bdd4a2644
--- /dev/null
+++ b/ee/api/chalicelib/core/log_tool_cloudwatch.py
@@ -0,0 +1,119 @@
+import boto3
+from chalicelib.core import log_tools
+
+IN_TY = "cloudwatch"
+
+
+def __find_groups(client, token):
+ d_args = {
+ "limit": 50
+ }
+ if token is not None:
+ d_args["nextToken"] = token
+ response = client.describe_log_groups(**d_args)
+ response["logGroups"] = [i['logGroupName'] for i in response["logGroups"]]
+ if "nextToken" not in response:
+ return response["logGroups"]
+
+ return response["logGroups"] + __find_groups(client, response["nextToken"])
+
+
+def __make_stream_filter(start_time, end_time):
+ def __valid_stream(stream):
+ return "firstEventTimestamp" in stream and not (
+ stream['firstEventTimestamp'] <= start_time and stream["lastEventTimestamp"] <= start_time
+ or stream['firstEventTimestamp'] >= end_time and stream["lastEventTimestamp"] >= end_time
+ )
+
+ return __valid_stream
+
+
+def __find_streams(project_id, log_group, client, token, stream_filter):
+ d_args = {"logGroupName": log_group, "orderBy": 'LastEventTime', 'limit': 50}
+ if token is not None and len(token) > 0:
+ d_args["nextToken"] = token
+ data = client.describe_log_streams(**d_args)
+ streams = list(filter(stream_filter, data['logStreams']))
+ if 'nextToken' not in data:
+ save_new_token(project_id=project_id, token=token)
+ return streams
+ return streams + __find_streams(project_id, log_group, client, data['nextToken'], stream_filter)
+
+
+def __find_events(client, log_group, streams, last_token, start_time, end_time):
+ f_args = {
+ "logGroupName": log_group,
+ "logStreamNames": streams,
+ "startTime": start_time,
+ "endTime": end_time,
+ "limit": 10000,
+ "filterPattern": "asayer_session_id"
+ }
+ if last_token is not None:
+ f_args["nextToken"] = last_token
+ response = client.filter_log_events(
+ **f_args
+ )
+ if "nextToken" not in response:
+ return response["events"]
+
+ return response["events"] + __find_events(client, log_group, streams, response["nextToken"], start_time, end_time)
+
+
+def list_log_groups(aws_access_key_id, aws_secret_access_key, region):
+ logs = boto3.client('logs', aws_access_key_id=aws_access_key_id,
+ aws_secret_access_key=aws_secret_access_key,
+ region_name=region
+ )
+ return __find_groups(logs, None)
+
+
+def get_all(tenant_id):
+ return log_tools.get_all_by_tenant(tenant_id=tenant_id, integration=IN_TY)
+
+
+def get(project_id):
+ return log_tools.get(project_id=project_id, integration=IN_TY)
+
+
+def update(tenant_id, project_id, changes):
+ options = {}
+ if "authorization_token" in changes:
+ options["authorization_token"] = changes.pop("authorization_token")
+ if "project_id" in changes:
+ options["project_id"] = changes.pop("project_id")
+ if len(options.keys()) > 0:
+ changes["options"] = options
+ return log_tools.edit(project_id=project_id, integration=IN_TY, changes=changes)
+
+
+def add(tenant_id, project_id, aws_access_key_id, aws_secret_access_key, log_group_name, region):
+ return log_tools.add(project_id=project_id, integration=IN_TY,
+ options={"awsAccessKeyId": aws_access_key_id,
+ "awsSecretAccessKey": aws_secret_access_key,
+ "logGroupName": log_group_name, "region": region})
+
+
+def save_new_token(project_id, token):
+ update(tenant_id=None, project_id=project_id, changes={"last_token": token})
+
+
+def delete(tenant_id, project_id):
+ return log_tools.delete(project_id=project_id, integration=IN_TY)
+
+
+def add_edit(tenant_id, project_id, data):
+ s = get(project_id)
+ if s is not None:
+ return update(tenant_id=tenant_id, project_id=project_id,
+ changes={"awsAccessKeyId": data["awsAccessKeyId"],
+ "awsSecretAccessKey": data["awsSecretAccessKey"],
+ "logGroupName": data["logGroupName"],
+ "region": data["region"]})
+ else:
+ return add(tenant_id=tenant_id,
+ project_id=project_id,
+ aws_access_key_id=data["awsAccessKeyId"],
+ aws_secret_access_key=data["awsSecretAccessKey"],
+ log_group_name=data["logGroupName"],
+ region=data["region"])
diff --git a/ee/api/chalicelib/core/log_tool_datadog.py b/ee/api/chalicelib/core/log_tool_datadog.py
new file mode 100644
index 000000000..68735f833
--- /dev/null
+++ b/ee/api/chalicelib/core/log_tool_datadog.py
@@ -0,0 +1,43 @@
+from chalicelib.core import log_tools
+
+IN_TY = "datadog"
+
+
+def get_all(tenant_id):
+ return log_tools.get_all_by_tenant(tenant_id=tenant_id, integration=IN_TY)
+
+
+def get(project_id):
+ return log_tools.get(project_id=project_id, integration=IN_TY)
+
+
+def update(tenant_id, project_id, changes):
+ options = {}
+ if "apiKey" in changes:
+ options["apiKey"] = changes["apiKey"]
+ if "applicationKey" in changes:
+ options["applicationKey"] = changes["applicationKey"]
+
+ return log_tools.edit(project_id=project_id, integration=IN_TY, changes=options)
+
+
+def add(tenant_id, project_id, api_key, application_key):
+ options = {"apiKey": api_key, "applicationKey": application_key}
+ return log_tools.add(project_id=project_id, integration=IN_TY, options=options)
+
+
+def delete(tenant_id, project_id):
+ return log_tools.delete(project_id=project_id, integration=IN_TY)
+
+
+def add_edit(tenant_id, project_id, data):
+ s = get(project_id)
+ if s is not None:
+ return update(tenant_id=tenant_id, project_id=project_id,
+ changes={"apiKey": data["apiKey"],
+ "applicationKey": data["applicationKey"]})
+ else:
+ return add(tenant_id=tenant_id,
+ project_id=project_id,
+ api_key=data["apiKey"],
+ application_key=data["applicationKey"])
diff --git a/ee/api/chalicelib/core/log_tool_elasticsearch.py b/ee/api/chalicelib/core/log_tool_elasticsearch.py
new file mode 100644
index 000000000..5fdfccf24
--- /dev/null
+++ b/ee/api/chalicelib/core/log_tool_elasticsearch.py
@@ -0,0 +1,94 @@
+from elasticsearch import Elasticsearch, RequestsHttpConnection
+from chalicelib.core import log_tools
+import base64
+import logging
+
+logging.getLogger('elasticsearch').level = logging.ERROR
+
+IN_TY = "elasticsearch"
+
+
+def get_all(tenant_id):
+ return log_tools.get_all_by_tenant(tenant_id=tenant_id, integration=IN_TY)
+
+
+def get(project_id):
+ return log_tools.get(project_id=project_id, integration=IN_TY)
+
+
+def update(tenant_id, project_id, changes):
+ options = {}
+
+ if "host" in changes:
+ options["host"] = changes["host"]
+ if "apiKeyId" in changes:
+ options["apiKeyId"] = changes["apiKeyId"]
+ if "apiKey" in changes:
+ options["apiKey"] = changes["apiKey"]
+ if "indexes" in changes:
+ options["indexes"] = changes["indexes"]
+ if "port" in changes:
+ options["port"] = changes["port"]
+
+ return log_tools.edit(project_id=project_id, integration=IN_TY, changes=options)
+
+
+def add(tenant_id, project_id, host, api_key_id, api_key, indexes, port):
+ options = {
+ "host": host, "apiKeyId": api_key_id, "apiKey": api_key, "indexes": indexes, "port": port
+ }
+ return log_tools.add(project_id=project_id, integration=IN_TY, options=options)
+
+
+def delete(tenant_id, project_id):
+ return log_tools.delete(project_id=project_id, integration=IN_TY)
+
+
+def add_edit(tenant_id, project_id, data):
+ s = get(project_id)
+ if s is not None:
+ return update(tenant_id=tenant_id, project_id=project_id,
+ changes={"host": data["host"], "apiKeyId": data["apiKeyId"], "apiKey": data["apiKey"],
+ "indexes": data["indexes"], "port": data["port"]})
+ else:
+ return add(tenant_id=tenant_id,
+ project_id=project_id,
+ host=data["host"], api_key=data["apiKeyId"], api_key_id=data["apiKey"], indexes=data["indexes"],
+ port=data["port"])
+
+
+def __get_es_client(host, port, api_key_id, api_key, use_ssl=False, timeout=29):
+ host = host.replace("http://", "").replace("https://", "")
+ try:
+ args = {
+ "hosts": [{"host": host, "port": port}],
+ "use_ssl": use_ssl,
+ "verify_certs": False,
+ "ca_certs": False,
+ "connection_class": RequestsHttpConnection,
+ "timeout": timeout
+ }
+ if api_key_id is not None and len(api_key_id) > 0:
+ # args["http_auth"] = (username, password)
+ token = "ApiKey " + base64.b64encode(f"{api_key_id}:{api_key}".encode("utf-8")).decode("utf-8")
+ args["headers"] = {"Authorization": token}
+ es = Elasticsearch(
+ **args
+ )
+ r = es.ping()
+ if not r and not use_ssl:
+ return __get_es_client(host, port, api_key_id, api_key, use_ssl=True, timeout=timeout)
+ if not r:
+ return None
+ except Exception as err:
+ print("================exception connecting to ES host:")
+ print(err)
+ return None
+ return es
+
+
+def ping(tenant_id, host, port, apiKeyId, apiKey):
+ es = __get_es_client(host, port, apiKeyId, apiKey, timeout=3)
+ if es is None:
+ return {"state": False}
+ return {"state": es.ping()}
diff --git a/ee/api/chalicelib/core/log_tool_newrelic.py b/ee/api/chalicelib/core/log_tool_newrelic.py
new file mode 100644
index 000000000..14b0d4e57
--- /dev/null
+++ b/ee/api/chalicelib/core/log_tool_newrelic.py
@@ -0,0 +1,50 @@
+from chalicelib.core import log_tools
+
+IN_TY = "newrelic"
+
+
+def get_all(tenant_id):
+ return log_tools.get_all_by_tenant(tenant_id=tenant_id, integration=IN_TY)
+
+
+def get(project_id):
+ return log_tools.get(project_id=project_id, integration=IN_TY)
+
+
+def update(tenant_id, project_id, changes):
+ options = {}
+ if "region" in changes and len(changes["region"]) == 0:
+ options["region"] = "US"
+ if "applicationId" in changes:
+ options["applicationId"] = changes["applicationId"]
+ if "xQueryKey" in changes:
+ options["xQueryKey"] = changes["xQueryKey"]
+
+ return log_tools.edit(project_id=project_id, integration=IN_TY, changes=options)
+
+
+def add(tenant_id, project_id, application_id, x_query_key, region):
+ if region is None or len(region) == 0:
+ region = "US"
+ options = {"applicationId": application_id, "xQueryKey": x_query_key, "region": region}
+ return log_tools.add(project_id=project_id, integration=IN_TY, options=options)
+
+
+def delete(tenant_id, project_id):
+ return log_tools.delete(project_id=project_id, integration=IN_TY)
+
+
+def add_edit(tenant_id, project_id, data):
+ s = get(project_id)
+ if s is not None:
+ return update(tenant_id=tenant_id, project_id=project_id,
+ changes={"applicationId": data["applicationId"],
+ "xQueryKey": data["xQueryKey"],
+ "region": data["region"]})
+ else:
+ return add(tenant_id=tenant_id,
+ project_id=project_id,
+ application_id=data["applicationId"],
+ x_query_key=data["xQueryKey"],
+ region=data["region"]
+ )
diff --git a/ee/api/chalicelib/core/log_tool_rollbar.py b/ee/api/chalicelib/core/log_tool_rollbar.py
new file mode 100644
index 000000000..34f6c6114
--- /dev/null
+++ b/ee/api/chalicelib/core/log_tool_rollbar.py
@@ -0,0 +1,38 @@
+from chalicelib.core import log_tools
+
+IN_TY = "rollbar"
+
+
+def get_all(tenant_id):
+ return log_tools.get_all_by_tenant(tenant_id=tenant_id, integration=IN_TY)
+
+
+def get(project_id):
+ return log_tools.get(project_id=project_id, integration=IN_TY)
+
+
+def update(tenant_id, project_id, changes):
+ options = {}
+ if "accessToken" in changes:
+ options["accessToken"] = changes["accessToken"]
+ return log_tools.edit(project_id=project_id, integration=IN_TY, changes=options)
+
+
+def add(tenant_id, project_id, access_token):
+ options = {"accessToken": access_token}
+ return log_tools.add(project_id=project_id, integration=IN_TY, options=options)
+
+
+def delete(tenant_id, project_id):
+ return log_tools.delete(project_id=project_id, integration=IN_TY)
+
+
+def add_edit(tenant_id, project_id, data):
+ s = get(project_id)
+ if s is not None:
+ return update(tenant_id=tenant_id, project_id=project_id,
+ changes={"accessToken": data["accessToken"]})
+ else:
+ return add(tenant_id=tenant_id,
+ project_id=project_id,
+ access_token=data["accessToken"])
diff --git a/ee/api/chalicelib/core/log_tool_sentry.py b/ee/api/chalicelib/core/log_tool_sentry.py
new file mode 100644
index 000000000..1f51f1556
--- /dev/null
+++ b/ee/api/chalicelib/core/log_tool_sentry.py
@@ -0,0 +1,65 @@
+import requests
+from chalicelib.core import log_tools
+
+IN_TY = "sentry"
+
+
+def get_all(tenant_id):
+ return log_tools.get_all_by_tenant(tenant_id=tenant_id, integration=IN_TY)
+
+
+def get(project_id):
+ return log_tools.get(project_id=project_id, integration=IN_TY)
+
+
+def update(tenant_id, project_id, changes):
+ options = {}
+ if "organizationSlug" in changes:
+ options["organizationSlug"] = changes["organizationSlug"]
+ if "projectSlug" in changes:
+ options["projectSlug"] = changes["projectSlug"]
+ if "token" in changes:
+ options["token"] = changes["token"]
+
+ return log_tools.edit(project_id=project_id, integration=IN_TY, changes=changes)
+
+
+def add(tenant_id, project_id, project_slug, organization_slug, token):
+ options = {
+ "organizationSlug": organization_slug, "projectSlug": project_slug, "token": token
+ }
+ return log_tools.add(project_id=project_id, integration=IN_TY, options=options)
+
+
+def delete(tenant_id, project_id):
+ return log_tools.delete(project_id=project_id, integration=IN_TY)
+
+
+def add_edit(tenant_id, project_id, data):
+ s = get(project_id)
+ if s is not None:
+ return update(tenant_id=tenant_id, project_id=project_id,
+ changes={"projectSlug": data["projectSlug"],
+ "organizationSlug": data["organizationSlug"],
+ "token": data["token"]})
+ else:
+ return add(tenant_id=tenant_id,
+ project_id=project_id,
+ project_slug=data["projectSlug"],
+ organization_slug=data["organizationSlug"], token=data["token"])
+
+
+def proxy_get(tenant_id, project_id, event_id):
+ i = get(project_id)
+ if i is None:
+ return {}
+ r = requests.get(
+ url="https://sentry.io/api/0/projects/%(organization_slug)s/%(project_slug)s/events/%(event_id)s/" % {
+ "organization_slug": i["organizationSlug"], "project_slug": i["projectSlug"], "event_id": event_id},
+ headers={"Authorization": "Bearer " + i["token"]})
+ if r.status_code != 200:
+ print("=======> sentry get: something went wrong")
+ print(r)
+ print(r.status_code)
+ print(r.text)
+ return r.json()
diff --git a/ee/api/chalicelib/core/log_tool_stackdriver.py b/ee/api/chalicelib/core/log_tool_stackdriver.py
new file mode 100644
index 000000000..611a7c637
--- /dev/null
+++ b/ee/api/chalicelib/core/log_tool_stackdriver.py
@@ -0,0 +1,42 @@
+from chalicelib.core import log_tools
+
+IN_TY = "stackdriver"
+
+
+def get_all(tenant_id):
+ return log_tools.get_all_by_tenant(tenant_id=tenant_id, integration=IN_TY)
+
+
+def get(project_id):
+ return log_tools.get(project_id=project_id, integration=IN_TY)
+
+
+def update(tenant_id, project_id, changes):
+ options = {}
+ if "serviceAccountCredentials" in changes:
+ options["serviceAccountCredentials"] = changes["serviceAccountCredentials"]
+ if "logName" in changes:
+ options["logName"] = changes["logName"]
+ return log_tools.edit(project_id=project_id, integration=IN_TY, changes=options)
+
+
+def add(tenant_id, project_id, service_account_credentials, log_name):
+ options = {"serviceAccountCredentials": service_account_credentials, "logName": log_name}
+ return log_tools.add(project_id=project_id, integration=IN_TY, options=options)
+
+
+def delete(tenant_id, project_id):
+ return log_tools.delete(project_id=project_id, integration=IN_TY)
+
+
+def add_edit(tenant_id, project_id, data):
+ s = get(project_id)
+ if s is not None:
+ return update(tenant_id=tenant_id, project_id=project_id,
+ changes={"serviceAccountCredentials": data["serviceAccountCredentials"],
+ "logName": data["logName"]})
+ else:
+ return add(tenant_id=tenant_id,
+ project_id=project_id,
+ service_account_credentials=data["serviceAccountCredentials"],
+ log_name=data["logName"])
diff --git a/ee/api/chalicelib/core/log_tool_sumologic.py b/ee/api/chalicelib/core/log_tool_sumologic.py
new file mode 100644
index 000000000..8e34ea70a
--- /dev/null
+++ b/ee/api/chalicelib/core/log_tool_sumologic.py
@@ -0,0 +1,53 @@
+from chalicelib.core import log_tools
+
+IN_TY = "sumologic"
+
+
+def get_all(tenant_id):
+ return log_tools.get_all_by_tenant(tenant_id=tenant_id, integration=IN_TY)
+
+
+def get(project_id):
+ return log_tools.get(project_id=project_id, integration=IN_TY)
+
+
+def update(tenant_id, project_id, changes):
+ options = {}
+
+ if "region" in changes:
+ options["region"] = changes["region"]
+
+ if "accessId" in changes:
+ options["accessId"] = changes["accessId"]
+
+ if "accessKey" in changes:
+ options["accessKey"] = changes["accessKey"]
+ return log_tools.edit(project_id=project_id, integration=IN_TY, changes=options)
+
+
+def add(tenant_id, project_id, access_id, access_key, region):
+ options = {
+ "accessId": access_id,
+ "accessKey": access_key,
+ "region": region
+ }
+ return log_tools.add(project_id=project_id, integration=IN_TY, options=options)
+
+
+def delete(tenant_id, project_id):
+ return log_tools.delete(project_id=project_id, integration=IN_TY)
+
+
+def add_edit(tenant_id, project_id, data):
+ s = get(project_id)
+ if s is not None:
+ return update(tenant_id=tenant_id, project_id=project_id,
+ changes={"accessId": data["accessId"],
+ "accessKey": data["accessKey"],
+ "region": data["region"]})
+ else:
+ return add(tenant_id=tenant_id,
+ project_id=project_id,
+ access_id=data["accessId"],
+ access_key=data["accessKey"],
+ region=data["region"])
diff --git a/ee/api/chalicelib/core/log_tools.py b/ee/api/chalicelib/core/log_tools.py
new file mode 100644
index 000000000..9a3ba46d4
--- /dev/null
+++ b/ee/api/chalicelib/core/log_tools.py
@@ -0,0 +1,120 @@
+from chalicelib.utils import pg_client, helper
+import json
+
+EXCEPT = ["jira_server", "jira_cloud"]
+
+
+def search(project_id):
+ result = []
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ """\
+ SELECT supported_integrations.name,
+ (SELECT COUNT(*)
+ FROM public.integrations
+ INNER JOIN public.projects USING (project_id)
+ WHERE provider = supported_integrations.name
+ AND project_id = %(project_id)s
+ AND projects.deleted_at ISNULL
+ LIMIT 1) AS count
+ FROM unnest(enum_range(NULL::integration_provider)) AS supported_integrations(name);""",
+ {"project_id": project_id})
+ )
+ r = cur.fetchall()
+ for k in r:
+ if k["count"] > 0 and k["name"] not in EXCEPT:
+ result.append({"value": helper.key_to_camel_case(k["name"]), "type": "logTool"})
+ return {"data": result}
+
+
+def add(project_id, integration, options):
+ options = json.dumps(options)
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ """\
+ INSERT INTO public.integrations(project_id, provider, options)
+ VALUES (%(project_id)s, %(provider)s, %(options)s::jsonb)
+ RETURNING *;""",
+ {"project_id": project_id, "provider": integration, "options": options})
+ )
+ r = cur.fetchone()
+ return helper.dict_to_camel_case(helper.flatten_nested_dicts(r))
+
+
+def get(project_id, integration):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ """\
+ SELECT integrations.*
+ FROM public.integrations INNER JOIN public.projects USING(project_id)
+ WHERE provider = %(provider)s
+ AND project_id = %(project_id)s
+ AND projects.deleted_at ISNULL
+ LIMIT 1;""",
+ {"project_id": project_id, "provider": integration})
+ )
+ r = cur.fetchone()
+ return helper.dict_to_camel_case(helper.flatten_nested_dicts(r))
+
+
+def get_all_by_type(integration):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ """\
+ SELECT integrations.*
+ FROM public.integrations INNER JOIN public.projects USING(project_id)
+ WHERE provider = %(provider)s AND projects.deleted_at ISNULL;""",
+ {"provider": integration})
+ )
+ r = cur.fetchall()
+ return helper.list_to_camel_case(r, flatten=True)
+
+
+def edit(project_id, integration, changes):
+ if "projectId" in changes:
+ changes.pop("project_id")
+ if "integration" in changes:
+ changes.pop("integration")
+ if len(changes.keys()) == 0:
+ return None
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ UPDATE public.integrations
+ SET options=options||%(changes)s
+ WHERE project_id =%(project_id)s AND provider = %(provider)s
+ RETURNING *;""",
+ {"project_id": project_id, "provider": integration, "changes": json.dumps(changes)})
+ )
+ return helper.dict_to_camel_case(helper.flatten_nested_dicts(cur.fetchone()))
+
+
+def delete(project_id, integration):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ DELETE FROM public.integrations
+ WHERE project_id=%(project_id)s AND provider=%(provider)s;""",
+ {"project_id": project_id, "provider": integration})
+ )
+ return {"state": "success"}
+
+
+def get_all_by_tenant(tenant_id, integration):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ """\
+ SELECT integrations.*
+ FROM public.integrations INNER JOIN public.projects USING(project_id)
+ WHERE provider = %(provider)s
+ AND tenant_id = %(tenant_id)s
+ AND projects.deleted_at ISNULL;""",
+ {"tenant_id": tenant_id, "provider": integration})
+ )
+ r = cur.fetchall()
+ return helper.list_to_camel_case(r, flatten=True)
diff --git a/ee/api/chalicelib/core/metadata.py b/ee/api/chalicelib/core/metadata.py
new file mode 100644
index 000000000..e1d051f70
--- /dev/null
+++ b/ee/api/chalicelib/core/metadata.py
@@ -0,0 +1,262 @@
+from chalicelib.utils import pg_client, helper, dev
+
+from chalicelib.ee import projects
+
+import re
+
+MAX_INDEXES = 10
+
+
+def _get_column_names():
+ return [f"metadata_{i}" for i in range(1, MAX_INDEXES + 1)]
+
+
+def get(project_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""\
+ SELECT
+ {",".join(_get_column_names())}
+ FROM public.projects
+ WHERE project_id = %(project_id)s AND deleted_at ISNULL
+ LIMIT 1;""", {"project_id": project_id})
+ )
+ metas = cur.fetchone()
+ results = []
+ for i, k in enumerate(metas.keys()):
+ if metas[k] is not None:
+ results.append({"key": metas[k], "index": i + 1})
+ return results
+
+
+regex = re.compile(r'^[a-z0-9_-]+$', re.IGNORECASE)
+
+
+def index_to_colname(index):
+ if index <= 0 or index > MAX_INDEXES:
+ raise Exception("metadata index out or bound")
+ return f"metadata_{index}"
+
+
+def __get_available_index(project_id):
+ used_indexs = get(project_id)
+ used_indexs = [i["index"] for i in used_indexs]
+ if len(used_indexs) >= MAX_INDEXES:
+ return -1
+ i = 1
+ while i in used_indexs:
+ i += 1
+ return i
+
+
+def __edit(project_id, col_index, colname, new_name):
+ if new_name is None or len(new_name) == 0:
+ return {"errors": ["key value invalid"]}
+ old_metas = get(project_id)
+ old_metas = {k["index"]: k for k in old_metas}
+ if col_index not in list(old_metas.keys()):
+ return {"errors": ["custom field doesn't exist"]}
+
+ with pg_client.PostgresClient() as cur:
+ if old_metas[col_index]["key"].lower() != new_name:
+ cur.execute(cur.mogrify(f"""UPDATE public.projects
+ SET {colname} = %(value)s
+ WHERE project_id = %(project_id)s AND deleted_at ISNULL
+ RETURNING {colname};""",
+ {"project_id": project_id, "value": new_name}))
+ new_name = cur.fetchone()[colname]
+ old_metas[col_index]["key"] = new_name
+ return {"data": old_metas[col_index]}
+
+
+def edit(tenant_id, project_id, index: int, new_name: str):
+ return __edit(project_id=project_id, col_index=index, colname=index_to_colname(index), new_name=new_name)
+
+
+def delete(tenant_id, project_id, index: int):
+ index = int(index)
+ old_segments = get(project_id)
+ old_segments = [k["index"] for k in old_segments]
+ if index not in old_segments:
+ return {"errors": ["custom field doesn't exist"]}
+
+ with pg_client.PostgresClient() as cur:
+ colname = index_to_colname(index)
+ query = cur.mogrify(f"""UPDATE public.projects
+ SET {colname}= NULL
+ WHERE project_id = %(project_id)s AND deleted_at ISNULL;""",
+ {"project_id": project_id})
+ cur.execute(query=query)
+ query = cur.mogrify(f"""UPDATE public.sessions
+ SET {colname}= NULL
+ WHERE project_id = %(project_id)s""",
+ {"project_id": project_id})
+ cur.execute(query=query)
+
+ return {"data": get(project_id)}
+
+
+def add(tenant_id, project_id, new_name):
+ index = __get_available_index(project_id=project_id)
+ if index < 1:
+ return {"errors": ["maximum allowed metadata reached"]}
+ with pg_client.PostgresClient() as cur:
+ colname = index_to_colname(index)
+ cur.execute(
+ cur.mogrify(
+ f"""UPDATE public.projects SET {colname}= %(key)s WHERE project_id =%(project_id)s RETURNING {colname};""",
+ {"key": new_name, "project_id": project_id}))
+ col_val = cur.fetchone()[colname]
+ return {"data": {"key": col_val, "index": index}}
+
+
+def search(tenant_id, project_id, key, value):
+ value = value + "%"
+ s_query = []
+ for f in _get_column_names():
+ s_query.append(f"CASE WHEN {f}=%(key)s THEN TRUE ELSE FALSE END AS {f}")
+
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""\
+ SELECT
+ {",".join(s_query)}
+ FROM public.projects
+ WHERE
+ project_id = %(project_id)s AND deleted_at ISNULL
+ LIMIT 1;""",
+ {"key": key, "project_id": project_id})
+ )
+ all_metas = cur.fetchone()
+ key = None
+ for c in all_metas:
+ if all_metas[c]:
+ key = c
+ break
+ if key is None:
+ return {"errors": ["key does not exist"]}
+ cur.execute(
+ cur.mogrify(
+ f"""\
+ SELECT
+ DISTINCT "{key}" AS "{key}"
+ FROM public.sessions
+ {f'WHERE "{key}"::text ILIKE %(value)s' if value is not None and len(value) > 0 else ""}
+ ORDER BY "{key}"
+ LIMIT 20;""",
+ {"value": value, "project_id": project_id})
+ )
+ value = cur.fetchall()
+ return {"data": [k[key] for k in value]}
+
+
+def get_available_keys(project_id):
+ all_metas = get(project_id=project_id)
+ return [k["key"] for k in all_metas]
+
+
+def get_by_session_id(project_id, session_id):
+ all_metas = get(project_id=project_id)
+ if len(all_metas) == 0:
+ return []
+ keys = {index_to_colname(k["index"]): k["key"] for k in all_metas}
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""\
+ select {",".join(keys.keys())}
+ FROM public.sessions
+ WHERE project_id= %(project_id)s AND session_id=%(session_id)s;""",
+ {"session_id": session_id, "project_id": project_id})
+ )
+ session_metas = cur.fetchall()
+ results = []
+ for m in session_metas:
+ r = {}
+ for k in m.keys():
+ r[keys[k]] = m[k]
+ results.append(r)
+ return results
+
+
+def get_keys_by_projects(project_ids):
+ if project_ids is None or len(project_ids) == 0:
+ return {}
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ f"""\
+ SELECT
+ project_id,
+ {",".join(_get_column_names())}
+ FROM public.projects
+ WHERE project_id IN %(project_ids)s AND deleted_at ISNULL;""",
+ {"project_ids": tuple(project_ids)})
+
+ cur.execute(query)
+ rows = cur.fetchall()
+ results = {}
+ for r in rows:
+ project_id = r.pop("project_id")
+ results[project_id] = {}
+ for m in r:
+ if r[m] is not None:
+ results[project_id][m] = r[m]
+ return results
+
+
+def add_edit_delete(tenant_id, project_id, new_metas):
+ old_metas = get(project_id)
+ old_indexes = [k["index"] for k in old_metas]
+ new_indexes = [k["index"] for k in new_metas if "index" in k]
+ new_keys = [k["key"] for k in new_metas]
+
+ add_metas = [k["key"] for k in new_metas
+ if "index" not in k]
+ new_metas = {k["index"]: {"key": k["key"]} for
+ k in new_metas if
+ "index" in k}
+ old_metas = {k["index"]: {"key": k["key"]} for k in old_metas}
+
+ if len(new_keys) > 20:
+ return {"errors": ["you cannot add more than 20 key"]}
+ for k in new_metas.keys():
+ if re.match(regex, new_metas[k]["key"]) is None:
+ return {"errors": [f"invalid key {k}"]}
+ for k in add_metas:
+ if re.match(regex, k) is None:
+ return {"errors": [f"invalid key {k}"]}
+ if len(new_indexes) > len(set(new_indexes)):
+ return {"errors": ["duplicate indexes"]}
+ if len(new_keys) > len(set(new_keys)):
+ return {"errors": ["duplicate keys"]}
+ to_delete = list(set(old_indexes) - set(new_indexes))
+
+ with pg_client.PostgresClient() as cur:
+ for d in to_delete:
+ delete(tenant_id=tenant_id, project_id=project_id, index=d)
+
+ for k in add_metas:
+ add(tenant_id=tenant_id, project_id=project_id, new_name=k)
+
+ for k in new_metas.keys():
+ if new_metas[k]["key"].lower() != old_metas[k]["key"]:
+ edit(tenant_id=tenant_id, project_id=project_id, index=k, new_name=new_metas[k]["key"])
+
+ return {"data": get(project_id)}
+
+
+@dev.timed
+def get_remaining_metadata_with_count(tenant_id):
+ all_projects = projects.get_projects(tenant_id=tenant_id)
+ results = []
+ for p in all_projects:
+ used_metas = get(p["projectId"])
+ if MAX_INDEXES < 0:
+ remaining = -1
+ else:
+ remaining = MAX_INDEXES - len(used_metas)
+ results.append({**p, "limit": MAX_INDEXES, "remaining": remaining, "count": len(used_metas)})
+
+ return results
diff --git a/ee/api/chalicelib/core/reset_password.py b/ee/api/chalicelib/core/reset_password.py
new file mode 100644
index 000000000..5cab544fc
--- /dev/null
+++ b/ee/api/chalicelib/core/reset_password.py
@@ -0,0 +1,66 @@
+import chalicelib.utils.TimeUTC
+from chalicelib.utils import email_helper, captcha, helper
+import secrets
+from chalicelib.utils import pg_client
+
+from chalicelib.ee import users
+
+
+def step1(data):
+ print("====================== reset password 1 ===============")
+ print(data)
+ if helper.allow_captcha() and not captcha.is_valid(data["g-recaptcha-response"]):
+ print("error: Invalid captcha.")
+ return {"errors": ["Invalid captcha."]}
+ if "email" not in data:
+ return {"errors": ["email not found in body"]}
+
+ a_users = users.get_by_email_only(data["email"])
+ if len(a_users) > 1:
+ print(f"multiple users found for [{data['email']}] please contact our support")
+ return {"errors": ["please contact our support"]}
+ elif len(a_users) == 1:
+ a_users = a_users[0]
+ reset_token = secrets.token_urlsafe(6)
+ users.update(tenant_id=a_users["tenantId"], user_id=a_users["id"],
+ changes={"token": reset_token})
+ email_helper.send_reset_code(recipient=data["email"], reset_code=reset_token)
+ else:
+ print(f"invalid email address [{data['email']}]")
+ return {"errors": ["invalid email address"]}
+ return {"data": {"state": "success"}}
+
+
+def step2(data):
+ print("====================== change password 2 ===============")
+ user = users.get_by_email_reset(data["email"], data["code"])
+ if not user:
+ print("error: wrong email or reset code")
+ return {"errors": ["wrong email or reset code"]}
+ users.update(tenant_id=user["tenantId"], user_id=user["id"],
+ changes={"token": None, "password": data["password"], "generatedPassword": False,
+ "verifiedEmail": True})
+ return {"data": {"state": "success"}}
+
+
+def cron():
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ SELECT user_id
+ FROM public.basic_authentication
+ WHERE token notnull
+ AND (token_requested_at isnull or (EXTRACT(EPOCH FROM token_requested_at)*1000)::BIGINT < %(time)s);""",
+ {"time": chalicelib.utils.TimeUTC.TimeUTC.now(delta_days=-1)})
+ )
+ results = cur.fetchall()
+ if len(results) == 0:
+ return
+ results = tuple([r["user_id"] for r in results])
+ cur.execute(
+ cur.mogrify("""\
+ UPDATE public.basic_authentication
+ SET token = NULL, token_requested_at = NULL
+ WHERE user_id in %(ids)s;""",
+ {"ids": results})
+ )
diff --git a/ee/api/chalicelib/core/sessions.py b/ee/api/chalicelib/core/sessions.py
new file mode 100644
index 000000000..9d9ff204a
--- /dev/null
+++ b/ee/api/chalicelib/core/sessions.py
@@ -0,0 +1,617 @@
+from chalicelib.utils import pg_client, helper
+from chalicelib.utils import dev
+from chalicelib.core import events, sessions_metas, socket_ios, metadata, events_ios, sessions_mobs
+
+from chalicelib.ee import projects, errors
+
+from chalicelib.ee import resources
+
+SESSION_PROJECTION_COLS = """s.project_id,
+ s.session_id::text AS session_id,
+ s.user_uuid,
+ s.user_id,
+ s.user_agent,
+ s.user_os,
+ s.user_browser,
+ s.user_device,
+ s.user_device_type,
+ s.user_country,
+ s.start_ts,
+ s.duration,
+ s.events_count,
+ s.pages_count,
+ s.errors_count,
+ s.user_anonymous_id,
+ s.platform,
+ s.issue_score,
+ s.issue_types::text[] AS issue_types,
+ favorite_sessions.session_id NOTNULL AS favorite,
+ COALESCE((SELECT TRUE
+ FROM public.user_viewed_sessions AS fs
+ WHERE s.session_id = fs.session_id
+ AND fs.user_id = %(userId)s LIMIT 1), FALSE) AS viewed
+ """
+
+
+def __group_metadata(session, project_metadata):
+ meta = []
+ for m in project_metadata.keys():
+ if project_metadata[m] is not None and session.get(m) is not None:
+ meta.append({project_metadata[m]: session[m]})
+ session.pop(m)
+ return meta
+
+
+def get_by_id2_pg(project_id, session_id, user_id, full_data=False, include_fav_viewed=False, group_metadata=False):
+ with pg_client.PostgresClient() as cur:
+ extra_query = []
+ if include_fav_viewed:
+ extra_query.append("""COALESCE((SELECT TRUE
+ FROM public.user_favorite_sessions AS fs
+ WHERE s.session_id = fs.session_id
+ AND fs.user_id = %(userId)s), FALSE) AS favorite""")
+ extra_query.append("""COALESCE((SELECT TRUE
+ FROM public.user_viewed_sessions AS fs
+ WHERE s.session_id = fs.session_id
+ AND fs.user_id = %(userId)s), FALSE) AS viewed""")
+ query = cur.mogrify(
+ f"""\
+ SELECT
+ s.*,
+ s.session_id::text AS session_id
+ {"," if len(extra_query) > 0 else ""}{",".join(extra_query)}
+ {(",json_build_object(" + ",".join([f"'{m}',p.{m}" for m in metadata._get_column_names()]) + ") AS project_metadata") if group_metadata else ''}
+ FROM public.sessions AS s {"INNER JOIN public.projects AS p USING (project_id)" if group_metadata else ""}
+ WHERE s.project_id = %(project_id)s
+ AND s.session_id = %(session_id)s;""",
+ {"project_id": project_id, "session_id": session_id, "userId": user_id}
+ )
+ # print("===============")
+ # print(query)
+ cur.execute(query=query)
+
+ data = cur.fetchone()
+ if data is not None:
+ data = helper.dict_to_camel_case(data)
+ if full_data:
+ if data["platform"] == 'ios':
+ data['events'] = events_ios.get_by_sessionId(project_id=project_id, session_id=session_id)
+ for e in data['events']:
+ if e["type"].endswith("_IOS"):
+ e["type"] = e["type"][:-len("_IOS")]
+ data['crashes'] = events_ios.get_crashes_by_session_id(session_id=session_id)
+ data['userEvents'] = events_ios.get_customs_by_sessionId(project_id=project_id,
+ session_id=session_id)
+ data['mobsUrl'] = sessions_mobs.get_ios(sessionId=session_id)
+ data['metadata'] = __group_metadata(project_metadata=data.pop("projectMetadata"), session=data)
+ data["socket"] = socket_ios.start_replay(project_id=project_id, session_id=session_id,
+ device=data["userDevice"],
+ os_version=data["userOsVersion"],
+ mob_url=data["mobsUrl"])
+ else:
+ data['events'] = events.get_by_sessionId2_pg(project_id=project_id, session_id=session_id,
+ group_clickrage=True)
+ all_errors = events.get_errors_by_session_id(session_id=session_id)
+ data['stackEvents'] = [e for e in all_errors if e['source'] != "js_exception"]
+ # to keep only the first stack
+ data['errors'] = [errors.format_first_stack_frame(e) for e in all_errors if
+ e['source'] == "js_exception"][
+ :500] # limit the number of errors to reduce the response-body size
+ data['userEvents'] = events.get_customs_by_sessionId2_pg(project_id=project_id,
+ session_id=session_id)
+ data['mobsUrl'] = sessions_mobs.get_web(sessionId=session_id)
+ data['metadata'] = __group_metadata(project_metadata=data.pop("projectMetadata"), session=data)
+ data['resources'] = resources.get_by_session_id(session_id=session_id)
+
+ return data
+ return None
+
+
+def sessions_args(args, params):
+ if params is not None:
+ for key in ['userOs', 'userBrowser', 'userCountry', 'path', 'path_in_order', 'after', 'minDuration',
+ 'maxDuration', 'sortSessions', 'eventsCount', 'consoleLogCount', 'startDate', 'endDate',
+ 'consoleLog', 'location']:
+ args[key] = params.get(key)
+
+
+new_line = "\n"
+
+
+def __get_sql_operator(op):
+ op = op.lower()
+ return "=" if op == "is" or op == "on" else "!=" if op == "isnot" else "ILIKE" if op == "contains" else "NOT ILIKE" if op == "notcontains" else "="
+
+
+def __is_negation_operator(op):
+ return op in ("!=", "NOT ILIKE")
+
+
+def __reverse_sql_operator(op):
+ return "=" if op == "!=" else "!=" if op == "=" else "ILIKE" if op == "NOT ILIKE" else "NOT ILIKE"
+
+
+def __get_sql_operator_multiple(op):
+ op = op.lower()
+ return " IN " if op == "is" else " NOT IN "
+
+
+def __get_sql_operator_boolean(op):
+ op = op.lower()
+ return True if op == "true" else False
+
+
+def __get_sql_value_multiple(values):
+ if isinstance(values, tuple):
+ return values
+ return tuple([v for v in values])
+
+
+@dev.timed
+def search2_pg(data, project_id, user_id, favorite_only=False, errors_only=False, error_status="ALL",
+ count_only=False, issue=None):
+ sessions = []
+ generic_args = {"startDate": data['startDate'], "endDate": data['endDate'],
+ "projectId": project_id,
+ "userId": user_id}
+ with pg_client.PostgresClient() as cur:
+ extra_constraints = [
+ cur.mogrify("s.project_id = %(project_id)s", {"project_id": project_id}),
+ cur.mogrify("s.duration IS NOT NULL", {})
+ ]
+ extra_from = ""
+ fav_only_join = ""
+ if favorite_only and not errors_only:
+ fav_only_join = "LEFT JOIN public.user_favorite_sessions AS fs ON fs.session_id = s.session_id"
+ extra_constraints.append(cur.mogrify("fs.user_id = %(userId)s", {"userId": user_id}))
+ events_query_part = ""
+ strict = True
+
+ if len(data.get("events", [])) > 0:
+ events_query_from = []
+ event_index = 0
+
+ for event in data["events"]:
+ # TODO: remove this when message_id is removed
+ seq_id = False
+ event_type = event["type"].upper()
+ if event.get("operator") is None:
+ event["operator"] = "is"
+ op = __get_sql_operator(event["operator"])
+ is_not = False
+ if __is_negation_operator(op) and event_index > 0:
+ is_not = True
+ op = __reverse_sql_operator(op)
+ event_from = "%s INNER JOIN public.sessions AS ms USING (session_id)"
+ event_where = ["ms.project_id = %(projectId)s", "main.timestamp >= %(startDate)s",
+ "main.timestamp <= %(endDate)s", "ms.start_ts >= %(startDate)s",
+ "ms.start_ts <= %(endDate)s"]
+ event_args = {"value": helper.string_to_sql_like_with_op(event['value'], op)}
+ if event_type not in list(events.SUPPORTED_TYPES.keys()) \
+ or event.get("value") in [None, "", "*"] \
+ and (event_type != events.event_type.ERROR.ui_type \
+ or event_type != events.event_type.ERROR_IOS.ui_type):
+ continue
+ if event_type == events.event_type.CLICK.ui_type:
+ event_from = event_from % f"{events.event_type.CLICK.table} AS main "
+ event_where.append(f"main.{events.event_type.CLICK.column} {op} %(value)s")
+
+ elif event_type == events.event_type.INPUT.ui_type:
+ event_from = event_from % f"{events.event_type.INPUT.table} AS main "
+ event_where.append(f"main.{events.event_type.INPUT.column} {op} %(value)s")
+ if len(event.get("custom", "")) > 0:
+ event_where.append("main.value ILIKE %(custom)s")
+ event_args["custom"] = helper.string_to_sql_like_with_op(event['custom'], "ILIKE")
+ elif event_type == events.event_type.LOCATION.ui_type:
+ event_from = event_from % f"{events.event_type.LOCATION.table} AS main "
+ event_where.append(f"main.{events.event_type.LOCATION.column} {op} %(value)s")
+ elif event_type == events.event_type.CUSTOM.ui_type:
+ seq_id = True
+ event_from = event_from % f"{events.event_type.CUSTOM.table} AS main "
+ event_where.append(f"main.{events.event_type.CUSTOM.column} {op} %(value)s")
+ elif event_type == events.event_type.REQUEST.ui_type:
+ seq_id = True
+ event_from = event_from % f"{events.event_type.REQUEST.table} AS main "
+ event_where.append(f"main.{events.event_type.REQUEST.column} {op} %(value)s")
+ elif event_type == events.event_type.GRAPHQL.ui_type:
+ event_from = event_from % f"{events.event_type.GRAPHQL.table} AS main "
+ event_where.append(f"main.{events.event_type.GRAPHQL.column} {op} %(value)s")
+ elif event_type == events.event_type.STATEACTION.ui_type:
+ event_from = event_from % f"{events.event_type.STATEACTION.table} AS main "
+ event_where.append(f"main.{events.event_type.STATEACTION.column} {op} %(value)s")
+ elif event_type == events.event_type.ERROR.ui_type:
+ if event.get("source") in [None, "*", ""]:
+ event["source"] = "js_exception"
+ event_from = event_from % f"{events.event_type.ERROR.table} AS main INNER JOIN public.errors AS main1 USING(error_id)"
+ if event.get("value") not in [None, "*", ""]:
+ event_where.append(f"(main1.message {op} %(value)s OR main1.name {op} %(value)s)")
+ if event.get("source") not in [None, "*", ""]:
+ event_where.append(f"main1.source = %(source)s")
+ event_args["source"] = event["source"]
+ elif event.get("source") not in [None, "*", ""]:
+ event_where.append(f"main1.source = %(source)s")
+ event_args["source"] = event["source"]
+
+ # ----- IOS
+ elif event_type == events.event_type.CLICK_IOS.ui_type:
+ seq_id = True
+ event_from = event_from % f"{events.event_type.CLICK_IOS.table} AS main "
+ event_where.append(f"main.{events.event_type.CLICK_IOS.column} {op} %(value)s")
+
+ elif event_type == events.event_type.INPUT_IOS.ui_type:
+ seq_id = True
+ event_from = event_from % f"{events.event_type.INPUT_IOS.table} AS main "
+ event_where.append(f"main.{events.event_type.INPUT_IOS.column} {op} %(value)s")
+
+ if len(event.get("custom", "")) > 0:
+ event_where.append("main.value ILIKE %(custom)s")
+ event_args["custom"] = helper.string_to_sql_like_with_op(event['custom'], "ILIKE")
+ elif event_type == events.event_type.VIEW_IOS.ui_type:
+ seq_id = True
+ event_from = event_from % f"{events.event_type.VIEW_IOS.table} AS main "
+ event_where.append(f"main.{events.event_type.VIEW_IOS.column} {op} %(value)s")
+ elif event_type == events.event_type.CUSTOM_IOS.ui_type:
+ seq_id = True
+ event_from = event_from % f"{events.event_type.CUSTOM_IOS.table} AS main "
+ event_where.append(f"main.{events.event_type.CUSTOM_IOS.column} {op} %(value)s")
+ elif event_type == events.event_type.REQUEST_IOS.ui_type:
+ seq_id = True
+ event_from = event_from % f"{events.event_type.REQUEST_IOS.table} AS main "
+ event_where.append(f"main.{events.event_type.REQUEST_IOS.column} {op} %(value)s")
+ elif event_type == events.event_type.ERROR_IOS.ui_type:
+ seq_id = True
+ event_from = event_from % f"{events.event_type.ERROR_IOS.table} AS main INNER JOIN public.crashes_ios AS main1 USING(crash_id)"
+ if event.get("value") not in [None, "*", ""]:
+ event_where.append(f"(main1.reason {op} %(value)s OR main1.name {op} %(value)s)")
+
+ else:
+ continue
+
+ event_index += 1
+ if is_not:
+ event_from += f""" LEFT JOIN (SELECT session_id FROM {event_from} WHERE {" AND ".join(event_where)}) AS left_not USING (session_id)"""
+ event_where[-1] = "left_not.session_id ISNULL"
+ events_query_from.append(cur.mogrify(f"""\
+ (SELECT
+ main.session_id, {'seq_index' if seq_id else 'message_id %%%% 2147483647 AS seq_index'}, timestamp, {event_index} AS funnel_step
+ FROM {event_from}
+ WHERE {" AND ".join(event_where)}
+ )\
+ """, {**generic_args, **event_args}).decode('UTF-8'))
+
+ if len(events_query_from) > 0:
+ events_query_part = f"""\
+ SELECT
+ session_id, MIN(timestamp) AS first_event_ts, MAX(timestamp) AS last_event_ts
+ FROM
+ ({(" UNION ALL ").join(events_query_from)}) AS f_query
+ GROUP BY 1
+ {"" if event_index < 2 else f"HAVING events.funnel(array_agg(funnel_step ORDER BY timestamp,seq_index ASC), {event_index})" if strict
+ else f"HAVING array_length(array_agg(DISTINCT funnel_step), 1) = {len(data['events'])}"}
+ {fav_only_join}
+ """
+ else:
+ data["events"] = []
+
+ # ---------------------------------------------------------------------------
+ if "filters" in data:
+ meta_keys = metadata.get(project_id=project_id)
+ meta_keys = {m["key"]: m["index"] for m in meta_keys}
+ for f in data["filters"]:
+ if not isinstance(f.get("value"), list):
+ f["value"] = [f.get("value")]
+ if len(f["value"]) == 0 or f["value"][0] is None:
+ continue
+ filter_type = f["type"].upper()
+ f["value"] = __get_sql_value_multiple(f["value"])
+ if filter_type == sessions_metas.meta_type.USERBROWSER:
+ op = __get_sql_operator_multiple(f["operator"])
+ extra_constraints.append(
+ cur.mogrify(f's.user_browser {op} %(value)s', {"value": f["value"]}))
+
+ elif filter_type in [sessions_metas.meta_type.USEROS, sessions_metas.meta_type.USEROS_IOS]:
+ op = __get_sql_operator_multiple(f["operator"])
+ extra_constraints.append(cur.mogrify(f's.user_os {op} %(value)s', {"value": f["value"]}))
+
+ elif filter_type in [sessions_metas.meta_type.USERDEVICE, sessions_metas.meta_type.USERDEVICE_IOS]:
+ op = __get_sql_operator_multiple(f["operator"])
+ extra_constraints.append(cur.mogrify(f's.user_device {op} %(value)s', {"value": f["value"]}))
+
+ elif filter_type in [sessions_metas.meta_type.USERCOUNTRY, sessions_metas.meta_type.USERCOUNTRY_IOS]:
+ op = __get_sql_operator_multiple(f["operator"])
+ extra_constraints.append(cur.mogrify(f's.user_country {op} %(value)s', {"value": f["value"]}))
+ elif filter_type == "duration".upper():
+ if len(f["value"]) > 0 and f["value"][0] is not None:
+ extra_constraints.append(
+ cur.mogrify("s.duration >= %(minDuration)s", {"minDuration": f["value"][0]}))
+ if len(f["value"]) > 1 and f["value"][1] is not None and f["value"][1] > 0:
+ extra_constraints.append(
+ cur.mogrify("s.duration <= %(maxDuration)s", {"maxDuration": f["value"][1]}))
+ elif filter_type == sessions_metas.meta_type.REFERRER:
+ # events_query_part = events_query_part + f"INNER JOIN events.pages AS p USING(session_id)"
+ extra_from += f"INNER JOIN {events.event_type.LOCATION.table} AS p USING(session_id)"
+ op = __get_sql_operator_multiple(f["operator"])
+ extra_constraints.append(
+ cur.mogrify(f"p.base_referrer {op} %(referrer)s", {"referrer": f["value"]}))
+ elif filter_type == events.event_type.METADATA.ui_type:
+ op = __get_sql_operator(f["operator"])
+ if f.get("key") in meta_keys.keys():
+ extra_constraints.append(
+ cur.mogrify(f"s.{metadata.index_to_colname(meta_keys[f['key']])} {op} %(value)s",
+ {"value": helper.string_to_sql_like_with_op(f["value"][0], op)})
+ )
+ elif filter_type in [sessions_metas.meta_type.USERID, sessions_metas.meta_type.USERID_IOS]:
+ op = __get_sql_operator(f["operator"])
+ extra_constraints.append(
+ cur.mogrify(f"s.user_id {op} %(value)s",
+ {"value": helper.string_to_sql_like_with_op(f["value"][0], op)})
+ )
+ elif filter_type in [sessions_metas.meta_type.USERANONYMOUSID,
+ sessions_metas.meta_type.USERANONYMOUSID_IOS]:
+ op = __get_sql_operator(f["operator"])
+ extra_constraints.append(
+ cur.mogrify(f"s.user_anonymous_id {op} %(value)s",
+ {"value": helper.string_to_sql_like_with_op(f["value"][0], op)})
+ )
+ elif filter_type in [sessions_metas.meta_type.REVID, sessions_metas.meta_type.REVID_IOS]:
+ op = __get_sql_operator(f["operator"])
+ extra_constraints.append(
+ cur.mogrify(f"s.rev_id {op} %(value)s",
+ {"value": helper.string_to_sql_like_with_op(f["value"][0], op)})
+ )
+
+ # ---------------------------------------------------------------------------
+
+ if data.get("startDate") is not None:
+ extra_constraints.append(cur.mogrify("s.start_ts >= %(startDate)s", {"startDate": data['startDate']}))
+ else:
+ data['startDate'] = None
+ if data.get("endDate") is not None:
+ extra_constraints.append(cur.mogrify("s.start_ts <= %(endDate)s", {"endDate": data['endDate']}))
+ else:
+ data['endDate'] = None
+
+ if data.get('platform') is not None:
+ if data['platform'] == 'mobile':
+ extra_constraints.append(b"s.user_os in ('Android','BlackBerry OS','iOS','Tizen','Windows Phone')")
+ elif data['platform'] == 'desktop':
+ extra_constraints.append(
+ b"s.user_os in ('Chrome OS','Fedora','Firefox OS','Linux','Mac OS X','Ubuntu','Windows')")
+
+ order = "DESC"
+ if data.get("order") is not None:
+ order = data["order"]
+ sort = 'session_id'
+ if data.get("sort") is not None and data["sort"] != "session_id":
+ sort += " " + order + "," + helper.key_to_snake_case(data["sort"])
+ else:
+ sort = 'session_id'
+
+ if errors_only:
+ extra_from += f" INNER JOIN {events.event_type.ERROR.table} AS er USING (session_id) INNER JOIN public.errors AS ser USING (error_id)"
+ extra_constraints.append(b"ser.source = 'js_exception'")
+ if error_status != "ALL":
+ extra_constraints.append(cur.mogrify("ser.status = %(status)s", {"status": error_status.lower()}))
+ if favorite_only:
+ extra_from += " INNER JOIN public.user_favorite_errors AS ufe USING (error_id)"
+ extra_constraints.append(cur.mogrify("ufe.user_id = %(user_id)s", {"user_id": user_id}))
+
+ extra_constraints = [extra.decode('UTF-8') + "\n" for extra in extra_constraints]
+ if not favorite_only and not errors_only:
+ extra_from += """LEFT JOIN (SELECT user_id, session_id
+ FROM public.user_favorite_sessions
+ WHERE user_id = %(userId)s) AS favorite_sessions
+ USING (session_id)"""
+ extra_join = ""
+ if issue is not None:
+ extra_join = cur.mogrify("""
+ INNER JOIN LATERAL(SELECT TRUE FROM events_common.issues INNER JOIN public.issues AS p_issues USING (issue_id)
+ WHERE issues.session_id=f.session_id
+ AND p_issues.type=%(type)s
+ AND p_issues.context_string=%(contextString)s
+ AND timestamp >= f.first_event_ts
+ AND timestamp <= f.last_event_ts) AS issues ON(TRUE)
+ """, {"contextString": issue["contextString"], "type": issue["type"]}).decode('UTF-8')
+
+ query_part = f"""\
+ FROM {f"({events_query_part}) AS f" if len(events_query_part) > 0 else "public.sessions AS s"}
+ {extra_join}
+ {"INNER JOIN public.sessions AS s USING(session_id)" if len(events_query_part) > 0 else ""}
+ {extra_from}
+ WHERE
+
+ {" AND ".join(extra_constraints)}"""
+
+ if errors_only:
+ main_query = cur.mogrify(f"""\
+ SELECT DISTINCT er.error_id, ser.status, ser.parent_error_id, ser.payload,
+ COALESCE((SELECT TRUE
+ FROM public.user_favorite_sessions AS fs
+ WHERE s.session_id = fs.session_id
+ AND fs.user_id = %(userId)s), FALSE) AS favorite,
+ COALESCE((SELECT TRUE
+ FROM public.user_viewed_errors AS ve
+ WHERE er.error_id = ve.error_id
+ AND ve.user_id = %(userId)s LIMIT 1), FALSE) AS viewed
+ {query_part};""",
+ generic_args)
+
+ elif count_only:
+ main_query = cur.mogrify(f"""\
+ SELECT COUNT(DISTINCT s.session_id) AS count_sessions, COUNT(DISTINCT s.user_uuid) AS count_users
+ {query_part};""",
+ generic_args)
+ else:
+ main_query = cur.mogrify(f"""\
+ SELECT * FROM
+ (SELECT DISTINCT ON(s.session_id) {SESSION_PROJECTION_COLS}
+ {query_part}
+ ORDER BY s.session_id desc) AS filtred_sessions
+ ORDER BY favorite DESC, issue_score DESC, {sort} {order};""",
+ generic_args)
+
+ # print("--------------------")
+ # print(main_query)
+
+ cur.execute(main_query)
+
+ if count_only:
+ return helper.dict_to_camel_case(cur.fetchone())
+ sessions = []
+ total = cur.rowcount
+ row = cur.fetchone()
+ limit = 200
+ while row is not None and len(sessions) < limit:
+ if row.get("favorite"):
+ limit += 1
+ sessions.append(row)
+ row = cur.fetchone()
+
+ if errors_only:
+ return sessions
+ if data.get("sort") is not None and data["sort"] != "session_id":
+ sessions = sorted(sessions, key=lambda s: s[helper.key_to_snake_case(data["sort"])],
+ reverse=data.get("order", "DESC").upper() == "DESC")
+ return {
+ 'total': total,
+ 'sessions': helper.list_to_camel_case(sessions)
+ }
+
+
+def search_by_metadata(tenant_id, user_id, m_key, m_value, project_id=None):
+ if project_id is None:
+ all_projects = projects.get_projects(tenant_id=tenant_id, recording_state=False)
+ else:
+ all_projects = [
+ projects.get_project(tenant_id=tenant_id, project_id=int(project_id), include_last_session=False,
+ include_gdpr=False)]
+
+ all_projects = {int(p["projectId"]): p["name"] for p in all_projects}
+ project_ids = list(all_projects.keys())
+
+ available_keys = metadata.get_keys_by_projects(project_ids)
+ for i in available_keys:
+ available_keys[i]["user_id"] = sessions_metas.meta_type.USERID
+ available_keys[i]["user_anonymous_id"] = sessions_metas.meta_type.USERANONYMOUSID
+ results = {}
+ for i in project_ids:
+ if m_key not in available_keys[i].values():
+ available_keys.pop(i)
+ results[i] = {"total": 0, "sessions": [], "missingMetadata": True}
+ project_ids = list(available_keys.keys())
+ if len(project_ids) > 0:
+ with pg_client.PostgresClient() as cur:
+ sub_queries = []
+ for i in project_ids:
+ col_name = list(available_keys[i].keys())[list(available_keys[i].values()).index(m_key)]
+ sub_queries.append(cur.mogrify(
+ f"(SELECT COALESCE(COUNT(s.*)) AS count FROM public.sessions AS s WHERE s.project_id = %(id)s AND s.{col_name} = %(value)s) AS \"{i}\"",
+ {"id": i, "value": m_value}).decode('UTF-8'))
+ query = f"""SELECT {", ".join(sub_queries)};"""
+ cur.execute(query=query)
+
+ rows = cur.fetchone()
+
+ sub_queries = []
+ for i in rows.keys():
+ results[i] = {"total": rows[i], "sessions": [], "missingMetadata": False, "name": all_projects[int(i)]}
+ if rows[i] > 0:
+ col_name = list(available_keys[int(i)].keys())[list(available_keys[int(i)].values()).index(m_key)]
+ sub_queries.append(
+ cur.mogrify(
+ f"""(
+ SELECT *
+ FROM (
+ SELECT DISTINCT ON(favorite_sessions.session_id, s.session_id) {SESSION_PROJECTION_COLS}
+ FROM public.sessions AS s LEFT JOIN (SELECT session_id
+ FROM public.user_favorite_sessions
+ WHERE user_favorite_sessions.user_id = %(userId)s
+ ) AS favorite_sessions USING (session_id)
+ WHERE s.project_id = %(id)s AND s.duration IS NOT NULL AND s.{col_name} = %(value)s
+ ) AS full_sessions
+ ORDER BY favorite DESC, issue_score DESC
+ LIMIT 10
+ )""",
+ {"id": i, "value": m_value, "userId": user_id}).decode('UTF-8'))
+ if len(sub_queries) > 0:
+ cur.execute("\nUNION\n".join(sub_queries))
+ rows = cur.fetchall()
+ for i in rows:
+ results[str(i["project_id"])]["sessions"].append(helper.dict_to_camel_case(i))
+ return results
+
+
+def search_by_issue(user_id, issue, project_id, start_date, end_date):
+ constraints = ["s.project_id = %(projectId)s",
+ "p_issues.context_string = %(issueContextString)s",
+ "p_issues.type = %(issueType)s"]
+ if start_date is not None:
+ constraints.append("start_ts >= %(startDate)s")
+ if end_date is not None:
+ constraints.append("start_ts <= %(endDate)s")
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""SELECT DISTINCT ON(favorite_sessions.session_id, s.session_id) {SESSION_PROJECTION_COLS}
+ FROM public.sessions AS s
+ INNER JOIN events_common.issues USING (session_id)
+ INNER JOIN public.issues AS p_issues USING (issue_id)
+ LEFT JOIN (SELECT user_id, session_id
+ FROM public.user_favorite_sessions
+ WHERE user_id = %(userId)s) AS favorite_sessions
+ USING (session_id)
+ WHERE {" AND ".join(constraints)}
+ ORDER BY s.session_id DESC;""",
+ {
+ "issueContextString": issue["contextString"],
+ "issueType": issue["type"], "userId": user_id,
+ "projectId": project_id,
+ "startDate": start_date,
+ "endDate": end_date
+ }))
+
+ rows = cur.fetchall()
+ return helper.list_to_camel_case(rows)
+
+
+def get_favorite_sessions(project_id, user_id, include_viewed=False):
+ with pg_client.PostgresClient() as cur:
+ query_part = cur.mogrify(f"""\
+ FROM public.sessions AS s
+ LEFT JOIN public.user_favorite_sessions AS fs ON fs.session_id = s.session_id
+ WHERE fs.user_id = %(userId)s""",
+ {"projectId": project_id, "userId": user_id}
+ )
+
+ extra_query = b""
+ if include_viewed:
+ extra_query = cur.mogrify(""",\
+ COALESCE((SELECT TRUE
+ FROM public.user_viewed_sessions AS fs
+ WHERE s.session_id = fs.session_id
+ AND fs.user_id = %(userId)s), FALSE) AS viewed""",
+ {"projectId": project_id, "userId": user_id})
+
+ cur.execute(f"""\
+ SELECT s.project_id,
+ s.session_id::text AS session_id,
+ s.user_uuid,
+ s.user_id,
+ s.user_agent,
+ s.user_os,
+ s.user_browser,
+ s.user_device,
+ s.user_country,
+ s.start_ts,
+ s.duration,
+ s.events_count,
+ s.pages_count,
+ s.errors_count,
+ TRUE AS favorite
+ {extra_query.decode('UTF-8')}
+ {query_part.decode('UTF-8')}
+ ORDER BY s.session_id
+ LIMIT 50;""")
+
+ sessions = cur.fetchall()
+ return helper.list_to_camel_case(sessions)
diff --git a/ee/api/chalicelib/core/sessions_assignments.py b/ee/api/chalicelib/core/sessions_assignments.py
new file mode 100644
index 000000000..2b9c28d8f
--- /dev/null
+++ b/ee/api/chalicelib/core/sessions_assignments.py
@@ -0,0 +1,158 @@
+from chalicelib.utils.helper import environ as env
+from chalicelib.utils import helper
+from chalicelib.utils.TimeUTC import TimeUTC
+from chalicelib.utils import pg_client
+from chalicelib.core import integrations_manager, integration_base_issue
+import json
+
+
+def __get_saved_data(project_id, session_id, issue_id, tool):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(f"""\
+ SELECT *
+ FROM public.assigned_sessions
+ WHERE
+ session_id = %(session_id)s
+ AND issue_id = %(issue_id)s
+ AND provider = %(provider)s;\
+ """,
+ {"session_id": session_id, "issue_id": issue_id, "provider": tool.lower()})
+ cur.execute(
+ query
+ )
+ return helper.dict_to_camel_case(cur.fetchone())
+
+
+def create_new_assignment(tenant_id, project_id, session_id, creator_id, assignee, description, title, issue_type, integration_project_id):
+ error, integration = integrations_manager.get_integration(tenant_id=tenant_id, user_id=creator_id)
+ if error is not None:
+ return error
+
+ i = integration.get()
+
+ if i is None:
+ return {"errors": [f"integration not found"]}
+ link = env["SITE_URL"] + f"/{project_id}/session/{session_id}"
+ description += f"\n> {link}"
+ try:
+ issue = integration.issue_handler.create_new_assignment(title=title, assignee=assignee, description=description,
+ issue_type=issue_type,
+ integration_project_id=integration_project_id)
+ except integration_base_issue.RequestException as e:
+ return integration_base_issue.proxy_issues_handler(e)
+ if issue is not None and "id" not in issue:
+ return {"errors": ["something went wrong while creating the issue"]}
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify("""\
+ INSERT INTO public.assigned_sessions(session_id, issue_id, created_by, provider,provider_data)
+ VALUES (%(session_id)s, %(issue_id)s, %(creator_id)s, %(provider)s,%(provider_data)s);\
+ """,
+ {"session_id": session_id, "creator_id": creator_id,
+ "issue_id": issue["id"], "provider": integration.provider.lower(),
+ "provider_data": json.dumps({"integrationProjectId": integration_project_id})})
+ cur.execute(
+ query
+ )
+ issue["provider"] = integration.provider.lower()
+ return issue
+
+
+def get_all(project_id, user_id):
+ available_integrations = integrations_manager.get_available_integrations(user_id=user_id)
+ no_integration = not any(available_integrations.values())
+ if no_integration:
+ return []
+ all_integrations = all(available_integrations.values())
+ extra_query = ["sessions.project_id = %(project_id)s"]
+ if not all_integrations:
+ extra_query.append("provider IN %(providers)s")
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(f"""\
+ SELECT assigned_sessions.*
+ FROM public.assigned_sessions
+ INNER JOIN public.sessions USING (session_id)
+ WHERE {" AND ".join(extra_query)};\
+""",
+ {"project_id": project_id,
+ "providers": tuple(d for d in available_integrations if available_integrations[d])})
+ cur.execute(
+ query
+ )
+ assignments = helper.list_to_camel_case(cur.fetchall())
+ for a in assignments:
+ a["createdAt"] = TimeUTC.datetime_to_timestamp(a["createdAt"])
+ return assignments
+
+
+def get_by_session(tenant_id, user_id, project_id, session_id):
+ available_integrations = integrations_manager.get_available_integrations(user_id=user_id)
+ if not any(available_integrations.values()):
+ return []
+ extra_query = ["session_id = %(session_id)s", "provider IN %(providers)s"]
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(f"""\
+ SELECT *
+ FROM public.assigned_sessions
+ WHERE {" AND ".join(extra_query)};""",
+ {"session_id": session_id,
+ "providers": tuple([k for k in available_integrations if available_integrations[k]])})
+ cur.execute(
+ query
+ )
+ results = cur.fetchall()
+ issues = {}
+ for i in results:
+ if i["provider"] not in issues.keys():
+ issues[i["provider"]] = []
+
+ issues[i["provider"]].append({"integrationProjectId": i["provider_data"]["integrationProjectId"],
+ "id": i["issue_id"]})
+ results = []
+ for tool in issues.keys():
+ error, integration = integrations_manager.get_integration(tool=tool, tenant_id=tenant_id, user_id=user_id)
+ if error is not None:
+ return error
+
+ i = integration.get()
+ if i is None:
+ print("integration not found")
+ continue
+
+ r = integration.issue_handler.get_by_ids(saved_issues=issues[tool])
+ print(r)
+ for i in r["issues"]:
+ i["provider"] = tool
+ results += r["issues"]
+ return results
+
+
+def get(tenant_id, user_id, project_id, session_id, assignment_id):
+ error, integration = integrations_manager.get_integration(tenant_id=tenant_id, user_id=user_id)
+ if error is not None:
+ return error
+ l = __get_saved_data(project_id, session_id, assignment_id, tool=integration.provider)
+ if l is None:
+ return {"errors": ["issue not found"]}
+ i = integration.get()
+ if i is None:
+ return {"errors": ["integration not found"]}
+ r = integration.issue_handler.get(integration_project_id=l["providerData"]["integrationProjectId"],
+ assignment_id=assignment_id)
+
+ r["provider"] = integration.provider.lower()
+ return r
+
+
+def comment(tenant_id, user_id, project_id, session_id, assignment_id, message):
+ error, integration = integrations_manager.get_integration(tenant_id=tenant_id, user_id=user_id)
+ if error is not None:
+ return error
+ i = integration.get()
+
+ if i is None:
+ return {"errors": [f"integration not found"]}
+ l = __get_saved_data(project_id, session_id, assignment_id, tool=integration.provider)
+
+ return integration.issue_handler.comment(integration_project_id=l["providerData"]["integrationProjectId"],
+ assignment_id=assignment_id,
+ comment=message)
diff --git a/ee/api/chalicelib/core/sessions_favorite_viewed.py b/ee/api/chalicelib/core/sessions_favorite_viewed.py
new file mode 100644
index 000000000..1239156ab
--- /dev/null
+++ b/ee/api/chalicelib/core/sessions_favorite_viewed.py
@@ -0,0 +1,89 @@
+from chalicelib.utils import pg_client
+from chalicelib.core import sessions
+
+
+def add_favorite_session(project_id, user_id, session_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""\
+ INSERT INTO public.user_favorite_sessions
+ (user_id, session_id)
+ VALUES
+ (%(userId)s,%(sessionId)s);""",
+ {"userId": user_id, "sessionId": session_id})
+ )
+ return sessions.get_by_id2_pg(project_id=project_id, session_id=session_id, user_id=user_id, full_data=False,
+ include_fav_viewed=True)
+
+
+def remove_favorite_session(project_id, user_id, session_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""\
+ DELETE FROM public.user_favorite_sessions
+ WHERE
+ user_id = %(userId)s
+ AND session_id = %(sessionId)s;""",
+ {"userId": user_id, "sessionId": session_id})
+ )
+ return sessions.get_by_id2_pg(project_id=project_id, session_id=session_id, user_id=user_id, full_data=False,
+ include_fav_viewed=True)
+
+
+def add_viewed_session(project_id, user_id, session_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ INSERT INTO public.user_viewed_sessions
+ (user_id, session_id)
+ VALUES
+ (%(userId)s,%(sessionId)s);""",
+ {"userId": user_id, "sessionId": session_id})
+ )
+
+
+def favorite_session(project_id, user_id, session_id):
+ if favorite_session_exists(user_id=user_id, session_id=session_id):
+ return remove_favorite_session(project_id=project_id, user_id=user_id, session_id=session_id)
+
+ return add_favorite_session(project_id=project_id, user_id=user_id, session_id=session_id)
+
+
+def view_session(project_id, user_id, session_id):
+ if viewed_session_exists(user_id=user_id, session_id=session_id):
+ return None
+ return add_viewed_session(project_id=project_id, user_id=user_id, session_id=session_id)
+
+
+def favorite_session_exists(user_id, session_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ """SELECT
+ session_id
+ FROM public.user_favorite_sessions
+ WHERE
+ user_id = %(userId)s
+ AND session_id = %(sessionId)s""",
+ {"userId": user_id, "sessionId": session_id})
+ )
+ r = cur.fetchone()
+ return r is not None
+
+
+def viewed_session_exists(user_id, session_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ """SELECT
+ session_id
+ FROM public.user_viewed_sessions
+ WHERE
+ user_id = %(userId)s
+ AND session_id = %(sessionId)s""",
+ {"userId": user_id, "sessionId": session_id})
+ )
+ r = cur.fetchone()
+ if r:
+ return True
+ return False
diff --git a/ee/api/chalicelib/core/sessions_metas.py b/ee/api/chalicelib/core/sessions_metas.py
new file mode 100644
index 000000000..a21b78783
--- /dev/null
+++ b/ee/api/chalicelib/core/sessions_metas.py
@@ -0,0 +1,226 @@
+from chalicelib.utils import pg_client, helper
+from chalicelib.utils.event_filter_definition import SupportedFilter
+
+
+def get_key_values(project_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""\
+ SELECT ARRAY_AGG(DISTINCT s.user_os
+ ORDER BY s.user_os) FILTER ( WHERE s.user_os IS NOT NULL AND s.platform='web') AS {meta_type.USEROS},
+ ARRAY_AGG(DISTINCT s.user_browser
+ ORDER BY s.user_browser)
+ FILTER ( WHERE s.user_browser IS NOT NULL AND s.platform='web') AS {meta_type.USERBROWSER},
+ ARRAY_AGG(DISTINCT s.user_device
+ ORDER BY s.user_device)
+ FILTER ( WHERE s.user_device IS NOT NULL AND s.user_device != '' AND s.platform='web') AS {meta_type.USERDEVICE},
+ ARRAY_AGG(DISTINCT s.user_country
+ ORDER BY s.user_country)
+ FILTER ( WHERE s.user_country IS NOT NULL AND s.platform='web')::text[] AS {meta_type.USERCOUNTRY},
+ ARRAY_AGG(DISTINCT s.user_id
+ ORDER BY s.user_id) FILTER ( WHERE s.user_id IS NOT NULL AND s.user_id != 'none' AND s.user_id != '' AND s.platform='web') AS {meta_type.USERID},
+ ARRAY_AGG(DISTINCT s.user_anonymous_id
+ ORDER BY s.user_anonymous_id) FILTER ( WHERE s.user_anonymous_id IS NOT NULL AND s.user_anonymous_id != 'none' AND s.user_anonymous_id != '' AND s.platform='web') AS {meta_type.USERANONYMOUSID},
+ ARRAY_AGG(DISTINCT s.rev_id
+ ORDER BY s.rev_id) FILTER ( WHERE s.rev_id IS NOT NULL AND s.platform='web') AS {meta_type.REVID},
+ ARRAY_AGG(DISTINCT p.referrer
+ ORDER BY p.referrer)
+ FILTER ( WHERE p.referrer != '' ) AS {meta_type.REFERRER},
+
+ ARRAY_AGG(DISTINCT s.user_os
+ ORDER BY s.user_os) FILTER ( WHERE s.user_os IS NOT NULL AND s.platform='ios' ) AS {meta_type.USEROS_IOS},
+ ARRAY_AGG(DISTINCT s.user_device
+ ORDER BY s.user_device)
+ FILTER ( WHERE s.user_device IS NOT NULL AND s.user_device != '' AND s.platform='ios') AS {meta_type.USERDEVICE},
+ ARRAY_AGG(DISTINCT s.user_country
+ ORDER BY s.user_country)
+ FILTER ( WHERE s.user_country IS NOT NULL AND s.platform='ios')::text[] AS {meta_type.USERCOUNTRY_IOS},
+ ARRAY_AGG(DISTINCT s.user_id
+ ORDER BY s.user_id) FILTER ( WHERE s.user_id IS NOT NULL AND s.user_id != 'none' AND s.user_id != '' AND s.platform='ios') AS {meta_type.USERID_IOS},
+ ARRAY_AGG(DISTINCT s.user_anonymous_id
+ ORDER BY s.user_anonymous_id) FILTER ( WHERE s.user_anonymous_id IS NOT NULL AND s.user_anonymous_id != 'none' AND s.user_anonymous_id != '' AND s.platform='ios') AS {meta_type.USERANONYMOUSID_IOS},
+ ARRAY_AGG(DISTINCT s.rev_id
+ ORDER BY s.rev_id) FILTER ( WHERE s.rev_id IS NOT NULL AND s.platform='ios') AS {meta_type.REVID_IOS}
+ FROM public.sessions AS s
+ LEFT JOIN events.pages AS p USING (session_id)
+ WHERE s.project_id = %(site_id)s;""",
+ {"site_id": project_id}
+ )
+ )
+
+ row = cur.fetchone()
+ for k in row.keys():
+ if row[k] is None:
+ row[k] = []
+ elif len(row[k]) > 500:
+ row[k] = row[k][:500]
+ return helper.dict_to_CAPITAL_keys(row)
+
+
+def get_top_key_values(project_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""\
+ SELECT {",".join([f"ARRAY((SELECT value FROM public.autocomplete WHERE project_id = %(site_id)s AND type='{k}' GROUP BY value ORDER BY COUNT(*) DESC LIMIT %(limit)s)) AS {k}" for k in SUPPORTED_TYPES.keys()])};""",
+ {"site_id": project_id, "limit": 5}
+ )
+ )
+
+ row = cur.fetchone()
+ return helper.dict_to_CAPITAL_keys(row)
+
+
+def __generic_query(typename):
+ return f"""\
+ SELECT value, type
+ FROM ((SELECT value, type
+ FROM public.autocomplete
+ WHERE
+ project_id = %(project_id)s
+ AND type ='{typename}'
+ AND value ILIKE %(svalue)s
+ ORDER BY value
+ LIMIT 5)
+ UNION
+ (SELECT value, type
+ FROM public.autocomplete
+ WHERE
+ project_id = %(project_id)s
+ AND type ='{typename}'
+ AND value ILIKE %(value)s
+ ORDER BY value
+ LIMIT 5)) AS met"""
+
+
+def __generic_autocomplete(typename):
+ def f(project_id, text):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(__generic_query(typename),
+ {"project_id": project_id, "value": helper.string_to_sql_like(text),
+ "svalue": helper.string_to_sql_like("^" + text)})
+
+ cur.execute(query)
+ rows = cur.fetchall()
+ return rows
+
+ return f
+
+
+class meta_type:
+ USEROS = "USEROS"
+ USERBROWSER = "USERBROWSER"
+ USERDEVICE = "USERDEVICE"
+ USERCOUNTRY = "USERCOUNTRY"
+ USERID = "USERID"
+ USERANONYMOUSID = "USERANONYMOUSID"
+ REFERRER = "REFERRER"
+ REVID = "REVID"
+ # IOS
+ USEROS_IOS = "USEROS_IOS"
+ USERDEVICE_IOS = "USERDEVICE_IOS"
+ USERCOUNTRY_IOS = "USERCOUNTRY_IOS"
+ USERID_IOS = "USERID_IOS"
+ USERANONYMOUSID_IOS = "USERANONYMOUSID_IOS"
+ REVID_IOS = "REVID_IOS"
+
+
+SUPPORTED_TYPES = {
+ meta_type.USEROS: SupportedFilter(get=__generic_autocomplete(typename=meta_type.USEROS),
+ query=__generic_query(typename=meta_type.USEROS),
+ value_limit=0,
+ starts_with="",
+ starts_limit=0,
+ ignore_if_starts_with=["/"]),
+ meta_type.USERBROWSER: SupportedFilter(get=__generic_autocomplete(typename=meta_type.USERBROWSER),
+ query=__generic_query(typename=meta_type.USERBROWSER),
+ value_limit=0,
+ starts_with="",
+ starts_limit=0,
+ ignore_if_starts_with=["/"]),
+ meta_type.USERDEVICE: SupportedFilter(get=__generic_autocomplete(typename=meta_type.USERDEVICE),
+ query=__generic_query(typename=meta_type.USERDEVICE),
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=["/"]),
+ meta_type.USERCOUNTRY: SupportedFilter(get=__generic_autocomplete(typename=meta_type.USERCOUNTRY),
+ query=__generic_query(typename=meta_type.USERCOUNTRY),
+ value_limit=2,
+ starts_with="",
+ starts_limit=2,
+ ignore_if_starts_with=["/"]),
+ meta_type.USERID: SupportedFilter(get=__generic_autocomplete(typename=meta_type.USERID),
+ query=__generic_query(typename=meta_type.USERID),
+ value_limit=2,
+ starts_with="",
+ starts_limit=2,
+ ignore_if_starts_with=["/"]),
+ meta_type.USERANONYMOUSID: SupportedFilter(get=__generic_autocomplete(typename=meta_type.USERANONYMOUSID),
+ query=__generic_query(typename=meta_type.USERANONYMOUSID),
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=["/"]),
+ meta_type.REVID: SupportedFilter(get=__generic_autocomplete(typename=meta_type.REVID),
+ query=__generic_query(typename=meta_type.REVID),
+ value_limit=0,
+ starts_with="",
+ starts_limit=0,
+ ignore_if_starts_with=["/"]),
+ meta_type.REFERRER: SupportedFilter(get=__generic_autocomplete(typename=meta_type.REFERRER),
+ query=__generic_query(typename=meta_type.REFERRER),
+ value_limit=5,
+ starts_with="/",
+ starts_limit=5,
+ ignore_if_starts_with=[]),
+ # IOS
+ meta_type.USEROS_IOS: SupportedFilter(get=__generic_autocomplete(typename=meta_type.USEROS_IOS),
+ query=__generic_query(typename=meta_type.USEROS_IOS),
+ value_limit=0,
+ starts_with="",
+ starts_limit=0,
+ ignore_if_starts_with=["/"]),
+ meta_type.USERDEVICE_IOS: SupportedFilter(get=__generic_autocomplete(typename=meta_type.USERDEVICE_IOS),
+ query=__generic_query(typename=meta_type.USERDEVICE_IOS),
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=["/"]),
+ meta_type.USERCOUNTRY_IOS: SupportedFilter(get=__generic_autocomplete(typename=meta_type.USERCOUNTRY_IOS),
+ query=__generic_query(typename=meta_type.USERCOUNTRY_IOS),
+ value_limit=2,
+ starts_with="",
+ starts_limit=2,
+ ignore_if_starts_with=["/"]),
+ meta_type.USERID_IOS: SupportedFilter(get=__generic_autocomplete(typename=meta_type.USERID_IOS),
+ query=__generic_query(typename=meta_type.USERID_IOS),
+ value_limit=2,
+ starts_with="",
+ starts_limit=2,
+ ignore_if_starts_with=["/"]),
+ meta_type.USERANONYMOUSID_IOS: SupportedFilter(get=__generic_autocomplete(typename=meta_type.USERANONYMOUSID_IOS),
+ query=__generic_query(typename=meta_type.USERANONYMOUSID_IOS),
+ value_limit=3,
+ starts_with="",
+ starts_limit=3,
+ ignore_if_starts_with=["/"]),
+ meta_type.REVID_IOS: SupportedFilter(get=__generic_autocomplete(typename=meta_type.REVID_IOS),
+ query=__generic_query(typename=meta_type.REVID_IOS),
+ value_limit=0,
+ starts_with="",
+ starts_limit=0,
+ ignore_if_starts_with=["/"]),
+
+}
+
+
+def search(text, meta_type, project_id):
+ rows = []
+ if meta_type.upper() not in list(SUPPORTED_TYPES.keys()):
+ return {"errors": ["unsupported type"]}
+ rows += SUPPORTED_TYPES[meta_type.upper()].get(project_id=project_id, text=text)
+ if meta_type.upper() + "_IOS" in list(SUPPORTED_TYPES.keys()):
+ rows += SUPPORTED_TYPES[meta_type.upper() + "_IOS"].get(project_id=project_id, text=text)
+ return {"data": rows}
diff --git a/ee/api/chalicelib/core/sessions_mobs.py b/ee/api/chalicelib/core/sessions_mobs.py
new file mode 100644
index 000000000..b96662c67
--- /dev/null
+++ b/ee/api/chalicelib/core/sessions_mobs.py
@@ -0,0 +1,26 @@
+from chalicelib.utils import helper
+from chalicelib.utils.helper import environ
+
+import boto3
+
+
+def get_web(sessionId):
+ return boto3.client('s3', region_name=environ["sessions_region"]).generate_presigned_url(
+ 'get_object',
+ Params={
+ 'Bucket': environ["sessions_bucket"],
+ 'Key': sessionId
+ },
+ ExpiresIn=100000
+ )
+
+
+def get_ios(sessionId):
+ return boto3.client('s3', region_name=environ["ios_region"]).generate_presigned_url(
+ 'get_object',
+ Params={
+ 'Bucket': environ["ios_bucket"],
+ 'Key': sessionId
+ },
+ ExpiresIn=100000
+ )
diff --git a/ee/api/chalicelib/core/significance.py b/ee/api/chalicelib/core/significance.py
new file mode 100644
index 000000000..8bcda04a7
--- /dev/null
+++ b/ee/api/chalicelib/core/significance.py
@@ -0,0 +1,627 @@
+__author__ = "AZNAUROV David"
+__maintainer__ = "KRAIEM Taha Yassine"
+
+from chalicelib.core import events, sessions_metas, metadata, sessions
+from chalicelib.utils import dev
+
+"""
+todo: remove LIMIT from the query
+"""
+
+from typing import List
+import math
+import warnings
+from collections import defaultdict
+
+from psycopg2.extras import RealDictRow
+from chalicelib.utils import pg_client, helper
+
+SIGNIFICANCE_THRSH = 0.4
+
+T_VALUES = {1: 12.706, 2: 4.303, 3: 3.182, 4: 2.776, 5: 2.571, 6: 2.447, 7: 2.365, 8: 2.306, 9: 2.262, 10: 2.228,
+ 11: 2.201, 12: 2.179, 13: 2.160, 14: 2.145, 15: 2.13, 16: 2.120, 17: 2.110, 18: 2.101, 19: 2.093, 20: 2.086,
+ 21: 2.080, 22: 2.074, 23: 2.069, 25: 2.064, 26: 2.060, 27: 2.056, 28: 2.052, 29: 2.045, 30: 2.042}
+
+
+@dev.timed
+def get_stages_and_events(filter_d, project_id) -> List[RealDictRow]:
+ """
+ Add minimal timestamp
+ :param filter_d: dict contains events&filters&...
+ :return:
+ """
+ stages = filter_d["events"]
+ filters = filter_d.get("filters", [])
+ filter_issues = filter_d.get("issueTypes")
+ if filter_issues is None or len(filter_issues) == 0:
+ filter_issues = []
+ stage_constraints = ["main.timestamp <= %(endTimestamp)s"]
+ first_stage_extra_constraints = ["s.project_id=%(project_id)s", "s.start_ts >= %(startTimestamp)s",
+ "s.start_ts <= %(endTimestamp)s"]
+ extra_from = ""
+ n_stages_query = []
+ values = {}
+ if len(filters) > 0:
+ meta_keys = metadata.get(project_id=project_id)
+ meta_keys = {m["key"]: m["index"] for m in meta_keys}
+ for i, f in enumerate(filters):
+ if not isinstance(f.get("value"), list):
+ if isinstance(f.get("value"), tuple):
+ f["value"] = list(f.get("value"))
+ else:
+ f["value"] = [f.get("value")]
+ if len(f["value"]) == 0 or f["value"][0] is None:
+ continue
+ filter_type = f["type"].upper()
+ values[f"f_value_{i}"] = sessions.__get_sql_value_multiple(f["value"])
+ if filter_type == sessions_metas.meta_type.USERBROWSER:
+ op = sessions.__get_sql_operator_multiple(f["operator"])
+ first_stage_extra_constraints.append(f's.user_browser {op} %({f"f_value_{i}"})s')
+
+ elif filter_type in [sessions_metas.meta_type.USEROS, sessions_metas.meta_type.USEROS_IOS]:
+ op = sessions.__get_sql_operator_multiple(f["operator"])
+ first_stage_extra_constraints.append(f's.user_os {op} %({f"f_value_{i}"})s')
+
+ elif filter_type in [sessions_metas.meta_type.USERDEVICE, sessions_metas.meta_type.USERDEVICE_IOS]:
+ op = sessions.__get_sql_operator_multiple(f["operator"])
+ first_stage_extra_constraints.append(f's.user_device {op} %({f"f_value_{i}"})s')
+
+ elif filter_type in [sessions_metas.meta_type.USERCOUNTRY, sessions_metas.meta_type.USERCOUNTRY_IOS]:
+ op = sessions.__get_sql_operator_multiple(f["operator"])
+ first_stage_extra_constraints.append(f's.user_country {op} %({f"f_value_{i}"})s')
+ elif filter_type == "duration".upper():
+ if len(f["value"]) > 0 and f["value"][0] is not None:
+ first_stage_extra_constraints.append(f's.duration >= %({f"f_value_{i}"})s')
+ values[f"f_value_{i}"] = f["value"][0]
+ if len(f["value"]) > 1 and f["value"][1] is not None and f["value"][1] > 0:
+ first_stage_extra_constraints.append('s.duration <= %({f"f_value_{i}"})s')
+ values[f"f_value_{i}"] = f["value"][1]
+ elif filter_type == sessions_metas.meta_type.REFERRER:
+ # events_query_part = events_query_part + f"INNER JOIN events.pages AS p USING(session_id)"
+ extra_from += f"INNER JOIN {events.event_type.LOCATION.table} AS p USING(session_id)"
+ op = sessions.__get_sql_operator_multiple(f["operator"])
+ first_stage_extra_constraints.append(f"p.base_referrer {op} %(referrer)s")
+ elif filter_type == events.event_type.METADATA.ui_type:
+ op = sessions.__get_sql_operator(f["operator"])
+ if f.get("key") in meta_keys.keys():
+ first_stage_extra_constraints.append(
+ f's.{metadata.index_to_colname(meta_keys[f["key"]])} {op} %({f"f_value_{i}"})s')
+ values[f"f_value_{i}"] = helper.string_to_sql_like_with_op(f["value"][0], op)
+ elif filter_type in [sessions_metas.meta_type.USERID, sessions_metas.meta_type.USERID_IOS]:
+ op = sessions.__get_sql_operator(f["operator"])
+ first_stage_extra_constraints.append(f's.user_id {op} %({f"f_value_{i}"})s')
+ values[f"f_value_{i}"] = helper.string_to_sql_like_with_op(f["value"][0], op)
+ elif filter_type in [sessions_metas.meta_type.USERANONYMOUSID,
+ sessions_metas.meta_type.USERANONYMOUSID_IOS]:
+ op = sessions.__get_sql_operator(f["operator"])
+ first_stage_extra_constraints.append(f's.user_anonymous_id {op} %({f"f_value_{i}"})s')
+ values[f"f_value_{i}"] = helper.string_to_sql_like_with_op(f["value"][0], op)
+ elif filter_type in [sessions_metas.meta_type.REVID, sessions_metas.meta_type.REVID_IOS]:
+ op = sessions.__get_sql_operator(f["operator"])
+ first_stage_extra_constraints.append(f's.rev_id {op} %({f"f_value_{i}"})s')
+ values[f"f_value_{i}"] = helper.string_to_sql_like_with_op(f["value"][0], op)
+
+ for i, s in enumerate(stages):
+ if i == 0:
+ extra_from = ["INNER JOIN public.sessions AS s USING (session_id)"]
+ else:
+ extra_from = []
+ if s.get("operator") is None:
+ s["operator"] = "is"
+ op = sessions.__get_sql_operator(s["operator"])
+ event_type = s["type"].upper()
+ next_label = s["value"]
+ if event_type == events.event_type.CLICK.ui_type:
+ next_table = events.event_type.CLICK.table
+ next_col_name = events.event_type.CLICK.column
+ elif event_type == events.event_type.INPUT.ui_type:
+ next_table = events.event_type.INPUT.table
+ next_col_name = events.event_type.INPUT.column
+ elif event_type == events.event_type.LOCATION.ui_type:
+ next_table = events.event_type.LOCATION.table
+ next_col_name = events.event_type.LOCATION.column
+ elif event_type == events.event_type.CUSTOM.ui_type:
+ next_table = events.event_type.CUSTOM.table
+ next_col_name = events.event_type.CUSTOM.column
+ # IOS --------------
+ elif event_type == events.event_type.CLICK_IOS.ui_type:
+ next_table = events.event_type.CLICK_IOS.table
+ next_col_name = events.event_type.CLICK_IOS.column
+ elif event_type == events.event_type.INPUT_IOS.ui_type:
+ next_table = events.event_type.INPUT_IOS.table
+ next_col_name = events.event_type.INPUT_IOS.column
+ elif event_type == events.event_type.VIEW_IOS.ui_type:
+ next_table = events.event_type.VIEW_IOS.table
+ next_col_name = events.event_type.VIEW_IOS.column
+ elif event_type == events.event_type.CUSTOM_IOS.ui_type:
+ next_table = events.event_type.CUSTOM_IOS.table
+ next_col_name = events.event_type.CUSTOM_IOS.column
+ else:
+ print("=================UNDEFINED")
+ continue
+
+ values[f"value{i + 1}"] = helper.string_to_sql_like_with_op(next_label, op)
+ if sessions.__is_negation_operator(op) and i > 0:
+ op = sessions.__reverse_sql_operator(op)
+ main_condition = "left_not.session_id ISNULL"
+ extra_from.append(f"""LEFT JOIN LATERAL (SELECT session_id
+ FROM {next_table} AS s_main
+ WHERE s_main.{next_col_name} {op} %(value{i + 1})s
+ AND s_main.timestamp >= T{i}.stage{i}_timestamp
+ AND s_main.session_id = T1.session_id) AS left_not ON (TRUE)""")
+ else:
+ main_condition = f"""main.{next_col_name} {op} %(value{i + 1})s"""
+ n_stages_query.append(f"""
+ (SELECT main.session_id,
+ {"MIN(main.timestamp)" if i + 1 < len(stages) else "MAX(main.timestamp)"} AS stage{i + 1}_timestamp,
+ '{event_type}' AS type,
+ '{s["operator"]}' AS operator
+ FROM {next_table} AS main {" ".join(extra_from)}
+ WHERE main.timestamp >= {f"T{i}.stage{i}_timestamp" if i > 0 else "%(startTimestamp)s"}
+ {f"AND main.session_id=T1.session_id" if i > 0 else ""}
+ AND {main_condition}
+ {(" AND " + " AND ".join(stage_constraints)) if len(stage_constraints) > 0 else ""}
+ {(" AND " + " AND ".join(first_stage_extra_constraints)) if len(first_stage_extra_constraints) > 0 and i == 0 else ""}
+ GROUP BY main.session_id)
+ AS T{i + 1} {"USING (session_id)" if i > 0 else ""}
+ """)
+ if len(n_stages_query) == 0:
+ return []
+ n_stages_query = " LEFT JOIN LATERAL ".join(n_stages_query)
+ n_stages_query += ") AS stages_t"
+
+ n_stages_query = f"""
+ SELECT stages_and_issues_t.*,sessions.session_id, sessions.user_uuid FROM (
+ SELECT * FROM (
+ SELECT * FROM
+ {n_stages_query}
+ LEFT JOIN LATERAL
+ (
+ SELECT * FROM
+ (SELECT ISE.session_id,
+ ISS.type as issue_type,
+ ISE.timestamp AS issue_timestamp,
+ ISS.context_string as issue_context,
+ ISS.issue_id as issue_id
+ FROM events_common.issues AS ISE INNER JOIN issues AS ISS USING (issue_id)
+ WHERE ISE.timestamp >= stages_t.stage1_timestamp
+ AND ISE.timestamp <= stages_t.stage{len(stages)}_timestamp
+ AND ISS.project_id=%(project_id)s
+ {"AND ISS.type IN %(issueTypes)s" if len(filter_issues) > 0 else ""}) AS base_t
+ ) AS issues_t
+ USING (session_id)) AS stages_and_issues_t
+ inner join sessions USING(session_id);
+ """
+
+ # LIMIT 10000
+ params = {"project_id": project_id, "startTimestamp": filter_d["startDate"], "endTimestamp": filter_d["endDate"],
+ "issueTypes": tuple(filter_issues), **values}
+ with pg_client.PostgresClient() as cur:
+ # print("---------------------------------------------------")
+ # print(cur.mogrify(n_stages_query, params))
+ # print("---------------------------------------------------")
+ cur.execute(cur.mogrify(n_stages_query, params))
+ rows = cur.fetchall()
+ return rows
+
+
+def pearson_corr(x: list, y: list):
+ n = len(x)
+ if n != len(y):
+ raise ValueError(f'x and y must have the same length. Got {len(x)} and {len(y)} instead')
+
+ if n < 2:
+ warnings.warn(f'x and y must have length at least 2. Got {n} instead')
+ return None, None, False
+
+ # If an input is constant, the correlation coefficient is not defined.
+ if all(t == x[0] for t in x) or all(t == y[0] for t in y):
+ warnings.warn("An input array is constant; the correlation coefficent is not defined.")
+ return None, None, False
+
+ if n == 2:
+ return math.copysign(1, x[1] - x[0]) * math.copysign(1, y[1] - y[0]), 1.0
+
+ xmean = sum(x) / len(x)
+ ymean = sum(y) / len(y)
+
+ xm = [el - xmean for el in x]
+ ym = [el - ymean for el in y]
+
+ normxm = math.sqrt((sum([xm[i] * xm[i] for i in range(len(xm))])))
+ normym = math.sqrt((sum([ym[i] * ym[i] for i in range(len(ym))])))
+
+ threshold = 1e-8
+ if normxm < threshold * abs(xmean) or normym < threshold * abs(ymean):
+ # If all the values in x (likewise y) are very close to the mean,
+ # the loss of precision that occurs in the subtraction xm = x - xmean
+ # might result in large errors in r.
+ warnings.warn("An input array is constant; the correlation coefficent is not defined.")
+
+ r = sum(
+ i[0] * i[1] for i in zip([xm[i] / normxm for i in range(len(xm))], [ym[i] / normym for i in range(len(ym))]))
+
+ # Presumably, if abs(r) > 1, then it is only some small artifact of floating point arithmetic.
+ # However, if r < 0, we don't care, as our problem is to find only positive correlations
+ r = max(min(r, 1.0), 0.0)
+
+ # approximated confidence
+ if n < 31:
+ t_c = T_VALUES[n]
+ elif n < 50:
+ t_c = 2.02
+ else:
+ t_c = 2
+ if r >= 0.999:
+ confidence = 1
+ else:
+ confidence = r * math.sqrt(n - 2) / math.sqrt(1 - r ** 2)
+
+ if confidence > SIGNIFICANCE_THRSH:
+ return r, confidence, True
+ else:
+ return r, confidence, False
+
+
+@dev.timed
+def get_transitions_and_issues_of_each_type(rows: List[RealDictRow], all_issues_with_context, first_stage, last_stage):
+ """
+ Returns two lists with binary values 0/1:
+
+ transitions ::: if transited from the first stage to the last - 1
+ else - 0
+ errors ::: a dictionary where the keys are all unique issues (currently context-wise)
+ the values are lists
+ if an issue happened between the first stage to the last - 1
+ else - 0
+
+ For a small task of calculating a total drop due to issues,
+ we need to disregard the issue type when creating the `errors`-like array.
+ The `all_errors` array can be obtained by logical OR statement applied to all errors by issue
+ The `transitions` array stays the same
+ """
+ transitions = []
+ n_sess_affected = 0
+ errors = {}
+ for issue in all_issues_with_context:
+ split = issue.split('__^__')
+ errors[issue] = {
+ "errors": [],
+ "issue_type": split[0],
+ "context": split[1]}
+
+ for row in rows:
+ t = 0
+ first_ts = row[f'stage{first_stage}_timestamp']
+ last_ts = row[f'stage{last_stage}_timestamp']
+ if first_ts is None:
+ continue
+ elif first_ts is not None and last_ts is not None:
+ t = 1
+ transitions.append(t)
+
+ ic_present = False
+ for issue_type_with_context in errors:
+ ic = 0
+ issue_type = errors[issue_type_with_context]["issue_type"]
+ context = errors[issue_type_with_context]["context"]
+ if row['issue_type'] is not None:
+ if last_ts is None or (first_ts < row['issue_timestamp'] < last_ts):
+ context_in_row = row['issue_context'] if row['issue_context'] is not None else ''
+ if issue_type == row['issue_type'] and context == context_in_row:
+ ic = 1
+ ic_present = True
+ errors[issue_type_with_context]["errors"].append(ic)
+
+ if ic_present and t:
+ n_sess_affected += 1
+
+ # def tuple_or(t: tuple):
+ # x = 0
+ # for el in t:
+ # x |= el
+ # return x
+ def tuple_or(t: tuple):
+ for el in t:
+ if el > 0:
+ return 1
+ return 0
+
+ errors = {key: errors[key]["errors"] for key in errors}
+ all_errors = [tuple_or(t) for t in zip(*errors.values())]
+
+ return transitions, errors, all_errors, n_sess_affected
+
+
+@dev.timed
+def get_affected_users_for_all_issues(rows, first_stage, last_stage):
+ """
+
+ :param rows:
+ :param first_stage:
+ :param last_stage:
+ :return:
+ """
+ affected_users = defaultdict(lambda: set())
+ affected_sessions = defaultdict(lambda: set())
+ contexts = defaultdict(lambda: None)
+ n_affected_users_dict = defaultdict(lambda: None)
+ n_affected_sessions_dict = defaultdict(lambda: None)
+ all_issues_with_context = set()
+ n_issues_dict = defaultdict(lambda: 0)
+ issues_by_session = defaultdict(lambda: 0)
+
+ for row in rows:
+
+ # check that the session has reached the first stage of subfunnel:
+ if row[f'stage{first_stage}_timestamp'] is None:
+ continue
+
+ iss = row['issue_type']
+ iss_ts = row['issue_timestamp']
+
+ # check that the issue exists and belongs to subfunnel:
+ if iss is not None and (row[f'stage{last_stage}_timestamp'] is None or
+ (row[f'stage{first_stage}_timestamp'] < iss_ts < row[f'stage{last_stage}_timestamp'])):
+ context_string = row['issue_context'] if row['issue_context'] is not None else ''
+ issue_with_context = iss + '__^__' + context_string
+ contexts[issue_with_context] = {"context": context_string, "id": row["issue_id"]}
+ all_issues_with_context.add(issue_with_context)
+ n_issues_dict[issue_with_context] += 1
+ if row['user_uuid'] is not None:
+ affected_users[issue_with_context].add(row['user_uuid'])
+
+ affected_sessions[issue_with_context].add(row['session_id'])
+ issues_by_session[row[f'session_id']] += 1
+
+ if len(affected_users) > 0:
+ n_affected_users_dict.update({
+ iss: len(affected_users[iss]) for iss in affected_users
+ })
+ if len(affected_sessions) > 0:
+ n_affected_sessions_dict.update({
+ iss: len(affected_sessions[iss]) for iss in affected_sessions
+ })
+ return all_issues_with_context, n_issues_dict, n_affected_users_dict, n_affected_sessions_dict, contexts
+
+
+@dev.timed
+def count_sessions(rows, n_stages):
+ session_counts = {i: set() for i in range(1, n_stages + 1)}
+ for ind, row in enumerate(rows):
+ for i in range(1, n_stages + 1):
+ if row[f"stage{i}_timestamp"] is not None:
+ session_counts[i].add(row[f"session_id"])
+ session_counts = {i: len(session_counts[i]) for i in session_counts}
+ return session_counts
+
+
+def count_users(rows, n_stages):
+ users_in_stages = defaultdict(lambda: set())
+
+ for ind, row in enumerate(rows):
+ for i in range(1, n_stages + 1):
+ if row[f"stage{i}_timestamp"] is not None:
+ users_in_stages[i].add(row["user_uuid"])
+
+ users_count = {i: len(users_in_stages[i]) for i in range(1, n_stages + 1)}
+
+ return users_count
+
+
+def get_stages(stages, rows):
+ n_stages = len(stages)
+ session_counts = count_sessions(rows, n_stages)
+ users_counts = count_users(rows, n_stages)
+
+ stages_list = []
+ for i, stage in enumerate(stages):
+
+ drop = None
+ if i != 0:
+ if session_counts[i] == 0:
+ drop = 0
+ elif session_counts[i] > 0:
+ drop = int(100 * (session_counts[i] - session_counts[i + 1]) / session_counts[i])
+
+ stages_list.append(
+ {"value": stage["value"],
+ "type": stage["type"],
+ "operator": stage["operator"],
+ "sessionsCount": session_counts[i + 1],
+ "drop_pct": drop,
+ "usersCount": users_counts[i + 1],
+ "dropDueToIssues": 0
+ }
+ )
+ return stages_list
+
+
+@dev.timed
+def get_issues(stages, rows, first_stage=None, last_stage=None, drop_only=False):
+ """
+
+ :param stages:
+ :param rows:
+ :param first_stage: If it's a part of the initial funnel, provide a number of the first stage (starting from 1)
+ :param last_stage: If it's a part of the initial funnel, provide a number of the last stage (starting from 1)
+ :return:
+ """
+
+ n_stages = len(stages)
+
+ if first_stage is None:
+ first_stage = 1
+ if last_stage is None:
+ last_stage = n_stages
+ if last_stage > n_stages:
+ print("The number of the last stage provided is greater than the number of stages. Using n_stages instead")
+ last_stage = n_stages
+
+ n_critical_issues = 0
+ issues_dict = dict({"significant": [],
+ "insignificant": []})
+ session_counts = count_sessions(rows, n_stages)
+ drop = session_counts[first_stage] - session_counts[last_stage]
+
+ all_issues_with_context, n_issues_dict, affected_users_dict, affected_sessions, contexts = get_affected_users_for_all_issues(
+ rows, first_stage, last_stage)
+ transitions, errors, all_errors, n_sess_affected = get_transitions_and_issues_of_each_type(rows,
+ all_issues_with_context,
+ first_stage, last_stage)
+
+ print("len(transitions) =", len(transitions))
+
+ if any(all_errors):
+ total_drop_corr, conf, is_sign = pearson_corr(transitions, all_errors)
+ if total_drop_corr is not None and drop is not None:
+ total_drop_due_to_issues = int(total_drop_corr * n_sess_affected)
+ else:
+ total_drop_due_to_issues = 0
+ else:
+ total_drop_due_to_issues = 0
+
+ if drop_only:
+ return total_drop_due_to_issues
+ for issue in all_issues_with_context:
+
+ if not any(errors[issue]):
+ continue
+ r, confidence, is_sign = pearson_corr(transitions, errors[issue])
+
+ if r is not None and drop is not None and is_sign:
+ lost_conversions = int(r * affected_sessions[issue])
+ else:
+ lost_conversions = None
+ if r is None:
+ r = 0
+ split = issue.split('__^__')
+ issues_dict['significant' if is_sign else 'insignificant'].append({
+ "type": split[0],
+ "title": get_issue_title(split[0]),
+ "affected_sessions": affected_sessions[issue],
+ "unaffected_sessions": session_counts[1] - affected_sessions[issue],
+ "lost_conversions": lost_conversions,
+ "affected_users": affected_users_dict[issue],
+ "conversion_impact": round(r * 100),
+ "context_string": contexts[issue]["context"],
+ "issue_id": contexts[issue]["id"]
+ })
+
+ if is_sign:
+ n_critical_issues += n_issues_dict[issue]
+
+ return n_critical_issues, issues_dict, total_drop_due_to_issues
+
+
+@dev.timed
+def get_top_insights(filter_d, project_id):
+ output = []
+ stages = filter_d["events"]
+ # TODO: handle 1 stage alone
+ if len(stages) == 0:
+ print("no stages found")
+ return output, 0
+ elif len(stages) == 1:
+ # TODO: count sessions, and users for single stage
+ output = [{
+ "type": stages[0]["type"],
+ "value": stages[0]["value"],
+ "dropPercentage": None,
+ "operator": stages[0]["operator"],
+ "sessionsCount": 0,
+ "dropPct": 0,
+ "usersCount": 0,
+ "dropDueToIssues": 0
+
+ }]
+ counts = sessions.search2_pg(data=filter_d, project_id=project_id, user_id=None, count_only=True)
+ output[0]["sessionsCount"] = counts["countSessions"]
+ output[0]["usersCount"] = counts["countUsers"]
+ return output, 0
+ # The result of the multi-stage query
+ rows = get_stages_and_events(filter_d=filter_d, project_id=project_id)
+ if len(rows) == 0:
+ return get_stages(stages, []), 0
+ # Obtain the first part of the output
+ stages_list = get_stages(stages, rows)
+ # Obtain the second part of the output
+ total_drop_due_to_issues = get_issues(stages, rows, first_stage=filter_d.get("firstStage"),
+ last_stage=filter_d.get("lastStage"), drop_only=True)
+ return stages_list, total_drop_due_to_issues
+
+
+@dev.timed
+def get_issues_list(filter_d, project_id, first_stage=None, last_stage=None):
+ output = dict({'critical_issues_count': 0})
+ stages = filter_d["events"]
+ # The result of the multi-stage query
+ rows = get_stages_and_events(filter_d=filter_d, project_id=project_id)
+ # print(json.dumps(rows[0],indent=4))
+ # return
+ if len(rows) == 0:
+ return output
+ # Obtain the second part of the output
+ n_critical_issues, issues_dict, total_drop_due_to_issues = get_issues(stages, rows, first_stage=first_stage,
+ last_stage=last_stage)
+ output['total_drop_due_to_issues'] = total_drop_due_to_issues
+ # output['critical_issues_count'] = n_critical_issues
+ output = {**output, **issues_dict}
+ return output
+
+
+def get_overview(filter_d, project_id, first_stage=None, last_stage=None):
+ output = dict()
+ stages = filter_d["events"]
+ # TODO: handle 1 stage alone
+ if len(stages) == 0:
+ return {"stages": [],
+ "criticalIssuesCount": 0}
+ elif len(stages) == 1:
+ # TODO: count sessions, and users for single stage
+ output["stages"] = [{
+ "type": stages[0]["type"],
+ "value": stages[0]["value"],
+ "sessionsCount": None,
+ "dropPercentage": None,
+ "usersCount": None
+ }]
+ return output
+ # The result of the multi-stage query
+ rows = get_stages_and_events(filter_d=filter_d, project_id=project_id)
+ if len(rows) == 0:
+ return output
+ # Obtain the first part of the output
+ stages_list = get_stages(stages, rows)
+
+ # Obtain the second part of the output
+ n_critical_issues, issues_dict, total_drop_due_to_issues = get_issues(stages, rows, first_stage=first_stage,
+ last_stage=last_stage)
+
+ output['stages'] = stages_list
+ output['criticalIssuesCount'] = n_critical_issues
+ return output
+
+
+def get_issue_title(issue_type):
+ return {'click_rage': "Click Rage",
+ 'dead_click': "Dead Click",
+ 'excessive_scrolling': "Excessive Scrolling",
+ 'bad_request': "Bad Request",
+ 'missing_resource': "Missing Image",
+ 'memory': "High Memory Usage",
+ 'cpu': "High CPU",
+ 'slow_resource': "Slow Resource",
+ 'slow_page_load': "Slow Page Performance",
+ 'crash': "Crash",
+ 'ml_cpu': "High CPU",
+ 'ml_memory': "High Memory Usage",
+ 'ml_dead_click': "Dead Click",
+ 'ml_click_rage': "Click Rage",
+ 'ml_mouse_thrashing': "Mouse Thrashing",
+ 'ml_excessive_scrolling': "Excessive Scrolling",
+ 'ml_slow_resources': "Slow Resource",
+ 'custom': "Custom Event",
+ 'js_exception': "Error",
+ 'custom_event_error': "Custom Error",
+ 'js_error': "Error"}.get(issue_type, issue_type)
diff --git a/ee/api/chalicelib/core/slack.py b/ee/api/chalicelib/core/slack.py
new file mode 100644
index 000000000..411be0567
--- /dev/null
+++ b/ee/api/chalicelib/core/slack.py
@@ -0,0 +1,32 @@
+from datetime import datetime
+from chalicelib.utils.helper import environ
+
+from chalicelib.core.collaboration_slack import Slack
+
+
+def send(notification, destination):
+ if notification is None:
+ return
+ return Slack.send_text(tenant_id=notification["tenantId"],
+ webhook_id=destination,
+ text=notification["description"] \
+ + f"\n<{environ['SITE_URL']}{notification['buttonUrl']}|{notification['buttonText']}>",
+ title=notification["title"],
+ title_link=notification["buttonUrl"], )
+
+
+def send_batch(notifications_list):
+ if notifications_list is None or len(notifications_list) == 0:
+ return
+ webhookId_map = {}
+ for n in notifications_list:
+ if n.get("destination") not in webhookId_map:
+ webhookId_map[n.get("destination")] = {"tenantId": n["notification"]["tenantId"], "batch": []}
+ webhookId_map[n.get("destination")]["batch"].append({"text": n["notification"]["description"] \
+ + f"\n<{environ['SITE_URL']}{n['notification']['buttonUrl']}|{n['notification']['buttonText']}>",
+ "title": n["notification"]["title"],
+ "title_link": n["notification"]["buttonUrl"],
+ "ts": datetime.now().timestamp()})
+ for batch in webhookId_map.keys():
+ Slack.send_batch(tenant_id=webhookId_map[batch]["tenantId"], webhook_id=batch,
+ attachments=webhookId_map[batch]["batch"])
diff --git a/ee/api/chalicelib/core/socket_ios.py b/ee/api/chalicelib/core/socket_ios.py
new file mode 100644
index 000000000..d925797fe
--- /dev/null
+++ b/ee/api/chalicelib/core/socket_ios.py
@@ -0,0 +1,22 @@
+import requests
+from chalicelib.utils.helper import environ
+from chalicelib.core import projects
+
+
+def start_replay(project_id, session_id, device, os_version, mob_url):
+ r = requests.post(environ["IOS_MIDDLEWARE"] + "/replay", json={
+ "projectId": project_id,
+ "projectKey": projects.get_project_key(project_id),
+ "sessionId": session_id,
+ "device": device,
+ "osVersion": os_version,
+ "mobUrl": mob_url
+ })
+ if r.status_code != 200:
+ print("failed replay middleware")
+ print("status code: %s" % r.status_code)
+ print(r.text)
+ return r.text
+ result = r.json()
+ result["url"] = environ["IOS_MIDDLEWARE"]
+ return result
diff --git a/ee/api/chalicelib/core/sourcemaps.py b/ee/api/chalicelib/core/sourcemaps.py
new file mode 100644
index 000000000..5f82a31e2
--- /dev/null
+++ b/ee/api/chalicelib/core/sourcemaps.py
@@ -0,0 +1,156 @@
+from chalicelib.utils.helper import environ
+
+from chalicelib.utils import s3
+import hashlib
+from urllib.parse import urlparse
+
+from chalicelib.core import sourcemaps_parser
+
+
+def __get_key(project_id, url):
+ u = urlparse(url)
+ new_url = u.scheme + "://" + u.netloc + u.path
+ return f"{project_id}/{hashlib.md5(new_url.encode()).hexdigest()}"
+
+
+def presign_share_urls(project_id, urls):
+ results = []
+ for u in urls:
+ results.append(s3.get_presigned_url_for_sharing(bucket=environ['sourcemaps_bucket'], expires_in=120,
+ key=__get_key(project_id, u),
+ check_exists=True))
+ return results
+
+
+def presign_upload_urls(project_id, urls):
+ results = []
+ for u in urls:
+ results.append(s3.get_presigned_url_for_upload(bucket=environ['sourcemaps_bucket'],
+ expires_in=1800,
+ key=__get_key(project_id, u)))
+ return results
+
+
+def __format_frame_old(f):
+ if f.get("context") is None:
+ f["context"] = []
+ else:
+ f["context"] = [[f["line"], f["context"]]]
+ url = f.pop("url")
+ f["absPath"] = url
+ f["filename"] = urlparse(url).path
+ f["lineNo"] = f.pop("line")
+ f["colNo"] = f.pop("column")
+ f["function"] = f.pop("func")
+ return f
+
+
+def __frame_is_valid(f):
+ return "columnNumber" in f and \
+ "lineNumber" in f and \
+ "fileName" in f
+
+
+def __format_frame(f):
+ f["context"] = [] # no context by default
+ if "source" in f: f.pop("source")
+ url = f.pop("fileName")
+ f["absPath"] = url
+ f["filename"] = urlparse(url).path
+ f["lineNo"] = f.pop("lineNumber")
+ f["colNo"] = f.pop("columnNumber")
+ f["function"] = f.pop("functionName") if "functionName" in f else None
+ return f
+
+
+def format_payload(p, truncate_to_first=False):
+ if type(p) is list:
+ return [__format_frame(f) for f in (p[:1] if truncate_to_first else p) if __frame_is_valid(f)]
+ if type(p) is dict:
+ stack = p.get("stack", [])
+ return [__format_frame_old(f) for f in (stack[:1] if truncate_to_first else stack)]
+ return []
+
+
+def get_traces_group(project_id, payload):
+ frames = format_payload(payload)
+
+ results = [{}] * len(frames)
+ payloads = {}
+ all_exists = True
+ for i, u in enumerate(frames):
+ key = __get_key(project_id, u["absPath"]) # use filename instead?
+ if key not in payloads:
+ file_exists = s3.exists(environ['sourcemaps_bucket'], key)
+ all_exists = all_exists and file_exists
+ if not file_exists:
+ print(f"{u['absPath']} sourcemap (key '{key}') doesn't exist in S3")
+ payloads[key] = None
+ else:
+ payloads[key] = []
+ results[i] = dict(u)
+ results[i]["frame"] = dict(u)
+ if payloads[key] is not None:
+ payloads[key].append({"resultIndex": i,
+ "position": {"line": u["lineNo"], "column": u["colNo"]},
+ "frame": dict(u)})
+ for key in payloads.keys():
+ if payloads[key] is None:
+ continue
+ key_results = sourcemaps_parser.get_original_trace(key=key, positions=[o["position"] for o in payloads[key]])
+ for i, r in enumerate(key_results):
+ res_index = payloads[key][i]["resultIndex"]
+ # function name search by frontend lib is better than sourcemaps' one in most cases
+ if results[res_index].get("function") is not None:
+ r["function"] = results[res_index]["function"]
+ r["frame"] = payloads[key][i]["frame"]
+ results[res_index] = r
+ return fetch_missed_contexts(results), all_exists
+
+
+def get_js_cache_path(fullURL):
+ p = urlparse(fullURL)
+ return p.scheme + '/' + p.netloc + p.path # TODO (Also in go assets library): What if URL with query? (like versions)
+
+
+MAX_COLUMN_OFFSET = 60
+
+
+def fetch_missed_contexts(frames):
+ source_cache = {}
+ for i in range(len(frames)):
+ if len(frames[i]["context"]) != 0:
+ continue
+ if frames[i]["frame"]["absPath"] in source_cache:
+ file = source_cache[frames[i]["frame"]["absPath"]]
+ else:
+ file = s3.get_file(environ['js_cache_bucket'], get_js_cache_path(frames[i]["frame"]["absPath"]))
+ if file is None:
+ print(
+ f"File {get_js_cache_path(frames[i]['frame']['absPath'])} not found in {environ['js_cache_bucket']}")
+ source_cache[frames[i]["frame"]["absPath"]] = file
+ if file is None:
+ continue
+ lines = file.split("\n")
+
+ if frames[i]["lineNo"] is None:
+ print("no original-source found for frame in sourcemap results")
+ frames[i] = frames[i]["frame"]
+ frames[i]["originalMapping"] = False
+
+ l = frames[i]["lineNo"] - 1 # starts from 1
+ c = frames[i]["colNo"] - 1 # starts from 1
+ if len(lines) == 1:
+ print(f"minified asset")
+ l = frames[i]["frame"]["lineNo"] - 1 # starts from 1
+ c = frames[i]["frame"]["colNo"] - 1 # starts from 1
+ elif l >= len(lines):
+ print(f"line number {l} greater than file length {len(lines)}")
+ continue
+
+ line = lines[l]
+ offset = c - MAX_COLUMN_OFFSET
+ if offset < 0: # if the line is shirt
+ offset = 0
+ frames[i]["context"].append([frames[i]["lineNo"], line[offset: c + MAX_COLUMN_OFFSET + 1]])
+ return frames
diff --git a/ee/api/chalicelib/core/sourcemaps_parser.py b/ee/api/chalicelib/core/sourcemaps_parser.py
new file mode 100644
index 000000000..cb0463d55
--- /dev/null
+++ b/ee/api/chalicelib/core/sourcemaps_parser.py
@@ -0,0 +1,22 @@
+import requests
+
+from chalicelib.utils.helper import environ
+
+
+def get_original_trace(key, positions):
+ payload = {
+ "key": key,
+ "positions": positions,
+ "padding": 5,
+ "bucket": environ['sourcemaps_bucket'],
+ "bucket_config": {
+ "aws_access_key_id": environ["sourcemaps_bucket_key"],
+ "aws_secret_access_key": environ["sourcemaps_bucket_secret"],
+ "aws_region": environ["sourcemaps_bucket_region"]
+ }
+ }
+ r = requests.post(environ["sourcemaps"], json=payload)
+ if r.status_code != 200:
+ return {}
+
+ return r.json()
diff --git a/ee/api/chalicelib/core/telemetry.py b/ee/api/chalicelib/core/telemetry.py
new file mode 100644
index 000000000..362550553
--- /dev/null
+++ b/ee/api/chalicelib/core/telemetry.py
@@ -0,0 +1,43 @@
+from chalicelib.utils import pg_client
+import requests
+
+
+def process_data(data, edition='fos'):
+ return {
+ 'edition': edition,
+ 'tracking': data["opt_out"],
+ 'version': data["version_number"],
+ 'user_id': data["user_id"],
+ 'owner_email': None if data["opt_out"] else data["email"],
+ 'organization_name': None if data["opt_out"] else data["name"],
+ 'users_count': data["t_users"],
+ 'projects_count': data["t_projects"],
+ 'sessions_count': data["t_sessions"],
+ 'integrations_count': data["t_integrations"]
+ }
+
+
+def compute():
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ f"""UPDATE public.tenants
+ SET t_integrations = COALESCE((SELECT COUNT(DISTINCT provider) FROM public.integrations) +
+ (SELECT COUNT(*) FROM public.webhooks WHERE type = 'slack') +
+ (SELECT COUNT(*) FROM public.jira_cloud), 0),
+ t_projects=COALESCE((SELECT COUNT(*) FROM public.projects WHERE deleted_at ISNULL), 0),
+ t_sessions=COALESCE((SELECT COUNT(*) FROM public.sessions), 0),
+ t_users=COALESCE((SELECT COUNT(*) FROM public.users WHERE deleted_at ISNULL), 0)
+ RETURNING *,(SELECT email FROM public.users WHERE role='owner' LIMIT 1);"""
+ )
+ data = cur.fetchone()
+ requests.post('https://parrot.asayer.io/os/telemetry', json=process_data(data))
+
+
+def new_client():
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ f"""SELECT *,
+ (SELECT email FROM public.users WHERE role='owner' LIMIT 1) AS email
+ FROM public.tenants;""")
+ data = cur.fetchone()
+ requests.post('https://parrot.asayer.io/os/signup', json=process_data(data))
diff --git a/ee/api/chalicelib/core/weekly_report.py b/ee/api/chalicelib/core/weekly_report.py
new file mode 100644
index 000000000..23ff97446
--- /dev/null
+++ b/ee/api/chalicelib/core/weekly_report.py
@@ -0,0 +1,233 @@
+from chalicelib.utils import pg_client, helper
+from chalicelib.utils.helper import environ
+from chalicelib.utils.helper import get_issue_title
+
+LOWEST_BAR_VALUE = 3
+
+
+def get_config(user_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify("""\
+ SELECT users.weekly_report
+ FROM public.users
+ WHERE users.deleted_at ISNULL AND users.user_id=%(user_id)s
+ LIMIT 1;""", {"user_id": user_id}))
+ result = cur.fetchone()
+ return helper.dict_to_camel_case(result)
+
+
+def edit_config(user_id, weekly_report):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(cur.mogrify("""\
+ UPDATE public.users
+ SET weekly_report= %(weekly_report)s
+ WHERE users.deleted_at ISNULL
+ AND users.user_id=%(user_id)s
+ RETURNING weekly_report;""", {"user_id": user_id, "weekly_report": weekly_report}))
+ result = cur.fetchone()
+ return helper.dict_to_camel_case(result)
+
+
+def cron():
+ with pg_client.PostgresClient() as cur:
+ cur.execute("""\
+ SELECT project_id,
+ name AS project_name,
+ users.emails AS emails,
+ TO_CHAR(DATE_TRUNC('day', now()) - INTERVAL '1 week', 'Mon. DDth, YYYY') AS period_start,
+ TO_CHAR(DATE_TRUNC('day', now()), 'Mon. DDth, YYYY') AS period_end,
+ COALESCE(week_0_issues.count, 0) AS this_week_issues_count,
+ COALESCE(week_1_issues.count, 0) AS past_week_issues_count,
+ COALESCE(month_1_issues.count, 0) AS past_month_issues_count
+ FROM public.projects
+ INNER JOIN LATERAL (
+ SELECT sessions.project_id
+ FROM public.sessions
+ WHERE sessions.project_id = projects.project_id
+ AND start_ts >= (EXTRACT(EPOCH FROM now() - INTERVAL '3 days') * 1000)::BIGINT
+ LIMIT 1) AS recently_active USING (project_id)
+ INNER JOIN LATERAL (
+ SELECT COALESCE(ARRAY_AGG(email), '{}') AS emails
+ FROM public.users
+ WHERE users.tenant_id = projects.tenant_id
+ AND users.deleted_at ISNULL
+ AND users.weekly_report
+ ) AS users ON (TRUE)
+ LEFT JOIN LATERAL (
+ SELECT COUNT(issues.*) AS count
+ FROM events_common.issues
+ INNER JOIN public.sessions USING (session_id)
+ WHERE sessions.project_id = projects.project_id
+ AND issues.timestamp >= (EXTRACT(EPOCH FROM DATE_TRUNC('day', now()) - INTERVAL '1 week') * 1000)::BIGINT
+ ) AS week_0_issues ON (TRUE)
+ LEFT JOIN LATERAL (
+ SELECT COUNT(issues.*) AS count
+ FROM events_common.issues
+ INNER JOIN public.sessions USING (session_id)
+ WHERE sessions.project_id = projects.project_id
+ AND issues.timestamp <= (EXTRACT(EPOCH FROM DATE_TRUNC('day', now()) - INTERVAL '1 week') * 1000)::BIGINT
+ AND issues.timestamp >= (EXTRACT(EPOCH FROM DATE_TRUNC('day', now()) - INTERVAL '2 week') * 1000)::BIGINT
+ ) AS week_1_issues ON (TRUE)
+ LEFT JOIN LATERAL (
+ SELECT COUNT(issues.*) AS count
+ FROM events_common.issues
+ INNER JOIN public.sessions USING (session_id)
+ WHERE sessions.project_id = projects.project_id
+ AND issues.timestamp <= (EXTRACT(EPOCH FROM DATE_TRUNC('day', now()) - INTERVAL '1 week') * 1000)::BIGINT
+ AND issues.timestamp >= (EXTRACT(EPOCH FROM DATE_TRUNC('day', now()) - INTERVAL '5 week') * 1000)::BIGINT
+ ) AS month_1_issues ON (TRUE)
+ WHERE projects.deleted_at ISNULL;""")
+ projects_data = cur.fetchall()
+ for p in projects_data:
+ print(f"checking {p['project_name']} : {p['project_id']}")
+ if len(p["emails"]) == 0 \
+ or p["this_week_issues_count"] + p["past_week_issues_count"] + p["past_month_issues_count"] == 0:
+ print('ignore')
+ continue
+ print("valid")
+ p["past_week_issues_evolution"] = helper.__decimal_limit(
+ helper.__progress(p["this_week_issues_count"], p["past_week_issues_count"]), 1)
+ p["past_month_issues_evolution"] = helper.__decimal_limit(
+ helper.__progress(p["this_week_issues_count"], p["past_month_issues_count"]), 1)
+ cur.execute(cur.mogrify("""
+ SELECT LEFT(TO_CHAR(timestamp_i, 'Dy'),1) AS day_short,
+ TO_CHAR(timestamp_i, 'Mon. DD, YYYY') AS day_long,
+ (
+ SELECT COUNT(*)
+ FROM events_common.issues INNER JOIN public.issues USING (issue_id)
+ WHERE project_id = %(project_id)s
+ AND timestamp >= (EXTRACT(EPOCH FROM timestamp_i) * 1000)::BIGINT
+ AND timestamp <= (EXTRACT(EPOCH FROM timestamp_i + INTERVAL '1 day') * 1000)::BIGINT
+ ) AS issues_count
+ FROM generate_series(
+ DATE_TRUNC('day', now()) - INTERVAL '7 days',
+ DATE_TRUNC('day', now()) - INTERVAL '1 day',
+ '1 day'::INTERVAL
+ ) AS timestamp_i
+ ORDER BY timestamp_i;""", {"project_id": p["project_id"]}))
+ days_partition = cur.fetchall()
+ max_days_partition = max(x['issues_count'] for x in days_partition)
+ for d in days_partition:
+ if max_days_partition <= 0:
+ d["value"] = LOWEST_BAR_VALUE
+ else:
+ d["value"] = d["issues_count"] * 100 / max_days_partition
+ d["value"] = d["value"] if d["value"] > LOWEST_BAR_VALUE else LOWEST_BAR_VALUE
+ cur.execute(cur.mogrify("""\
+ SELECT type, COUNT(*) AS count
+ FROM events_common.issues INNER JOIN public.issues USING (issue_id)
+ WHERE project_id = %(project_id)s
+ AND timestamp >= (EXTRACT(EPOCH FROM DATE_TRUNC('day', now()) - INTERVAL '7 days') * 1000)::BIGINT
+ GROUP BY type
+ ORDER BY count DESC, type
+ LIMIT 4;""", {"project_id": p["project_id"]}))
+ issues_by_type = cur.fetchall()
+ max_issues_by_type = sum(i["count"] for i in issues_by_type)
+ for i in issues_by_type:
+ i["type"] = get_issue_title(i["type"])
+ if max_issues_by_type <= 0:
+ i["value"] = LOWEST_BAR_VALUE
+ else:
+ i["value"] = i["count"] * 100 / max_issues_by_type
+ cur.execute(cur.mogrify("""\
+ SELECT TO_CHAR(timestamp_i, 'Dy') AS day_short,
+ TO_CHAR(timestamp_i, 'Mon. DD, YYYY') AS day_long,
+ COALESCE((SELECT JSONB_AGG(sub)
+ FROM (
+ SELECT type, COUNT(*) AS count
+ FROM events_common.issues
+ INNER JOIN public.issues USING (issue_id)
+ WHERE project_id = %(project_id)s
+ AND timestamp >= (EXTRACT(EPOCH FROM timestamp_i) * 1000)::BIGINT
+ AND timestamp <= (EXTRACT(EPOCH FROM timestamp_i + INTERVAL '1 day') * 1000)::BIGINT
+ GROUP BY type
+ ORDER BY count
+ ) AS sub), '[]'::JSONB) AS partition
+ FROM generate_series(
+ DATE_TRUNC('day', now()) - INTERVAL '7 days',
+ DATE_TRUNC('day', now()) - INTERVAL '1 day',
+ '1 day'::INTERVAL
+ ) AS timestamp_i
+ GROUP BY timestamp_i
+ ORDER BY timestamp_i;""", {"project_id": p["project_id"]}))
+ issues_breakdown_by_day = cur.fetchall()
+ for i in issues_breakdown_by_day:
+ i["sum"] = sum(x["count"] for x in i["partition"])
+ for j in i["partition"]:
+ j["type"] = get_issue_title(j["type"])
+ max_days_partition = max(i["sum"] for i in issues_breakdown_by_day)
+ for i in issues_breakdown_by_day:
+ for j in i["partition"]:
+ if max_days_partition <= 0:
+ j["value"] = LOWEST_BAR_VALUE
+ else:
+ j["value"] = j["count"] * 100 / max_days_partition
+ j["value"] = j["value"] if j["value"] > LOWEST_BAR_VALUE else LOWEST_BAR_VALUE
+ cur.execute(cur.mogrify("""
+ SELECT type,
+ COUNT(*) AS issue_count,
+ COUNT(DISTINCT session_id) AS sessions_count,
+ (SELECT COUNT(DISTINCT sessions.session_id)
+ FROM public.sessions
+ INNER JOIN events_common.issues AS sci USING (session_id)
+ INNER JOIN public.issues AS si USING (issue_id)
+ WHERE si.project_id = %(project_id)s
+ AND sessions.project_id = %(project_id)s
+ AND sessions.start_ts <= (EXTRACT(EPOCH FROM DATE_TRUNC('day', now()) - INTERVAL '1 week') * 1000)::BIGINT
+ AND sessions.start_ts >= (EXTRACT(EPOCH FROM DATE_TRUNC('day', now()) - INTERVAL '2 weeks') * 1000)::BIGINT
+ AND si.type = mi.type
+ AND sessions.duration IS NOT NULL
+ ) AS last_week_sessions_count,
+ (SELECT COUNT(DISTINCT sci.session_id)
+ FROM public.sessions
+ INNER JOIN events_common.issues AS sci USING (session_id)
+ INNER JOIN public.issues AS si USING (issue_id)
+ WHERE si.project_id = %(project_id)s
+ AND sessions.project_id = %(project_id)s
+ AND sessions.start_ts <= (EXTRACT(EPOCH FROM DATE_TRUNC('day', now()) - INTERVAL '1 week') * 1000)::BIGINT
+ AND sessions.start_ts >= (EXTRACT(EPOCH FROM DATE_TRUNC('day', now()) - INTERVAL '5 weeks') * 1000)::BIGINT
+ AND si.type = mi.type
+ AND sessions.duration IS NOT NULL
+ ) AS last_month_sessions_count
+ FROM events_common.issues
+ INNER JOIN public.issues AS mi USING (issue_id)
+ INNER JOIN public.sessions USING (session_id)
+ WHERE mi.project_id = %(project_id)s AND sessions.project_id = %(project_id)s AND sessions.duration IS NOT NULL
+ AND sessions.start_ts >= (EXTRACT(EPOCH FROM DATE_TRUNC('day', now()) - INTERVAL '1 week') * 1000)::BIGINT
+ GROUP BY type
+ ORDER BY issue_count DESC;""", {"project_id": p["project_id"]}))
+ issues_breakdown_list = cur.fetchall()
+ if len(issues_breakdown_list) > 4:
+ others = {"type": "Others",
+ "sessions_count": sum(i["sessions_count"] for i in issues_breakdown_list[4:]),
+ "issue_count": sum(i["issue_count"] for i in issues_breakdown_list[4:]),
+ "last_week_sessions_count": sum(
+ i["last_week_sessions_count"] for i in issues_breakdown_list[4:]),
+ "last_month_sessions_count": sum(
+ i["last_month_sessions_count"] for i in issues_breakdown_list[4:])}
+ issues_breakdown_list = issues_breakdown_list[:4]
+ issues_breakdown_list.append(others)
+ for i in issues_breakdown_list:
+ i["type"] = get_issue_title(i["type"])
+ i["last_week_sessions_evolution"] = helper.__decimal_limit(
+ helper.__progress(i["sessions_count"], i["last_week_sessions_count"]), 1)
+ i["last_month_sessions_evolution"] = helper.__decimal_limit(
+ helper.__progress(i["sessions_count"], i["last_month_sessions_count"]), 1)
+ i["sessions_count"] = f'{i["sessions_count"]:,}'
+ keep_types = [i["type"] for i in issues_breakdown_list]
+ for i in issues_breakdown_by_day:
+ keep = []
+ for j in i["partition"]:
+ if j["type"] in keep_types:
+ keep.append(j)
+ i["partition"] = keep
+ helper.async_post(environ['email_funnel'] % "weekly_report2",
+ {"email": p.pop("emails"),
+ "data": {
+ **p,
+ "days_partition": days_partition,
+ "issues_by_type": issues_by_type,
+ "issues_breakdown_by_day": issues_breakdown_by_day,
+ "issues_breakdown_list": issues_breakdown_list
+ }
+ })
diff --git a/ee/api/chalicelib/ee/__init__.py b/ee/api/chalicelib/ee/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/ee/api/chalicelib/ee/boarding.py b/ee/api/chalicelib/ee/boarding.py
new file mode 100644
index 000000000..6d0c87a92
--- /dev/null
+++ b/ee/api/chalicelib/ee/boarding.py
@@ -0,0 +1,121 @@
+from chalicelib.utils import pg_client
+from chalicelib.core import log_tool_datadog, log_tool_stackdriver, log_tool_sentry
+
+from chalicelib.ee import users
+from chalicelib.ee import projects
+
+
+def get_state(tenant_id):
+ my_projects = projects.get_projects(tenant_id=tenant_id, recording_state=False)
+ pids = [s["projectId"] for s in my_projects]
+ with pg_client.PostgresClient() as cur:
+ recorded = False
+ meta = False
+
+ if len(pids) > 0:
+ cur.execute(
+ cur.mogrify("""\
+ SELECT
+ COUNT(*)
+ FROM public.sessions AS s
+ where s.project_id IN %(ids)s
+ LIMIT 1;""",
+ {"ids": tuple(pids)})
+ )
+ recorded = cur.fetchone()["count"] > 0
+ meta = False
+ if recorded:
+ cur.execute(
+ cur.mogrify("""SELECT SUM((SELECT COUNT(t.meta)
+ FROM (VALUES (p.metadata_1), (p.metadata_2), (p.metadata_3), (p.metadata_4), (p.metadata_5),
+ (p.metadata_6), (p.metadata_7), (p.metadata_8), (p.metadata_9), (p.metadata_10),
+ (sessions.user_id)) AS t(meta)
+ WHERE t.meta NOTNULL))
+ FROM public.projects AS p
+ LEFT JOIN LATERAL ( SELECT 'defined'
+ FROM public.sessions
+ WHERE sessions.project_id=p.project_id AND sessions.user_id IS NOT NULL
+ LIMIT 1) AS sessions(user_id) ON(TRUE)
+ WHERE p.tenant_id = %(tenant_id)s
+ AND p.deleted_at ISNULL;"""
+ , {"tenant_id": tenant_id}))
+
+ meta = cur.fetchone()["sum"] > 0
+
+ return [
+ {"task": "Install Asayer",
+ "done": recorded,
+ "URL": "https://docs.asayer.io/getting-started/quick-start"},
+ {"task": "Identify Users",
+ "done": meta,
+ "URL": "https://docs.asayer.io/data-privacy-security/metadata"},
+ {"task": "Invite Team Members",
+ "done": len(users.get_members(tenant_id=tenant_id)) > 1,
+ "URL": "https://app.asayer.io/client/manage-users"},
+ {"task": "Integrations",
+ "done": len(log_tool_datadog.get_all(tenant_id=tenant_id)) > 0 \
+ or len(log_tool_sentry.get_all(tenant_id=tenant_id)) > 0 \
+ or len(log_tool_stackdriver.get_all(tenant_id=tenant_id)) > 0,
+ "URL": "https://docs.asayer.io/integrations"}
+ ]
+
+
+def get_state_installing(tenant_id):
+ my_projects = projects.get_projects(tenant_id=tenant_id, recording_state=False)
+ pids = [s["projectId"] for s in my_projects]
+ with pg_client.PostgresClient() as cur:
+ recorded = False
+
+ if len(pids) > 0:
+ cur.execute(
+ cur.mogrify("""\
+ SELECT
+ COUNT(*)
+ FROM public.sessions AS s
+ where s.project_id IN %(ids)s
+ LIMIT 1;""",
+ {"ids": tuple(pids)})
+ )
+ recorded = cur.fetchone()["count"] > 0
+
+ return {"task": "Install Asayer",
+ "done": recorded,
+ "URL": "https://docs.asayer.io/getting-started/quick-start"}
+
+
+def get_state_identify_users(tenant_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""SELECT SUM((SELECT COUNT(t.meta)
+ FROM (VALUES (p.metadata_1), (p.metadata_2), (p.metadata_3), (p.metadata_4), (p.metadata_5),
+ (p.metadata_6), (p.metadata_7), (p.metadata_8), (p.metadata_9), (p.metadata_10),
+ (sessions.user_id)) AS t(meta)
+ WHERE t.meta NOTNULL))
+ FROM public.projects AS p
+ LEFT JOIN LATERAL ( SELECT 'defined'
+ FROM public.sessions
+ WHERE sessions.project_id=p.project_id AND sessions.user_id IS NOT NULL
+ LIMIT 1) AS sessions(user_id) ON(TRUE)
+ WHERE p.tenant_id = %(tenant_id)s
+ AND p.deleted_at ISNULL;"""
+ , {"tenant_id": tenant_id}))
+
+ meta = cur.fetchone()["sum"] > 0
+
+ return {"task": "Identify Users",
+ "done": meta,
+ "URL": "https://docs.asayer.io/data-privacy-security/metadata"}
+
+
+def get_state_manage_users(tenant_id):
+ return {"task": "Invite Team Members",
+ "done": len(users.get_members(tenant_id=tenant_id)) > 1,
+ "URL": "https://app.asayer.io/client/manage-users"}
+
+
+def get_state_integrations(tenant_id):
+ return {"task": "Integrations",
+ "done": len(log_tool_datadog.get_all(tenant_id=tenant_id)) > 0 \
+ or len(log_tool_sentry.get_all(tenant_id=tenant_id)) > 0 \
+ or len(log_tool_stackdriver.get_all(tenant_id=tenant_id)) > 0,
+ "URL": "https://docs.asayer.io/integrations"}
diff --git a/ee/api/chalicelib/ee/dashboard.py b/ee/api/chalicelib/ee/dashboard.py
new file mode 100644
index 000000000..878b5119a
--- /dev/null
+++ b/ee/api/chalicelib/ee/dashboard.py
@@ -0,0 +1,2139 @@
+import math
+import random
+
+from chalicelib.utils import pg_client
+from chalicelib.utils import args_transformer
+from chalicelib.utils import helper
+from chalicelib.utils.TimeUTC import TimeUTC
+from chalicelib.ee.utils import ch_client
+from math import isnan
+from chalicelib.utils.metrics_helper import __get_step_size
+
+
+def __get_basic_constraints(table_name=None, time_constraint=True, round_start=False, data={}, identifier="project_id"):
+ if table_name:
+ table_name += "."
+ else:
+ table_name = ""
+ ch_sub_query = [f"{table_name}{identifier} =toUInt32(%({identifier})s)"]
+ if time_constraint:
+ if round_start:
+ ch_sub_query.append(
+ f"toStartOfInterval({table_name}datetime, INTERVAL %(step_size)s second) >= toDateTime(%(startTimestamp)s/1000)")
+ else:
+ ch_sub_query.append(f"{table_name}datetime >= toDateTime(%(startTimestamp)s/1000)")
+ ch_sub_query.append(f"{table_name}datetime < toDateTime(%(endTimestamp)s/1000)")
+ return ch_sub_query + __get_generic_constraint(data=data, table_name=table_name)
+
+
+def __frange(start, stop, step):
+ result = []
+ i = start
+ while i < stop:
+ result.append(i)
+ i += step
+ return result
+
+
+def __add_missing_keys(original, complete):
+ for missing in [key for key in complete.keys() if key not in original.keys()]:
+ original[missing] = complete[missing]
+ return original
+
+
+def __complete_missing_steps(start_time, end_time, density, neutral, rows, time_key="timestamp", time_coefficient=1000):
+ if len(rows) == density:
+ return rows
+ step = __get_step_size(start_time, end_time, density, decimal=True)
+ optimal = [(int(i * time_coefficient), int((i + step) * time_coefficient)) for i in
+ __frange(start_time // time_coefficient, end_time // time_coefficient, step)]
+ result = []
+ r = 0
+ o = 0
+ for i in range(density):
+ neutral_clone = dict(neutral)
+ for k in neutral_clone.keys():
+ if callable(neutral_clone[k]):
+ neutral_clone[k] = neutral_clone[k]()
+ if r < len(rows) and len(result) + len(rows) - r == density:
+ result += rows[r:]
+ break
+ if r < len(rows) and o < len(optimal) and rows[r][time_key] < optimal[o][0]:
+ # complete missing keys in original object
+ rows[r] = __add_missing_keys(original=rows[r], complete=neutral_clone)
+ result.append(rows[r])
+ r += 1
+ elif r < len(rows) and o < len(optimal) and optimal[o][0] <= rows[r][time_key] < optimal[o][1]:
+ # complete missing keys in original object
+ rows[r] = __add_missing_keys(original=rows[r], complete=neutral_clone)
+ result.append(rows[r])
+ r += 1
+ o += 1
+ else:
+ neutral_clone[time_key] = optimal[o][0]
+ result.append(neutral_clone)
+ o += 1
+ # elif r < len(rows) and rows[r][time_key] >= optimal[o][1]:
+ # neutral_clone[time_key] = optimal[o][0]
+ # result.append(neutral_clone)
+ # o += 1
+ # else:
+ # neutral_clone[time_key] = optimal[o][0]
+ # result.append(neutral_clone)
+ # o += 1
+ return result
+
+
+def __merge_charts(list1, list2, time_key="timestamp"):
+ if len(list1) != len(list2):
+ raise Exception("cannot merge unequal lists")
+ result = []
+ for i in range(len(list1)):
+ timestamp = min(list1[i][time_key], list2[i][time_key])
+ result.append({**list1[i], **list2[i], time_key: timestamp})
+ return result
+
+
+def __get_constraint(data, fields, table_name):
+ constraints = []
+ # for k in fields.keys():
+ for i, f in enumerate(data.get("filters", [])):
+ if f["key"] in fields.keys():
+ if f["value"] in ["*", ""]:
+ constraints.append(f"isNotNull({table_name}{fields[f['key']]})")
+ else:
+ constraints.append(f"{table_name}{fields[f['key']]} = %({f['key']}_{i})s")
+ # TODO: remove this in next release
+ offset = len(data.get("filters", []))
+ for i, f in enumerate(data.keys()):
+ if f in fields.keys():
+ if data[f] in ["*", ""]:
+ constraints.append(f"isNotNull({table_name}{fields[f]})")
+ else:
+ constraints.append(f"{table_name}{fields[f]} = %({f}_{i + offset})s")
+ return constraints
+
+
+def __get_constraint_values(data):
+ params = {}
+ for i, f in enumerate(data.get("filters", [])):
+ params[f"{f['key']}_{i}"] = f["value"]
+
+ # TODO: remove this in next release
+ offset = len(data.get("filters", []))
+ for i, f in enumerate(data.keys()):
+ params[f"{f}_{i + offset}"] = data[f]
+ return params
+
+
+METADATA_FIELDS = {"userId": "user_id",
+ "userAnonymousId": "user_anonymous_id",
+ "metadata1": "metadata_1",
+ "metadata2": "metadata_2",
+ "metadata3": "metadata_3",
+ "metadata4": "metadata_4",
+ "metadata5": "metadata_5",
+ "metadata6": "metadata_6",
+ "metadata7": "metadata_7",
+ "metadata8": "metadata_8",
+ "metadata9": "metadata_9",
+ "metadata10": "metadata_10"}
+
+
+def __get_meta_constraint(data):
+ return __get_constraint(data=data, fields=METADATA_FIELDS, table_name="sessions_metadata.")
+
+
+SESSIONS_META_FIELDS = {"revId": "rev_id",
+ "country": "user_country",
+ "os": "user_os",
+ "platform": "user_device_type",
+ "device": "user_device",
+ "browser": "user_browser"}
+
+
+def __get_generic_constraint(data, table_name):
+ return __get_constraint(data=data, fields=SESSIONS_META_FIELDS, table_name=table_name)
+
+
+def get_processed_sessions(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(),
+ density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query = __get_basic_constraints(table_name="sessions", data=args)
+ ch_sub_query_chart = __get_basic_constraints(table_name="sessions", round_start=True, data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+ ch_sub_query_chart += meta_condition
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""\
+ SELECT
+ toUnixTimestamp(toStartOfInterval(sessions.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ COUNT(sessions.session_id) AS count
+ FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;\
+ """
+ params = {"step_size": step_size, "project_id": project_id, "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)}
+
+ rows = ch.execute(query=ch_query, params=params)
+
+ results = {
+ "count": sum([r["count"] for r in rows]),
+ "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp, end_time=endTimestamp,
+ density=density,
+ neutral={"count": 0})
+ }
+
+ diff = endTimestamp - startTimestamp
+ endTimestamp = startTimestamp
+ startTimestamp = endTimestamp - diff
+
+ ch_query = f"""\
+ SELECT
+ COUNT(sessions.session_id) AS count
+ FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)};"""
+ params = {"project_id": project_id, "startTimestamp": startTimestamp, "endTimestamp": endTimestamp,
+ **__get_constraint_values(args)}
+
+ count = ch.execute(query=ch_query, params=params)
+
+ count = count[0]["count"]
+
+ results["countProgress"] = helper.__progress(old_val=count, new_val=results["count"])
+
+ return results
+
+
+def get_errors(project_id, startTimestamp=TimeUTC.now(delta_days=-1), endTimestamp=TimeUTC.now(),
+ density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+
+ ch_sub_query = __get_basic_constraints(table_name="errors", data=args)
+ ch_sub_query.append("errors.source = 'js_exception'")
+ ch_sub_query_chart = __get_basic_constraints(table_name="errors", round_start=True, data=args)
+ ch_sub_query_chart.append("errors.source = 'js_exception'")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""\
+ SELECT
+ toUnixTimestamp(toStartOfInterval(errors.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ COUNT(DISTINCT errors.session_id) AS count
+ FROM errors {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;\
+ """
+ params = {"step_size": step_size, "project_id": project_id, "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ results = {
+ "count": 0 if len(rows) == 0 else __count_distinct_errors(ch, project_id, startTimestamp, endTimestamp,
+ ch_sub_query),
+ "impactedSessions": sum([r["count"] for r in rows]),
+ "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp, end_time=endTimestamp,
+ density=density,
+ neutral={"count": 0})
+ }
+
+ diff = endTimestamp - startTimestamp
+ endTimestamp = startTimestamp
+ startTimestamp = endTimestamp - diff
+ count = __count_distinct_errors(ch, project_id, startTimestamp, endTimestamp, ch_sub_query,
+ meta=len(meta_condition) > 0, **args)
+ results["progress"] = helper.__progress(old_val=count, new_val=results["count"])
+ return results
+
+
+def __count_distinct_errors(cur, project_id, startTimestamp, endTimestamp, ch_sub_query, meta=False, **args):
+ ch_query = f"""\
+ SELECT
+ COUNT(DISTINCT errors.message) AS count
+ FROM errors {"INNER JOIN sessions_metadata USING(session_id)" if meta else ""}
+ WHERE {" AND ".join(ch_sub_query)};"""
+ count = cur.execute(query=ch_query,
+ params={"project_id": project_id, "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+
+ if count is not None and len(count) > 0:
+ return count[0]["count"]
+
+ return 0
+
+
+def get_errors_trend(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(),
+ density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query = __get_basic_constraints(table_name="errors", data=args)
+ ch_sub_query_chart = __get_basic_constraints(table_name="errors", round_start=True, data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT *
+ FROM (SELECT errors.error_id AS error_id,
+ errors.message AS error,
+ COUNT(errors.session_id) AS count,
+ COUNT(DISTINCT errors.session_id) AS sessions
+ FROM errors {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY errors.error_id, errors.message) AS errors_chart
+ INNER JOIN (SELECT error_id AS error_id,
+ toUnixTimestamp(MAX(datetime))*1000 AS lastOccurrenceAt,
+ toUnixTimestamp(MIN(datetime))*1000 AS firstOccurrenceAt
+ FROM errors
+ GROUP BY error_id) AS errors_time USING(error_id)
+ ORDER BY sessions DESC, count DESC LIMIT 10;"""
+ params = {"step_size": step_size, "project_id": project_id, "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+
+ print(f"got {len(rows)} rows")
+ if len(rows) == 0:
+ return []
+ error_ids = [r["error_id"] for r in rows]
+ ch_sub_query.append("error_id = %(error_id)s")
+ errors = {}
+ for error_id in error_ids:
+ ch_query = f"""\
+ SELECT
+ toUnixTimestamp(toStartOfInterval(errors.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ COUNT(errors.session_id) AS count
+ FROM errors {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ params["error_id"] = error_id
+ errors[error_id] = ch.execute(query=ch_query, params=params)
+
+ for row in rows:
+ row["startTimestamp"] = startTimestamp
+ row["endTimestamp"] = endTimestamp
+ row["chart"] = __complete_missing_steps(rows=errors[row["error_id"]], start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"count": 0})
+
+ return rows
+
+
+def get_page_metrics(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), **args):
+ with ch_client.ClickHouseClient() as ch:
+ rows = __get_page_metrics(ch, project_id, startTimestamp, endTimestamp, **args)
+ if len(rows) > 0:
+ results = helper.dict_to_camel_case(rows[0])
+ diff = endTimestamp - startTimestamp
+ endTimestamp = startTimestamp
+ startTimestamp = endTimestamp - diff
+ rows = __get_page_metrics(ch, project_id, startTimestamp, endTimestamp, **args)
+ if len(rows) > 0:
+ previous = helper.dict_to_camel_case(rows[0])
+ for key in previous.keys():
+ results[key + "Progress"] = helper.__progress(old_val=previous[key], new_val=results[key])
+ return results
+
+
+def __get_page_metrics(ch, project_id, startTimestamp, endTimestamp, **args):
+ ch_sub_query = __get_basic_constraints(table_name="pages", data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+ # changed dom_content_loaded_event_start to dom_content_loaded_event_end
+ ch_query = f"""\
+ SELECT
+ COALESCE(AVG(NULLIF(pages.dom_content_loaded_event_end ,0)),0) AS avg_dom_content_load_start,
+-- COALESCE(AVG(NULLIF(pages.dom_content_loaded_event_start ,0)),0) AS avg_dom_content_load_start,
+ COALESCE(AVG(NULLIF(pages.first_contentful_paint,0)),0) AS avg_first_contentful_pixel
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)};"""
+ params = {"project_id": project_id, "type": 'fetch', "startTimestamp": startTimestamp, "endTimestamp": endTimestamp,
+ **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ return rows
+
+
+def get_application_activity(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), **args):
+ with ch_client.ClickHouseClient() as ch:
+ row = __get_application_activity(ch, project_id, startTimestamp, endTimestamp, **args)
+ results = helper.dict_to_camel_case(row)
+ diff = endTimestamp - startTimestamp
+ endTimestamp = startTimestamp
+ startTimestamp = endTimestamp - diff
+ row = __get_application_activity(ch, project_id, startTimestamp, endTimestamp, **args)
+ previous = helper.dict_to_camel_case(row)
+ for key in previous.keys():
+ results[key + "Progress"] = helper.__progress(old_val=previous[key], new_val=results[key])
+ return results
+
+
+def __get_application_activity(ch, project_id, startTimestamp, endTimestamp, **args):
+ result = {}
+ ch_sub_query = __get_basic_constraints(table_name="pages", data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ ch_query = f"""\
+ SELECT AVG(NULLIF(pages.load_event_end ,0)) AS avg_page_load_time
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)};"""
+ params = {"project_id": project_id, "startTimestamp": startTimestamp, "endTimestamp": endTimestamp,
+ **__get_constraint_values(args)}
+ row = ch.execute(query=ch_query, params=params)[0]
+ result = {**result, **row}
+
+ ch_sub_query = __get_basic_constraints(table_name="resources", data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+ ch_sub_query.append("resources.type= %(type)s")
+ ch_query = f"""\
+ SELECT
+ AVG(NULLIF(resources.duration,0)) AS avg
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)};"""
+ row = ch.execute(query=ch_query,
+ params={"project_id": project_id, "type": 'img', "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})[0]
+ result = {**result, "avg_image_load_time": row["avg"]}
+ row = ch.execute(query=ch_query,
+ params={"project_id": project_id, "type": 'fetch', "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})[0]
+ result = {**result, "avg_request_load_time": row["avg"]}
+
+ for k in result:
+ if result[k] is None:
+ result[k] = 0
+ return result
+
+
+def get_user_activity(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), **args):
+ results = {}
+
+ with ch_client.ClickHouseClient() as ch:
+ rows = __get_user_activity(ch, project_id, startTimestamp, endTimestamp, **args)
+ if len(rows) > 0:
+ results = helper.dict_to_camel_case(rows[0])
+ for key in results:
+ if isnan(results[key]):
+ results[key] = 0
+ diff = endTimestamp - startTimestamp
+ endTimestamp = startTimestamp
+ startTimestamp = endTimestamp - diff
+ rows = __get_user_activity(ch, project_id, startTimestamp, endTimestamp, **args)
+
+ if len(rows) > 0:
+ previous = helper.dict_to_camel_case(rows[0])
+ for key in previous:
+ results[key + "Progress"] = helper.__progress(old_val=previous[key], new_val=results[key])
+ return results
+
+
+def __get_user_activity(cur, project_id, startTimestamp, endTimestamp, **args):
+ ch_sub_query = __get_basic_constraints(table_name="sessions", data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ ch_query = f"""\
+ SELECT
+ COALESCE(CEIL(AVG(NULLIF(sessions.pages_count,0))),0) AS avg_visited_pages,
+ COALESCE(AVG(NULLIF(sessions.duration,0)),0) AS avg_session_duration
+ FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)};"""
+ params = {"project_id": project_id, "startTimestamp": startTimestamp, "endTimestamp": endTimestamp,
+ **__get_constraint_values(args)}
+
+ rows = cur.execute(query=ch_query, params=params)
+
+ return rows
+
+
+def get_slowest_images(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(),
+ density=7, **args):
+ step_size = __get_step_size(endTimestamp=endTimestamp, startTimestamp=startTimestamp, density=density)
+ ch_sub_query = __get_basic_constraints(table_name="resources", data=args)
+ ch_sub_query.append("resources.type = 'img'")
+ ch_sub_query_chart = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ ch_sub_query_chart.append("resources.type = 'img'")
+ ch_sub_query_chart.append("resources.url = %(url)s")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT resources.url,
+ AVG(NULLIF(resources.duration,0)) AS avg,
+ COUNT(resources.session_id) AS count
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY resources.url ORDER BY avg DESC LIMIT 10;"""
+
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id, "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+
+ rows = [{"url": i["url"], "avgDuration": i["avg"], "sessions": i["count"]} for i in rows]
+
+ urls = [row["url"] for row in rows]
+
+ charts = {}
+ for url in urls:
+ ch_query = f"""\
+ SELECT toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second ))*1000 AS timestamp,
+ AVG(NULLIF(resources.duration,0)) AS avg
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ params = {"step_size": step_size, "project_id": project_id, "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, "url": url, **__get_constraint_values(args)}
+ r = ch.execute(query=ch_query, params=params)
+ charts[url] = [{"timestamp": int(i["timestamp"]),
+ "avgDuration": i["avg"]}
+ for i in __complete_missing_steps(rows=r, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density, neutral={"avg": 0})]
+ for i in range(len(rows)):
+ rows[i] = helper.dict_to_camel_case(rows[i])
+ rows[i]["chart"] = [helper.dict_to_camel_case(chart) for chart in charts[rows[i]["url"]]]
+
+ return sorted(rows, key=lambda k: k["sessions"], reverse=True)
+
+
+def __get_performance_constraint(l):
+ if len(l) == 0:
+ return ""
+ l = [s.decode('UTF-8').replace("%", "%%") for s in l]
+ return f"AND ({' OR '.join(l)})"
+
+
+def get_performance(project_id, startTimestamp=TimeUTC.now(delta_days=-1), endTimestamp=TimeUTC.now(),
+ density=19, resources=None, **args):
+ step_size = __get_step_size(endTimestamp=endTimestamp, startTimestamp=startTimestamp, density=density)
+ location_constraints = []
+ img_constraints = []
+ request_constraints = []
+ ch_sub_query_chart = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+
+ img_constraints_vals = {}
+ location_constraints_vals = {}
+ request_constraints_vals = {}
+
+ if resources and len(resources) > 0:
+ for r in resources:
+ if r["type"] == "IMG":
+ img_constraints.append(f"resources.url = %(val_{len(img_constraints)})s")
+ img_constraints_vals["val_" + str(len(img_constraints) - 1)] = r['value']
+ elif r["type"] == "LOCATION":
+ location_constraints.append(f"pages.url_path = %(val_{len(location_constraints)})s")
+ location_constraints_vals["val_" + str(len(location_constraints) - 1)] = r['value']
+ else:
+ request_constraints.append(f"resources.url = %(val_{len(request_constraints)})s")
+ request_constraints_vals["val_" + str(len(request_constraints) - 1)] = r['value']
+ params = {"step_size": step_size, "project_id": project_id, "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp}
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second ))*1000 AS timestamp,
+ AVG(NULLIF(resources.duration,0)) AS avg
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ AND resources.type = 'img'
+ {(f' AND ({" OR ".join(img_constraints)})') if len(img_constraints) > 0 else ""}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ rows = ch.execute(query=ch_query, params={**params, **img_constraints_vals, **__get_constraint_values(args)})
+ images = [{"timestamp": i["timestamp"], "avgImageLoadTime": i["avg"]} for i in
+ __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density, neutral={"avg": 0})]
+ ch_query = f"""SELECT
+ toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second ))*1000 AS timestamp,
+ AVG(NULLIF(resources.duration,0)) AS avg
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ AND resources.type = 'fetch'
+ {(f' AND ({" OR ".join(request_constraints)})') if len(request_constraints) > 0 else ""}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ rows = ch.execute(query=ch_query,
+ params={**params, **request_constraints_vals, **__get_constraint_values(args)})
+ requests = [{"timestamp": i["timestamp"], "avgRequestLoadTime": i["avg"]} for i in
+ __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp, density=density,
+ neutral={"avg": 0})]
+ ch_sub_query_chart = __get_basic_constraints(table_name="pages", round_start=True,
+ data=args)
+ ch_sub_query_chart += meta_condition
+
+ ch_query = f"""SELECT
+ toUnixTimestamp(toStartOfInterval(pages.datetime, INTERVAL %(step_size)s second ))*1000 AS timestamp,
+ AVG(NULLIF(pages.load_event_end ,0)) AS avg
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ {(f' AND ({" OR ".join(location_constraints)})') if len(location_constraints) > 0 else ""}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+
+ rows = ch.execute(query=ch_query,
+ params={**params, **location_constraints_vals, **__get_constraint_values(args)})
+ pages = [{"timestamp": i["timestamp"], "avgPageLoadTime": i["avg"]} for i in
+ __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density, neutral={"avg": 0})]
+
+ rows = helper.merge_lists_by_key(helper.merge_lists_by_key(pages, requests, "timestamp"), images, "timestamp")
+
+ for s in rows:
+ for k in s:
+ if s[k] is None:
+ s[k] = 0
+ return {"chart": helper.list_to_camel_case(__complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"avgImageLoadTime": 0,
+ "avgRequestLoadTime": 0,
+ "avgPageLoadTime": 0}))}
+
+
+RESOURCS_TYPE_TO_DB_TYPE = {
+ "img": "IMG",
+ "fetch": "REQUEST",
+ "stylesheet": "STYLESHEET",
+ "script": "SCRIPT",
+ "other": "OTHER",
+ "media": "MEDIA"
+}
+
+
+def __get_resource_type_from_db_type(db_type):
+ db_type = db_type.lower()
+ return RESOURCS_TYPE_TO_DB_TYPE.get(db_type, db_type)
+
+
+def __get_resource_db_type_from_type(resource_type):
+ resource_type = resource_type.upper()
+ return {v: k for k, v in RESOURCS_TYPE_TO_DB_TYPE.items()}.get(resource_type, resource_type)
+
+
+def search(text, resource_type, project_id, performance=False, pages_only=False, events_only=False,
+ metadata=False, key=None, platform=None):
+ if not resource_type:
+ data = []
+ if metadata:
+ resource_type = "METADATA"
+ elif pages_only or performance:
+ resource_type = "LOCATION"
+ else:
+ resource_type = "ALL"
+ data.extend(search(text=text, resource_type=resource_type, project_id=project_id,
+ performance=performance, pages_only=pages_only, events_only=events_only, key=key,
+ platform=platform))
+ return data
+
+ ch_sub_query = __get_basic_constraints(time_constraint=False,
+ data={} if platform is None else {"platform": platform})
+
+ if resource_type == "ALL" and not pages_only and not events_only:
+ ch_sub_query.append("positionUTF8(url_hostpath,%(value)s)!=0")
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ arrayJoin(arraySlice(arrayReverseSort(arrayDistinct(groupArray(url))), 1, 5)) AS value,
+ type AS key
+ FROM resources
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY type
+ ORDER BY type ASC;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "value": text})
+ rows = [{"value": i["value"], "type": __get_resource_type_from_db_type(i["key"])} for i in rows]
+ elif resource_type == "ALL" and events_only:
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""(SELECT DISTINCT label AS value, 'INPUT' AS key
+ FROM inputs
+ WHERE {" AND ".join(ch_sub_query)} AND positionUTF8(lowerUTF8(label), %(value)s) != 0
+ LIMIT 10)
+ UNION ALL
+ (SELECT DISTINCT label AS value, 'CLICK' AS key
+ FROM clicks
+ WHERE {" AND ".join(ch_sub_query)} AND positionUTF8(lowerUTF8(label), %(value)s) != 0
+ LIMIT 10)
+ UNION ALL
+ (SELECT DISTINCT url_path AS value, 'LOCATION' AS key
+ FROM pages
+ WHERE {" AND ".join(ch_sub_query)} AND positionUTF8(url_path, %(value)s) != 0
+ LIMIT 10);"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "value": text.lower(),
+ "platform_0": platform})
+ rows = [{"value": i["value"], "type": i["key"]} for i in rows]
+ elif resource_type in ['IMG', 'REQUEST', 'STYLESHEET', 'OTHER', 'SCRIPT'] and not pages_only:
+ ch_sub_query.append("positionUTF8(url_hostpath,%(value)s)!=0")
+ ch_sub_query.append(f"resources.type = '{__get_resource_db_type_from_type(resource_type)}'")
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ DISTINCT url_hostpath AS value,
+ %(resource_type)s AS key
+ FROM resources
+ WHERE {" AND ".join(ch_sub_query)}
+ LIMIT 10;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "value": text,
+ "resource_type": resource_type,
+ "platform_0": platform})
+ rows = [{"value": i["value"], "type": i["key"]} for i in rows]
+ elif resource_type == 'LOCATION':
+ with ch_client.ClickHouseClient() as ch:
+ ch_sub_query.append("positionUTF8(url_path,%(value)s)!=0")
+ ch_query = f"""SELECT
+ DISTINCT url_path AS value,
+ 'LOCATION' AS key
+ FROM pages
+ WHERE {" AND ".join(ch_sub_query)}
+ LIMIT 10;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "value": text,
+ "platform_0": platform})
+ rows = [{"value": i["value"], "type": i["key"]} for i in rows]
+ elif resource_type == "INPUT":
+ with ch_client.ClickHouseClient() as ch:
+ ch_sub_query.append("positionUTF8(lowerUTF8(label), %(value)s) != 0")
+ ch_query = f"""SELECT DISTINCT label AS value, 'INPUT' AS key
+ FROM inputs
+ WHERE {" AND ".join(ch_sub_query)}
+ LIMIT 10;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "value": text.lower(),
+ "platform_0": platform})
+ rows = [{"value": i["value"], "type": i["key"]} for i in rows]
+ elif resource_type == "CLICK":
+ with ch_client.ClickHouseClient() as ch:
+ ch_sub_query.append("positionUTF8(lowerUTF8(label), %(value)s) != 0")
+ ch_query = f"""SELECT DISTINCT label AS value, 'CLICK' AS key
+ FROM clicks
+ WHERE {" AND ".join(ch_sub_query)}
+ LIMIT 10;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "value": text.lower(),
+ "platform_0": platform})
+ rows = [{"value": i["value"], "type": i["key"]} for i in rows]
+ elif resource_type == "METADATA":
+ if key and len(key) > 0 and key in {**METADATA_FIELDS, **SESSIONS_META_FIELDS}.keys():
+ if key in METADATA_FIELDS.keys():
+ ch_sub_query.append(
+ f"positionCaseInsensitiveUTF8(sessions_metadata.{METADATA_FIELDS[key]},%(value)s)>0")
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT DISTINCT sessions_metadata.{METADATA_FIELDS[key]} AS value,
+ %(key)s AS key
+ FROM sessions_metadata INNER JOIN sessions USING(session_id)
+ WHERE {" AND ".join(ch_sub_query)}
+ LIMIT 10;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id, "value": text, "key": key,
+ "platform_0": platform})
+ else:
+ ch_sub_query.append(f"positionCaseInsensitiveUTF8(sessions.{SESSIONS_META_FIELDS[key]},%(value)s)>0")
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT DISTINCT sessions.{SESSIONS_META_FIELDS[key]} AS value,
+ '{key}' AS key
+ FROM sessions
+ WHERE {" AND ".join(ch_sub_query)}
+ LIMIT 10;"""
+ rows = ch.execute(query=ch_query, params={"project_id": project_id, "value": text, "key": key,
+ "platform_0": platform})
+ else:
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = []
+ for k in METADATA_FIELDS.keys():
+ ch_query.append(f"""(SELECT DISTINCT sessions_metadata.{METADATA_FIELDS[k]} AS value,
+ '{k}' AS key
+ FROM sessions_metadata INNER JOIN sessions USING(session_id)
+ WHERE {" AND ".join(ch_sub_query)} AND positionCaseInsensitiveUTF8(sessions_metadata.{METADATA_FIELDS[k]},%(value)s)>0
+ LIMIT 10)""")
+ for k in SESSIONS_META_FIELDS.keys():
+ if k in ["platform", "country"]:
+ continue
+ ch_query.append(f"""(SELECT DISTINCT sessions.{SESSIONS_META_FIELDS[k]} AS value,
+ '{k}' AS key
+ FROM sessions
+ WHERE {" AND ".join(ch_sub_query)} AND positionCaseInsensitiveUTF8(sessions.{SESSIONS_META_FIELDS[k]},%(value)s)>0
+ LIMIT 10)""")
+ ch_query = " UNION ALL ".join(ch_query)
+
+ rows = ch.execute(query=ch_query, params={"project_id": project_id, "value": text, "key": key,
+ "platform_0": platform})
+ else:
+ return []
+ return [helper.dict_to_camel_case(row) for row in rows]
+
+
+# def frustration_sessions(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+# endTimestamp=TimeUTC.now(), **args):
+# with pg_client.PostgresClient() as cur:
+# sub_q = ""
+# if platform == 'mobile':
+# sub_q = "AND s.user_device_type = 'mobile' AND s.project_id = %(project_id)s AND s.start_ts >= %(startTimestamp)s AND s.start_ts < %(endTimestamp)s"
+# elif platform == 'desktop':
+# sub_q = "AND s.user_device_type = 'desktop' AND s.project_id = %(project_id)s AND s.start_ts >= %(startTimestamp)s AND s.start_ts < %(endTimestamp)s"
+#
+# cur.execute(cur.mogrify(f"""\
+# SELECT s.project_id,
+# s.session_id::text AS session_id,
+# s.*
+# FROM public.sessions AS s
+# LEFT JOIN public.session_watchdogs AS sw ON s.session_id=sw.session_id
+# LEFT JOIN public.watchdogs AS w ON w.watchdog_id=sw.watchdog_id
+# WHERE s.project_id = %(project_id)s
+# AND w.type='clickrage'
+# AND s.start_ts>=%(startTimestamp)s
+# AND s.start_ts<=%(endTimestamp)s
+# {sub_q}
+# ORDER BY s.session_id DESC
+# LIMIT 5;""",
+# {"project_id": project_id, "startTimestamp": startTimestamp,
+# "endTimestamp": endTimestamp}))
+# return helper.list_to_camel_case(cur.fetchall())
+
+
+def get_missing_resources_trend(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(),
+ density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query = __get_basic_constraints(table_name="resources", data=args)
+ ch_sub_query.append("resources.success = 0")
+ ch_sub_query.append("resources.type != 'fetch'")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ resources.url_hostpath AS key,
+ COUNT(resources.session_id) AS doc_count
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY url_hostpath
+ ORDER BY doc_count DESC
+ LIMIT 10;"""
+ rows = ch.execute(query=ch_query, params={"project_id": project_id, "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+
+ rows = [{"url": i["key"], "sessions": i["doc_count"]} for i in rows]
+ if len(rows) == 0:
+ return []
+ ch_sub_query.append("resources.url_hostpath = %(value)s")
+ ch_query = f"""SELECT
+ toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second ))*1000 AS timestamp,
+ COUNT(resources.session_id) AS doc_count,
+ toUnixTimestamp(MAX(resources.datetime))*1000 AS max_datatime
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ for e in rows:
+ e["startedAt"] = startTimestamp
+ e["startTimestamp"] = startTimestamp
+ e["endTimestamp"] = endTimestamp
+
+ r = ch.execute(query=ch_query,
+ params={"step_size": step_size, "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "value": e["url"],
+ **__get_constraint_values(args)})
+
+ e["endedAt"] = r[-1]["max_datatime"]
+ e["chart"] = [{"timestamp": i["timestamp"], "count": i["doc_count"]} for i in
+ __complete_missing_steps(rows=r, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"doc_count": 0})]
+ return rows
+
+
+def get_network(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(),
+ density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second ))*1000 AS timestamp,
+ resources.url_hostpath, COUNT(resources.session_id) AS doc_count
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp, resources.url_hostpath
+ ORDER BY timestamp;"""
+ r = ch.execute(query=ch_query,
+ params={"step_size": step_size, "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+
+ results = []
+
+ i = 0
+ while i < len(r):
+ results.append({"timestamp": r[i]["timestamp"], "domains": []})
+ i += 1
+ while i < len(r) and r[i]["timestamp"] == results[-1]["timestamp"]:
+ results[-1]["domains"].append({r[i]["url_hostpath"]: r[i]["doc_count"]})
+ i += 1
+
+ return {"startTimestamp": startTimestamp, "endTimestamp": endTimestamp, "chart": results}
+
+
+KEYS = {
+ 'startTimestamp': args_transformer.int_arg,
+ 'endTimestamp': args_transformer.int_arg,
+ 'density': args_transformer.int_arg,
+ 'performanceDensity': args_transformer.int_arg,
+ 'platform': args_transformer.string
+}
+
+
+def dashboard_args(params):
+ args = {}
+ if params is not None:
+ for key in params.keys():
+ if key in KEYS.keys():
+ args[key] = KEYS[key](params.get(key))
+ return args
+
+
+def get_resources_loading_time(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(),
+ density=19, type=None, url=None, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ if type is not None:
+ ch_sub_query_chart.append(f"resources.type = '{__get_resource_db_type_from_type(type)}'")
+ if url is not None:
+ ch_sub_query_chart.append(f"resources.url = %(value)s")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second ))*1000 AS timestamp,
+ AVG(NULLIF(resources.duration,0)) AS avg
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ params = {"step_size": step_size, "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "value": url, "type": type, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ ch_query = f"""SELECT AVG(NULLIF(resources.duration,0)) AS avg
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)};"""
+ avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0
+ return {"avg": avg, "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"avg": 0})}
+
+
+def get_pages_dom_build_time(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=19, url=None, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart = __get_basic_constraints(table_name="pages", round_start=True, data=args)
+ if url is not None:
+ ch_sub_query_chart.append(f"pages.url_path = %(value)s")
+ ch_sub_query_chart.append("isNotNull(pages.dom_building_time)")
+ ch_sub_query_chart.append("pages.dom_building_time>0")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ toUnixTimestamp(toStartOfInterval(pages.datetime, INTERVAL %(step_size)s second ))*1000 AS timestamp,
+ AVG(pages.dom_building_time) AS avg
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ params = {"step_size": step_size, "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "value": url, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ ch_query = f"""SELECT AVG(pages.dom_building_time) AS avg
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)};"""
+ avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0
+ return {"avg": avg,
+ "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density, neutral={"avg": 0})}
+
+
+def get_slowest_resources(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), type="all", density=19, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query = __get_basic_constraints(table_name="resources", data=args)
+ ch_sub_query_chart = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+ ch_sub_query_chart += meta_condition
+
+ if type is not None and type.upper() != "ALL":
+ sq = f"resources.type = '{__get_resource_db_type_from_type(type.upper())}'"
+ else:
+ sq = "resources.type != 'fetch'"
+ ch_sub_query.append(sq)
+ ch_sub_query_chart.append(sq)
+ ch_sub_query_chart.append("isNotNull(resources.duration)")
+ ch_sub_query_chart.append("resources.duration>0")
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ splitByChar('/', resources.url_hostpath)[-1] AS name,
+ AVG(NULLIF(resources.duration,0)) AS avg
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY name
+ ORDER BY avg DESC
+ LIMIT 10;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ ch_sub_query_chart.append("endsWith(resources.url_hostpath, %(url)s)>0")
+ ch_sub_query.append(ch_sub_query_chart[-1])
+ results = []
+ for r in rows:
+ # if isinstance(r["url"], bytes):
+ # try:
+ # r["url"] = r["url"].decode("utf-8")
+ # except UnicodeDecodeError:
+ # continue
+ ch_query = f"""SELECT
+ toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second ))*1000 AS timestamp,
+ AVG(resources.duration) AS avg
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ chart = ch.execute(query=ch_query,
+ params={"step_size": step_size, "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "url": r["name"], **__get_constraint_values(args)})
+ r["chart"] = __complete_missing_steps(rows=chart, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density, neutral={"avg": 0})
+ ch_query = f"""SELECT url, type
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ ORDER BY duration DESC
+ LIMIT 1;"""
+ url = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "url": r["name"], **__get_constraint_values(args)})
+ r["url"] = url[0]["url"]
+ r["type"] = __get_resource_type_from_db_type(url[0]["type"])
+ results.append(r)
+
+ return results
+
+
+def get_sessions_location(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), **args):
+ ch_sub_query = __get_basic_constraints(table_name="sessions", data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT user_country, COUNT(session_id) AS count
+ FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY user_country
+ ORDER BY user_country;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ return {"count": sum(i["count"] for i in rows), "chart": helper.list_to_camel_case(rows)}
+
+
+def get_speed_index_location(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), **args):
+ ch_sub_query = __get_basic_constraints(table_name="pages", data=args)
+ ch_sub_query.append("isNotNull(pages.speed_index)")
+ ch_sub_query.append("pages.speed_index>0")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT pages.user_country, AVG(pages.speed_index) AS avg
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY pages.user_country
+ ORDER BY avg,pages.user_country;"""
+ params = {"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ ch_query = f"""SELECT AVG(pages.speed_index) AS avg
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)};"""
+ avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0
+ return {"avg": avg, "chart": helper.list_to_camel_case(rows)}
+
+
+def get_pages_response_time(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=7, url=None, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart = __get_basic_constraints(table_name="pages", round_start=True, data=args)
+ ch_sub_query_chart.append("isNotNull(pages.response_time)")
+ ch_sub_query_chart.append("pages.response_time>0")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+
+ if url is not None:
+ ch_sub_query_chart.append(f"url_path = %(value)s")
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(pages.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ AVG(pages.response_time) AS avg
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ params = {"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "value": url, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ ch_query = f"""SELECT AVG(pages.response_time) AS avg
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)};"""
+ avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0
+ return {"avg": avg,
+ "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density, neutral={"avg": 0})}
+
+
+def get_pages_response_time_distribution(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=20, **args):
+ ch_sub_query = __get_basic_constraints(table_name="pages", data=args)
+ ch_sub_query.append("isNotNull(pages.response_time)")
+ ch_sub_query.append("pages.response_time>0")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT pages.response_time AS response_time,
+ COUNT(pages.session_id) AS count
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY response_time
+ ORDER BY response_time;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ ch_query = f"""SELECT AVG(pages.response_time) AS avg
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)};"""
+ avg = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})[0]["avg"]
+ quantiles_keys = [50, 90, 95, 99]
+ ch_query = f"""SELECT quantilesExact({",".join([str(i / 100) for i in quantiles_keys])})(pages.response_time) AS values
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)};"""
+ quantiles = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ result = {
+ "avg": avg,
+ "total": sum(r["count"] for r in rows),
+ "chart": [],
+ "percentiles": [{
+ "percentile": v,
+ "responseTime": (
+ quantiles[0]["values"][i] if quantiles[0]["values"][i] is not None and not math.isnan(
+ quantiles[0]["values"][i]) else 0)} for i, v in enumerate(quantiles_keys)
+ ],
+ "extremeValues": [{"count": 0}]
+ }
+ if len(rows) > 0:
+ rows = helper.list_to_camel_case(rows)
+ _99 = result["percentiles"][-1]["responseTime"]
+ extreme_values_first_index = -1
+ for i, r in enumerate(rows):
+ if r["responseTime"] > _99:
+ extreme_values_first_index = i
+ break
+
+ if extreme_values_first_index >= 0:
+ extreme_values_first_index += 1
+ result["extremeValues"][0]["count"] = sum(r["count"] for r in rows[extreme_values_first_index:])
+ # result["extremeValues"][0]["responseTime"] = rows[extreme_values_first_index]["responseTime"]
+
+ rows = rows[:extreme_values_first_index]
+
+ # ------- Merge points to reduce chart length till density
+ if density < len(quantiles_keys):
+ density = len(quantiles_keys)
+
+ while len(rows) > density:
+ true_length = len(rows)
+ rows_partitions = []
+ offset = 0
+ for p in result["percentiles"]:
+ rows_partitions.append([])
+ for r in rows[offset:]:
+ if r["responseTime"] < p["responseTime"]:
+ rows_partitions[-1].append(r)
+ offset += 1
+ else:
+ break
+ rows_partitions.append(rows[offset:])
+ # print(f"len rows partition: {len(rows_partitions)}")
+ # for r in rows_partitions:
+ # print(f"{r[0]} => {sum(v['count'] for v in r)}")
+
+ largest_partition = 0
+ for i in range(len(rows_partitions)):
+ if len(rows_partitions[i]) > len(rows_partitions[largest_partition]):
+ largest_partition = i
+ # print(f"largest partition: {len(rows_partitions[largest_partition])}")
+
+ if len(rows_partitions[largest_partition]) <= 2:
+ break
+ # computing lowest merge diff
+ diff = rows[-1]["responseTime"]
+ for i in range(1, len(rows_partitions[largest_partition]) - 1, 1):
+ v1 = rows_partitions[largest_partition][i]
+ v2 = rows_partitions[largest_partition][i + 1]
+ if (v2["responseTime"] - v1["responseTime"]) < diff:
+ diff = v2["responseTime"] - v1["responseTime"]
+ # print(f"lowest merge diff: {diff}")
+ i = 1
+ while i < len(rows_partitions[largest_partition]) - 1 and true_length > density - 1:
+ v1 = rows_partitions[largest_partition][i]
+ v2 = rows_partitions[largest_partition][i + 1]
+ if (v2["responseTime"] - v1["responseTime"]) == diff:
+ rows_partitions[largest_partition][i]["count"] += v2["count"]
+ rows_partitions[largest_partition][i]["responseTime"] = v2["responseTime"]
+ del rows_partitions[largest_partition][i + 1]
+ true_length -= 1
+ else:
+ i += 1
+
+ rows = [r for rp in rows_partitions for r in rp]
+
+ if extreme_values_first_index == len(rows):
+ rows.append({"count": 0, "responseTime": rows[-1]["responseTime"] + 10})
+
+ result["chart"] = rows
+
+ return result
+
+
+def get_busiest_time_of_day(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), **args):
+ ch_sub_query = __get_basic_constraints(table_name="sessions", data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ intDiv(toHour(sessions.datetime),2)*2 AS hour,
+ COUNT(sessions.session_id) AS count
+ FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY hour
+ ORDER BY hour ASC;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ return __complete_missing_steps(rows=rows, start_time=0, end_time=24000, density=12,
+ neutral={"count": 0},
+ time_key="hour", time_coefficient=1)
+
+
+def get_top_metrics(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), value=None, **args):
+ ch_sub_query = __get_basic_constraints(table_name="pages", data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ if value is not None:
+ ch_sub_query.append("pages.url_path = %(value)s")
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT (SELECT COALESCE(AVG(pages.response_time),0) FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} WHERE {" AND ".join(ch_sub_query)} AND isNotNull(pages.response_time) AND pages.response_time>0) AS avg_response_time,
+ (SELECT COUNT(pages.session_id) FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} WHERE {" AND ".join(ch_sub_query)}) AS count_requests,
+ (SELECT COALESCE(AVG(pages.first_paint),0) FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} WHERE {" AND ".join(ch_sub_query)} AND isNotNull(pages.first_paint) AND pages.first_paint>0) AS avg_first_paint,
+ (SELECT COALESCE(AVG(pages.dom_content_loaded_event_time),0) FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} WHERE {" AND ".join(ch_sub_query)} AND isNotNull(pages.dom_content_loaded_event_time) AND pages.dom_content_loaded_event_time>0) AS avg_dom_content_loaded,
+ (SELECT COALESCE(AVG(pages.ttfb),0) FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} WHERE {" AND ".join(ch_sub_query)} AND isNotNull(pages.ttfb) AND pages.ttfb>0) AS avg_till_first_bit,
+ (SELECT COALESCE(AVG(pages.time_to_interactive),0) FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} WHERE {" AND ".join(ch_sub_query)} AND isNotNull(pages.time_to_interactive) AND pages.time_to_interactive >0) AS avg_time_to_interactive;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "value": value, **__get_constraint_values(args)})
+ return helper.dict_to_camel_case(rows[0])
+
+
+def get_time_to_render(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=7, url=None, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart = __get_basic_constraints(table_name="pages", round_start=True, data=args)
+ ch_sub_query_chart.append("isNotNull(pages.visually_complete)")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+
+ if url is not None:
+ ch_sub_query_chart.append("pages.url_path = %(value)s")
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(pages.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ AVG(pages.visually_complete) AS avg
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ params = {"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, "value": url, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ ch_query = f"""SELECT AVG(pages.visually_complete) AS avg
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)};"""
+ avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0
+ return {"avg": avg, "chart": __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp, density=density,
+ neutral={"avg": 0})}
+
+
+def get_impacted_sessions_by_slow_pages(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), value=None, density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query = __get_basic_constraints(table_name="pages", round_start=True, data=args)
+ ch_sub_query.append("isNotNull(pages.response_time)")
+ ch_sub_query.append("pages.response_time>0")
+ sch_sub_query = ch_sub_query[:]
+ if value is not None:
+ ch_sub_query.append("pages.url_path = %(value)s")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(pages.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ COUNT(DISTINCT pages.session_id) AS count
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ AND (pages.response_time)>(SELECT AVG(pages.response_time)
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(sch_sub_query)})*2
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ rows = ch.execute(query=ch_query,
+ params={"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "value": value, **__get_constraint_values(args)})
+ return __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp, density=density,
+ neutral={"count": 0})
+
+
+def get_memory_consumption(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart = __get_basic_constraints(table_name="performance", round_start=True,
+ data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(performance.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ AVG(performance.avg_used_js_heap_size) AS avg_used_js_heap_size
+ FROM performance {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp ASC;"""
+ params = {"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ ch_query = f"""SELECT AVG(performance.avg_used_js_heap_size) AS avg
+ FROM performance {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)};"""
+ avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0
+ return {"avgUsedJsHeapSize": avg,
+ "chart": helper.list_to_camel_case(__complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"avg_used_js_heap_size": 0}))}
+
+
+def get_avg_cpu(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart = __get_basic_constraints(table_name="performance", round_start=True,
+ data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(performance.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ AVG(performance.avg_cpu) AS avg_cpu
+ FROM performance {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp ASC;"""
+ params = {"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ ch_query = f"""SELECT AVG(performance.avg_cpu) AS avg
+ FROM performance {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)};"""
+ avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0
+ return {"avgCpu": avg,
+ "chart": helper.list_to_camel_case(__complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"avg_cpu": 0}))}
+
+
+def get_avg_fps(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart = __get_basic_constraints(table_name="performance", round_start=True,
+ data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(performance.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ AVG(performance.avg_fps) AS avg_fps
+ FROM performance {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp ASC;"""
+ params = {"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ ch_query = f"""SELECT AVG(performance.avg_fps) AS avg
+ FROM performance {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)};"""
+ avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0
+ return {"avgFps": avg,
+ "chart": helper.list_to_camel_case(__complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"avg_fps": 0}))}
+
+
+def __get_crashed_sessions_ids(project_id, startTimestamp, endTimestamp):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ f"""\
+ SELECT session_id
+ FROM public.sessions
+ WHERE sessions.project_id = %(project_id)s
+ AND 'crash' = ANY (sessions.issue_types)
+ AND sessions.start_ts >= %(startDate)s
+ AND sessions.start_ts <= %(endDate)s;""",
+ {"project_id": project_id, "startDate": startTimestamp, "endDate": endTimestamp}
+ )
+ cur.execute(query=query)
+ return [r["session_id"] for r in cur.fetchall()]
+
+
+def get_crashes(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ session_ids = __get_crashed_sessions_ids(project_id, startTimestamp, endTimestamp)
+ if len(session_ids) > 0:
+ session_ids = tuple(session_ids)
+ ch_sub_query = __get_basic_constraints(table_name="sessions", round_start=True, data=args)
+ ch_sub_query.append("sessions.session_id IN %(session_ids)s")
+ ch_sub_query_chart = __get_basic_constraints(table_name="sessions", round_start=True,
+ data=args)
+ ch_sub_query_chart.append("sessions.session_id IN %(session_ids)s")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(sessions.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ COUNT(sessions.session_id) AS count
+ FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ rows = ch.execute(query=ch_query,
+ params={"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "session_ids": session_ids, **__get_constraint_values(args)})
+ ch_query = f"""SELECT b.user_browser AS browser,
+ sum(bv.count) AS total,
+ groupArray([bv.user_browser_version, toString(bv.count)]) AS versions
+ FROM (
+ SELECT sessions.user_browser
+ FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY sessions.user_browser
+ ORDER BY COUNT(sessions.session_id) DESC
+ LIMIT 3
+ ) AS b
+ INNER JOIN
+ (
+ SELECT sessions.user_browser,
+ sessions.user_browser_version,
+ COUNT(sessions.session_id) AS count
+ FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY sessions.user_browser,
+ sessions.user_browser_version
+ ORDER BY count DESC
+ ) AS bv USING (user_browser)
+ GROUP BY b.user_browser
+ ORDER BY b.user_browser;"""
+ browsers = ch.execute(query=ch_query,
+ params={"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "session_ids": session_ids, **__get_constraint_values(args)})
+ total = sum(r["total"] for r in browsers)
+ for r in browsers:
+ r["percentage"] = r["total"] / (total / 100)
+ versions = []
+ for i in range(len(r["versions"][:3])):
+ versions.append({r["versions"][i][0]: int(r["versions"][i][1]) / (r["total"] / 100)})
+ r["versions"] = versions
+ else:
+ rows = []
+ browsers = []
+ result = {"chart": __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"count": 0}),
+ "browsers": browsers}
+ return result
+
+
+def __get_domains_errors_neutral(rows):
+ neutral = {l: 0 for l in [i for k in [list(v.keys()) for v in rows] for i in k]}
+ if len(neutral.keys()) == 0:
+ neutral = {"All": 0}
+ return neutral
+
+
+def __merge_rows_with_neutral(rows, neutral):
+ for i in range(len(rows)):
+ rows[i] = {**neutral, **rows[i]}
+ return rows
+
+
+def get_domains_errors(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=6, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ ch_sub_query.append("intDiv(resources.status, 100) == %(status_code)s")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT timestamp,
+ groupArray([domain, toString(count)]) AS keys
+ FROM (SELECT toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ resources.url_host AS domain, COUNT(resources.session_id) AS count
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY timestamp,resources.url_host
+ ORDER BY timestamp, count DESC
+ LIMIT 5) AS domain_stats
+ GROUP BY timestamp;"""
+ params = {"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "step_size": step_size,
+ "status_code": 4, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ rows = __nested_array_to_dict_array(rows)
+ neutral = __get_domains_errors_neutral(rows)
+ rows = __merge_rows_with_neutral(rows, neutral)
+
+ result = {"4xx": __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density, neutral=neutral)}
+ params["status_code"] = 5
+ rows = ch.execute(query=ch_query, params=params)
+ rows = __nested_array_to_dict_array(rows)
+ neutral = __get_domains_errors_neutral(rows)
+ rows = __merge_rows_with_neutral(rows, neutral)
+ result["5xx"] = __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density, neutral=neutral)
+ return result
+
+
+def get_domains_errors_4xx(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=6, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ ch_sub_query.append("intDiv(resources.status, 100) == %(status_code)s")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT timestamp,
+ groupArray([domain, toString(count)]) AS keys
+ FROM (SELECT toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ resources.url_host AS domain, COUNT(resources.session_id) AS count
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY timestamp,resources.url_host
+ ORDER BY timestamp, count DESC
+ LIMIT 5) AS domain_stats
+ GROUP BY timestamp;"""
+ params = {"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "step_size": step_size,
+ "status_code": 4, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ rows = __nested_array_to_dict_array(rows)
+ neutral = __get_domains_errors_neutral(rows)
+ rows = __merge_rows_with_neutral(rows, neutral)
+
+ return __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density, neutral=neutral)
+
+
+def get_domains_errors_5xx(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=6, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ ch_sub_query.append("intDiv(resources.status, 100) == %(status_code)s")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT timestamp,
+ groupArray([domain, toString(count)]) AS keys
+ FROM (SELECT toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ resources.url_host AS domain, COUNT(resources.session_id) AS count
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY timestamp,resources.url_host
+ ORDER BY timestamp, count DESC
+ LIMIT 5) AS domain_stats
+ GROUP BY timestamp;"""
+ params = {"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp,
+ "step_size": step_size,
+ "status_code": 5, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ rows = __nested_array_to_dict_array(rows)
+ neutral = __get_domains_errors_neutral(rows)
+ rows = __merge_rows_with_neutral(rows, neutral)
+
+ return __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density, neutral=neutral)
+
+
+def __nested_array_to_dict_array(rows):
+ for r in rows:
+ for i in range(len(r["keys"])):
+ r[r["keys"][i][0]] = int(r["keys"][i][1])
+ r.pop("keys")
+ return rows
+
+
+def get_slowest_domains(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), **args):
+ ch_sub_query = __get_basic_constraints(table_name="resources", data=args)
+ ch_sub_query.append("isNotNull(resources.duration)")
+ ch_sub_query.append("resources.duration>0")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ resources.url_host AS domain,
+ AVG(resources.duration) AS avg
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY resources.url_host
+ ORDER BY avg DESC
+ LIMIT 5;"""
+ params = {"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)}
+ rows = ch.execute(query=ch_query, params=params)
+ ch_query = f"""SELECT AVG(resources.duration) AS avg
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)};"""
+ avg = ch.execute(query=ch_query, params=params)[0]["avg"] if len(rows) > 0 else 0
+ return {"avg": avg, "partition": rows}
+
+
+def get_errors_per_domains(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), **args):
+ ch_sub_query = __get_basic_constraints(table_name="resources", data=args)
+ ch_sub_query.append("resources.success = 0")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ resources.url_host AS domain,
+ COUNT(resources.session_id) AS errors_count
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY resources.url_host
+ ORDER BY errors_count DESC
+ LIMIT 10;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ return helper.list_to_camel_case(rows)
+
+
+def get_sessions_per_browser(project_id, startTimestamp=TimeUTC.now(delta_days=-1), endTimestamp=TimeUTC.now(),
+ platform=None, **args):
+ ch_sub_query = __get_basic_constraints(table_name="sessions", data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ b.user_browser AS browser,
+ b.count,
+ groupArray([bv.user_browser_version, toString(bv.count)]) AS versions
+ FROM
+ (
+ SELECT
+ sessions.user_browser,
+ COUNT(sessions.session_id) AS count
+ FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY sessions.user_browser
+ ORDER BY count DESC
+ LIMIT 3
+ ) AS b
+ INNER JOIN
+ (
+ SELECT
+ sessions.user_browser,
+ sessions.user_browser_version,
+ COUNT(sessions.session_id) AS count
+ FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY
+ sessions.user_browser,
+ sessions.user_browser_version
+ ORDER BY count DESC
+ LIMIT 3
+ ) AS bv USING (user_browser)
+ GROUP BY
+ b.user_browser, b.count
+ ORDER BY b.count DESC;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ for i, r in enumerate(rows):
+ versions = {}
+ for j in range(len(r["versions"])):
+ versions[r["versions"][j][0]] = int(r["versions"][j][1])
+ r.pop("versions")
+ rows[i] = {**r, **versions}
+ return {"count": sum(i["count"] for i in rows), "chart": rows}
+
+
+def get_calls_errors(project_id, startTimestamp=TimeUTC.now(delta_days=-1), endTimestamp=TimeUTC.now(),
+ platform=None, **args):
+ ch_sub_query = __get_basic_constraints(table_name="resources", data=args)
+ ch_sub_query.append("resources.type = 'fetch'")
+ ch_sub_query.append("intDiv(resources.status, 100) != 2")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT resources.method,
+ resources.url_hostpath,
+ COUNT(resources.session_id) AS all_requests,
+ SUM(if(intDiv(resources.status, 100) == 4, 1, 0)) AS _4xx,
+ SUM(if(intDiv(resources.status, 100) == 5, 1, 0)) AS _5xx
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY resources.method, resources.url_hostpath
+ ORDER BY (_4xx + _5xx), all_requests DESC
+ LIMIT 50;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ return helper.list_to_camel_case(rows)
+
+
+def get_calls_errors_4xx(project_id, startTimestamp=TimeUTC.now(delta_days=-1), endTimestamp=TimeUTC.now(),
+ platform=None, **args):
+ ch_sub_query = __get_basic_constraints(table_name="resources", data=args)
+ ch_sub_query.append("resources.type = 'fetch'")
+ ch_sub_query.append("intDiv(resources.status, 100) == 4")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT resources.method,
+ resources.url_hostpath,
+ COUNT(resources.session_id) AS all_requests
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY resources.method, resources.url_hostpath
+ ORDER BY all_requests DESC
+ LIMIT 10;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ return helper.list_to_camel_case(rows)
+
+
+def get_calls_errors_5xx(project_id, startTimestamp=TimeUTC.now(delta_days=-1), endTimestamp=TimeUTC.now(),
+ platform=None, **args):
+ ch_sub_query = __get_basic_constraints(table_name="resources", data=args)
+ ch_sub_query.append("resources.type = 'fetch'")
+ ch_sub_query.append("intDiv(resources.status, 100) == 5")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT resources.method,
+ resources.url_hostpath,
+ COUNT(resources.session_id) AS all_requests
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY resources.method, resources.url_hostpath
+ ORDER BY all_requests DESC
+ LIMIT 10;"""
+ rows = ch.execute(query=ch_query,
+ params={"project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ return helper.list_to_camel_case(rows)
+
+
+def get_errors_per_type(project_id, startTimestamp=TimeUTC.now(delta_days=-1), endTimestamp=TimeUTC.now(),
+ platform=None, density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart_r = __get_basic_constraints(table_name="resources", round_start=True,
+ data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart_r += meta_condition
+ ch_sub_query_chart_e = __get_basic_constraints(table_name="errors", round_start=True, data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart_e += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ SUM(count_4xx) AS _4xx,
+ SUM(count_5xx) AS _5xx,
+ SUM(count_js) AS js,
+ SUM(count_be) AS integrations
+ FROM ((SELECT resources.datetime, 1 AS count_4xx, 0 AS count_5xx, 0 AS count_js, 0 AS count_be
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart_r)} AND resources.type = 'fetch' AND intDiv(resources.status, 100) == 4)
+ UNION ALL
+ (SELECT resources.datetime, 0 AS count_4xx, 1 AS count_5xx, 0 AS count_js, 0 AS count_be
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart_r)} AND resources.type = 'fetch' AND intDiv(resources.status, 100) == 5)
+ UNION ALL
+ (SELECT errors.datetime, 0 AS count_4xx, 0 AS count_5xx, 1 AS count_js, 0 AS count_be
+ FROM errors {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart_e)} AND errors.source == 'js_exception')
+ UNION ALL
+ (SELECT errors.datetime, 0 AS count_4xx, 0 AS count_5xx, 0 AS count_js, 1 AS count_be
+ FROM errors {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart_e)} AND errors.source != 'js_exception')
+ ) AS errors_partition
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ params = {"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)}
+ rows = helper.list_to_camel_case(ch.execute(query=ch_query, params=params))
+ for r in rows:
+ print(r)
+ return __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"4xx": 0,
+ "5xx": 0,
+ "js": 0,
+ "integrations": 0})
+
+
+def resource_type_vs_response_end(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ ch_sub_query_chart_response_end = __get_basic_constraints(table_name="pages", round_start=True,
+ data=args)
+ ch_sub_query_chart_response_end.append("isNotNull(pages.response_end)")
+ ch_sub_query_chart_response_end.append("pages.response_end>0")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+ ch_sub_query_chart_response_end += meta_condition
+ params = {"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)}
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ COUNT(resources.session_id) AS total,
+ SUM(if(resources.type='fetch',1,0)) AS xhr
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ actions = ch.execute(query=ch_query, params=params)
+ actions = __complete_missing_steps(rows=actions, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"total": 0, "xhr": 0})
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(pages.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ AVG(pages.response_end) AS avg_response_end
+ FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart_response_end)}
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ response_end = ch.execute(query=ch_query, params=params)
+ response_end = __complete_missing_steps(rows=response_end, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"avg_response_end": 0})
+ return helper.list_to_camel_case(__merge_charts(response_end, actions))
+
+
+def get_impacted_sessions_by_js_errors(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart = __get_basic_constraints(table_name="errors", round_start=True, data=args)
+ ch_sub_query_chart.append("errors.source == 'js_exception'")
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(errors.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ COUNT(DISTINCT errors.session_id) AS sessions_count,
+ COUNT(DISTINCT errors.error_id) AS errors_count
+ FROM errors {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp
+ ORDER BY timestamp;;"""
+ rows = ch.execute(query=ch_query,
+ params={"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ ch_query = f"""SELECT COUNT(DISTINCT errors.session_id) AS sessions_count,
+ COUNT(DISTINCT errors.error_id) AS errors_count
+ FROM errors {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)};"""
+ counts = ch.execute(query=ch_query,
+ params={"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ return {"sessionsCount": counts[0]["sessions_count"],
+ "errorsCount": counts[0]["errors_count"],
+ "chart": helper.list_to_camel_case(__complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"sessions_count": 0,
+ "errors_count": 0}))}
+
+
+def get_resources_vs_visually_complete(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query = __get_basic_constraints(table_name="resources", data=args)
+ ch_sub_query_chart = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT
+ toUnixTimestamp(toStartOfInterval(s.base_datetime, toIntervalSecond(%(step_size)s))) * 1000 AS timestamp,
+ AVG(NULLIF(s.count,0)) AS avg,
+ groupArray([toString(t.type), toString(t.xavg)]) AS types
+ FROM
+ ( SELECT
+ resources.session_id,
+ MIN(resources.datetime) AS base_datetime,
+ COUNT(resources.url) AS count
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY resources.session_id
+ ) AS s
+ INNER JOIN
+ (SELECT session_id,
+ type,
+ AVG(NULLIF(count,0)) AS xavg
+ FROM (SELECT resources.session_id, resources.type, COUNT(resources.url) AS count
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY resources.session_id, resources.type) AS ss
+ GROUP BY ss.session_id, ss.type) AS t USING (session_id)
+ GROUP BY timestamp
+ ORDER BY timestamp ASC;"""
+ rows = ch.execute(query=ch_query,
+ params={"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ for r in rows:
+ types = {}
+ for i in range(len(r["types"])):
+ if r["types"][i][0] not in types:
+ types[r["types"][i][0]] = []
+ types[r["types"][i][0]].append(float(r["types"][i][1]))
+ for i in types:
+ types[i] = sum(types[i]) / len(types[i])
+ r["types"] = types
+ resources = __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"avg": 0, "types": {}})
+ time_to_render = get_time_to_render(project_id=project_id, startTimestamp=startTimestamp,
+ endTimestamp=endTimestamp, density=density,
+ **args)
+
+ return helper.list_to_camel_case(
+ __merge_charts(
+ [{"timestamp": i["timestamp"], "avgCountResources": i["avg"], "types": i["types"]} for i in resources],
+ [{"timestamp": i["timestamp"], "avgTimeToRender": i["avg"]} for i in
+ time_to_render["chart"]]))
+
+
+def get_resources_count_by_type(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query_chart = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query_chart += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT timestamp,
+ groupArray([toString(t.type), toString(t.count)]) AS types
+ FROM(SELECT toUnixTimestamp(toStartOfInterval(resources.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ resources.type,
+ COUNT(resources.session_id) AS count
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query_chart)}
+ GROUP BY timestamp,resources.type
+ ORDER BY timestamp) AS t
+ GROUP BY timestamp;"""
+ rows = ch.execute(query=ch_query,
+ params={"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ for r in rows:
+ for t in r["types"]:
+ r[t[0]] = t[1]
+ r.pop("types")
+ return __complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={k: 0 for k in RESOURCS_TYPE_TO_DB_TYPE.keys()})
+
+
+def get_resources_by_party(project_id, startTimestamp=TimeUTC.now(delta_days=-1),
+ endTimestamp=TimeUTC.now(), density=7, **args):
+ step_size = __get_step_size(startTimestamp, endTimestamp, density)
+ ch_sub_query = __get_basic_constraints(table_name="resources", round_start=True, data=args)
+ ch_sub_query.append("resources.success = 0")
+ sch_sub_query = ["rs.project_id =toUInt32(%(project_id)s)", "rs.type IN ('fetch','script')"]
+ meta_condition = __get_meta_constraint(args)
+ ch_sub_query += meta_condition
+ # sch_sub_query += meta_condition
+
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(sub_resources.datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ SUM(if(first.url_host = sub_resources.url_host, 1, 0)) AS first_party,
+ SUM(if(first.url_host = sub_resources.url_host, 0, 1)) AS third_party
+ FROM
+ (
+ SELECT resources.datetime, resources.url_host
+ FROM resources {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""}
+ WHERE {" AND ".join(ch_sub_query)}
+ ) AS sub_resources
+ CROSS JOIN
+ (
+ SELECT
+ rs.url_host,
+ COUNT(rs.session_id) AS count
+ FROM resources AS rs
+ WHERE {" AND ".join(sch_sub_query)}
+ GROUP BY rs.url_host
+ ORDER BY count DESC
+ LIMIT 1
+ ) AS first
+ GROUP BY timestamp
+ ORDER BY timestamp;"""
+ rows = ch.execute(query=ch_query,
+ params={"step_size": step_size,
+ "project_id": project_id,
+ "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp, **__get_constraint_values(args)})
+ return helper.list_to_camel_case(__complete_missing_steps(rows=rows, start_time=startTimestamp,
+ end_time=endTimestamp,
+ density=density,
+ neutral={"first_party": 0,
+ "third_party": 0}))
diff --git a/ee/api/chalicelib/ee/errors.py b/ee/api/chalicelib/ee/errors.py
new file mode 100644
index 000000000..f172c16b0
--- /dev/null
+++ b/ee/api/chalicelib/ee/errors.py
@@ -0,0 +1,788 @@
+import json
+
+from chalicelib.utils import pg_client, helper
+from chalicelib.ee.utils import ch_client
+from chalicelib.core import sourcemaps, sessions
+from chalicelib.ee import dashboard
+from chalicelib.utils.TimeUTC import TimeUTC
+
+
+def get(error_id, family=False):
+ if family:
+ return get_batch([error_id])
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ "SELECT * FROM events.errors AS e INNER JOIN public.errors AS re USING(error_id) WHERE error_id = %(error_id)s;",
+ {"error_id": error_id})
+ cur.execute(query=query)
+ result = cur.fetchone()
+ if result is not None:
+ result["stacktrace_parsed_at"] = TimeUTC.datetime_to_timestamp(result["stacktrace_parsed_at"])
+ return helper.dict_to_camel_case(result)
+
+
+def get_batch(error_ids):
+ if len(error_ids) == 0:
+ return []
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ """
+ WITH RECURSIVE error_family AS (
+ SELECT *
+ FROM public.errors
+ WHERE error_id IN %(error_ids)s
+ UNION
+ SELECT child_errors.*
+ FROM public.errors AS child_errors
+ INNER JOIN error_family ON error_family.error_id = child_errors.parent_error_id OR error_family.parent_error_id = child_errors.error_id
+ )
+ SELECT *
+ FROM error_family;""",
+ {"error_ids": tuple(error_ids)})
+ cur.execute(query=query)
+ return helper.list_to_camel_case(cur.fetchall())
+
+
+def __flatten_sort_key_count_version(data, merge_nested=False):
+ if data is None:
+ return []
+ return sorted(
+ [
+ {
+ "name": f"{o[0][0][0]}@{v[0]}",
+ "count": v[1]
+ } for o in data for v in o[2]
+ ],
+ key=lambda o: o["count"], reverse=True) if merge_nested else \
+ [
+ {
+ "name": o[0][0][0],
+ "count": o[1][0][0],
+ # "versions": [{"version": v[0], "count": v[1]} for v in o[2]]
+ } for o in data
+ ]
+
+
+def __flatten_sort_key_count(data):
+ if data is None:
+ return []
+ return [
+ {
+ "name": o[0][0][0],
+ "count": o[1][0][0]
+ } for o in data
+ ]
+
+
+def __rearrange_chart_details(start_at, end_at, density, chart):
+ chart = list(chart)
+ for i in range(len(chart)):
+ chart[i] = {"timestamp": chart[i][0], "count": chart[i][1]}
+ chart = dashboard.__complete_missing_steps(rows=chart, start_time=start_at, end_time=end_at, density=density,
+ neutral={"count": 0})
+ return chart
+
+
+def __process_tags(row):
+ return [
+ {"name": "browser", "partitions": __flatten_sort_key_count_version(data=row.get("browsers_partition"))},
+ {"name": "browser.ver",
+ "partitions": __flatten_sort_key_count_version(data=row.pop("browsers_partition"), merge_nested=True)},
+ {"name": "OS", "partitions": __flatten_sort_key_count_version(data=row.get("os_partition"))},
+ {"name": "OS.ver",
+ "partitions": __flatten_sort_key_count_version(data=row.pop("os_partition"), merge_nested=True)},
+ {"name": "device.family", "partitions": __flatten_sort_key_count_version(data=row.get("device_partition"))},
+ {"name": "device",
+ "partitions": __flatten_sort_key_count_version(data=row.pop("device_partition"), merge_nested=True)},
+ {"name": "country", "partitions": __flatten_sort_key_count(data=row.pop("country_partition"))}
+ ]
+
+
+def get_details(project_id, error_id, user_id, **data):
+ # now=TimeUTC.now()
+ ch_sub_query24 = __get_basic_constraints(startTime_arg_name="startDate24", endTime_arg_name="endDate24")
+ ch_sub_query24.append("error_id = %(error_id)s")
+ ch_sub_query30 = __get_basic_constraints(startTime_arg_name="startDate30", endTime_arg_name="endDate30")
+ ch_sub_query30.append("error_id = %(error_id)s")
+ ch_basic_query = __get_basic_constraints(time_constraint=False)
+ ch_basic_query.append("error_id = %(error_id)s")
+ with ch_client.ClickHouseClient() as ch:
+ data["startDate24"] = TimeUTC.now(-1)
+ data["endDate24"] = TimeUTC.now()
+ data["startDate30"] = TimeUTC.now(-30)
+ data["endDate30"] = TimeUTC.now()
+ density24 = int(data.get("density24", 24))
+ step_size24 = __get_step_size(data["startDate24"], data["endDate24"], density24)
+ density30 = int(data.get("density30", 30))
+ step_size30 = __get_step_size(data["startDate30"], data["endDate30"], density30)
+ params = {
+ "startDate24": data['startDate24'],
+ "endDate24": data['endDate24'],
+ "startDate30": data['startDate30'],
+ "endDate30": data['endDate30'],
+ "project_id": project_id,
+ "userId": user_id,
+ "step_size24": step_size24,
+ "step_size30": step_size30,
+ "error_id": error_id}
+
+ main_ch_query = f"""\
+ SELECT error_id,
+ name,
+ message,
+ users,
+ sessions,
+ last_occurrence,
+ first_occurrence,
+ last_session_id,
+ browsers_partition,
+ os_partition,
+ device_partition,
+ country_partition,
+ chart24,
+ chart30
+ FROM (SELECT error_id,
+ name,
+ message,
+ COUNT(DISTINCT user_uuid) AS users,
+ COUNT(DISTINCT session_id) AS sessions
+ FROM errors
+ WHERE error_id = %(error_id)s
+ GROUP BY error_id, name, message) AS details
+ INNER JOIN (SELECT error_id,
+ toUnixTimestamp(MAX(datetime)) * 1000 AS last_occurrence,
+ toUnixTimestamp(MIN(datetime)) * 1000 AS first_occurrence
+ FROM errors
+ WHERE error_id = %(error_id)s
+ GROUP BY error_id) AS time_details
+ ON details.error_id = time_details.error_id
+ INNER JOIN (SELECT error_id, session_id AS last_session_id, user_os, user_os_version, user_browser, user_browser_version, user_device, user_device_type, user_uuid
+ FROM errors
+ WHERE error_id = %(error_id)s
+ ORDER BY datetime DESC
+ LIMIT 1) AS last_session_details ON last_session_details.error_id = details.error_id
+ INNER JOIN (SELECT %(error_id)s AS error_id,
+ groupArray(
+ [[[user_browser]], [[toString(count_per_browser)]],versions_partition]) AS browsers_partition
+ FROM (SELECT user_browser,
+ COUNT(session_id) AS count_per_browser
+ FROM errors
+ WHERE {" AND ".join(ch_basic_query)}
+ GROUP BY user_browser
+ ORDER BY count_per_browser DESC) AS count_per_browser_query
+ INNER JOIN (SELECT user_browser,
+ groupArray([user_browser_version, toString(count_per_version)]) AS versions_partition
+ FROM (SELECT user_browser,
+ user_browser_version,
+ COUNT(session_id) AS count_per_version
+ FROM errors
+ WHERE {" AND ".join(ch_basic_query)}
+ GROUP BY user_browser, user_browser_version
+ ORDER BY count_per_version DESC) AS version_details
+ GROUP BY user_browser ) AS browser_version_details USING (user_browser)) AS browser_details
+ ON browser_details.error_id = details.error_id
+ INNER JOIN (SELECT %(error_id)s AS error_id,
+ groupArray([[[user_os]], [[toString(count_per_os)]],versions_partition]) AS os_partition
+ FROM (SELECT user_os,
+ COUNT(session_id) AS count_per_os
+ FROM errors
+ WHERE {" AND ".join(ch_basic_query)}
+ GROUP BY user_os
+ ORDER BY count_per_os DESC) AS count_per_os_details
+ INNER JOIN (SELECT user_os,
+ groupArray([user_os_version, toString(count_per_version)]) AS versions_partition
+ FROM (SELECT user_os, user_os_version, COUNT(session_id) AS count_per_version
+ FROM errors
+ WHERE {" AND ".join(ch_basic_query)}
+ GROUP BY user_os, user_os_version
+ ORDER BY count_per_version DESC) AS count_per_version_details
+ GROUP BY user_os ) AS os_version_details USING (user_os)) AS os_details
+ ON os_details.error_id = details.error_id
+ INNER JOIN (SELECT %(error_id)s AS error_id,
+ groupArray(
+ [[[toString(user_device_type)]], [[toString(count_per_device)]],versions_partition]) AS device_partition
+ FROM (SELECT user_device_type,
+ COUNT(session_id) AS count_per_device
+ FROM errors
+ WHERE {" AND ".join(ch_basic_query)}
+ GROUP BY user_device_type
+ ORDER BY count_per_device DESC) AS count_per_device_details
+ INNER JOIN (SELECT user_device_type,
+ groupArray([user_device, toString(count_per_device)]) AS versions_partition
+ FROM (SELECT user_device_type,
+ COALESCE(user_device,'unknown') AS user_device,
+ COUNT(session_id) AS count_per_device
+ FROM errors
+ WHERE {" AND ".join(ch_basic_query)}
+ GROUP BY user_device_type, user_device
+ ORDER BY count_per_device DESC) AS count_per_device_details
+ GROUP BY user_device_type ) AS device_version_details USING (user_device_type)) AS device_details
+ ON device_details.error_id = details.error_id
+ INNER JOIN (SELECT %(error_id)s AS error_id,
+ groupArray(
+ [[[toString(user_country)]], [[toString(count_per_country)]]]) AS country_partition
+ FROM (SELECT user_country,
+ COUNT(session_id) AS count_per_country
+ FROM errors
+ WHERE {" AND ".join(ch_basic_query)}
+ GROUP BY user_country
+ ORDER BY count_per_country DESC) AS count_per_country_details) AS country_details
+ ON country_details.error_id = details.error_id
+ INNER JOIN (SELECT %(error_id)s AS error_id, groupArray([timestamp, count]) AS chart24
+ FROM (SELECT toUnixTimestamp(toStartOfInterval(datetime, INTERVAL %(step_size24)s second)) * 1000 AS timestamp,
+ COUNT(DISTINCT session_id) AS count
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query24)}
+ GROUP BY timestamp
+ ORDER BY timestamp) AS chart_details) AS chart_details24
+ ON details.error_id = chart_details24.error_id
+ INNER JOIN (SELECT %(error_id)s AS error_id, groupArray([timestamp, count]) AS chart30
+ FROM (SELECT toUnixTimestamp(toStartOfInterval(datetime, INTERVAL %(step_size30)s second)) * 1000 AS timestamp,
+ COUNT(DISTINCT session_id) AS count
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query30)}
+ GROUP BY timestamp
+ ORDER BY timestamp) AS chart_details) AS chart_details30
+ ON details.error_id = chart_details30.error_id;"""
+
+ # print("--------------------")
+ # print(main_ch_query % params)
+ # print("--------------------")
+ row = ch.execute(query=main_ch_query, params=params)
+ if len(row) == 0:
+ return {"errors": ["error doesn't exist"]}
+ row = row[0]
+ row["tags"] = __process_tags(row)
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ f"""SELECT error_id, status, session_id, start_ts,
+ parent_error_id,session_id, user_anonymous_id,
+ user_id, user_uuid, user_browser, user_browser_version,
+ user_os, user_os_version, user_device, payload,
+ COALESCE((SELECT TRUE
+ FROM public.user_favorite_errors AS fe
+ WHERE pe.error_id = fe.error_id
+ AND fe.user_id = %(user_id)s), FALSE) AS favorite,
+ True AS viewed
+ FROM public.errors AS pe
+ INNER JOIN events.errors AS ee USING (error_id)
+ INNER JOIN public.sessions USING (session_id)
+ WHERE pe.project_id = %(project_id)s
+ AND error_id = %(error_id)s
+ ORDER BY start_ts DESC
+ LIMIT 1;""",
+ {"project_id": project_id, "error_id": error_id, "user_id": user_id})
+ cur.execute(query=query)
+ status = cur.fetchone()
+
+ if status is not None:
+ row["stack"] = format_first_stack_frame(status).pop("stack")
+ row["status"] = status.pop("status")
+ row["parent_error_id"] = status.pop("parent_error_id")
+ row["favorite"] = status.pop("favorite")
+ row["viewed"] = status.pop("viewed")
+ row["last_hydrated_session"] = status
+ else:
+ row["stack"] = []
+ row["last_hydrated_session"] = None
+ row["status"] = "untracked"
+ row["parent_error_id"] = None
+ row["favorite"] = False
+ row["viewed"] = False
+ row["chart24"] = __rearrange_chart_details(start_at=data["startDate24"], end_at=data["endDate24"],
+ density=density24,
+ chart=row["chart24"])
+ row["chart30"] = __rearrange_chart_details(start_at=data["startDate30"], end_at=data["endDate30"],
+ density=density30,
+ chart=row["chart30"])
+ return {"data": helper.dict_to_camel_case(row)}
+
+
+def get_details_chart(project_id, error_id, user_id, **data):
+ ch_sub_query = __get_basic_constraints()
+ ch_sub_query.append("error_id = %(error_id)s")
+ with ch_client.ClickHouseClient() as ch:
+ if data.get("startDate") is None:
+ data["startDate"] = TimeUTC.now(-7)
+ else:
+ data["startDate"] = int(data["startDate"])
+ if data.get("endDate") is None:
+ data["endDate"] = TimeUTC.now()
+ else:
+ data["endDate"] = int(data["endDate"])
+ density = int(data.get("density", 7))
+ step_size = __get_step_size(data["startDate"], data["endDate"], density)
+ params = {
+ "startDate": data['startDate'],
+ "endDate": data['endDate'],
+ "project_id": project_id,
+ "userId": user_id,
+ "step_size": step_size,
+ "error_id": error_id}
+
+ main_ch_query = f"""\
+ SELECT error_id,
+ browsers_partition,
+ os_partition,
+ device_partition,
+ country_partition,
+ chart
+ FROM (SELECT %(error_id)s AS error_id,
+ groupArray([[[user_browser]], [[toString(count_per_browser)]],versions_partition]) AS browsers_partition
+ FROM (SELECT user_browser,
+ COUNT(session_id) AS count_per_browser
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY user_browser
+ ORDER BY count_per_browser DESC) AS count_per_browser_query
+ INNER JOIN (SELECT user_browser,
+ groupArray([user_browser_version, toString(count_per_version)]) AS versions_partition
+ FROM (SELECT user_browser,
+ user_browser_version,
+ COUNT(session_id) AS count_per_version
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY user_browser, user_browser_version
+ ORDER BY count_per_version DESC) AS count_per_version_details
+ GROUP BY user_browser ) AS browesr_version_details USING (user_browser)) AS browser_details
+ INNER JOIN (SELECT %(error_id)s AS error_id,
+ groupArray(
+ [[[user_os]], [[toString(count_per_os)]],versions_partition]) AS os_partition
+ FROM (SELECT user_os,
+ COUNT(session_id) AS count_per_os
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY user_os
+ ORDER BY count_per_os DESC) AS count_per_os_details
+ INNER JOIN (SELECT user_os,
+ groupArray([user_os_version, toString(count_per_version)]) AS versions_partition
+ FROM (SELECT user_os, user_os_version, COUNT(session_id) AS count_per_version
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY user_os, user_os_version
+ ORDER BY count_per_version DESC) AS count_per_version_query
+ GROUP BY user_os ) AS os_version_query USING (user_os)) AS os_details
+ ON os_details.error_id = browser_details.error_id
+ INNER JOIN (SELECT %(error_id)s AS error_id,
+ groupArray(
+ [[[toString(user_device_type)]], [[toString(count_per_device)]],versions_partition]) AS device_partition
+ FROM (SELECT user_device_type,
+ COUNT(session_id) AS count_per_device
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY user_device_type
+ ORDER BY count_per_device DESC) AS count_per_device_details
+ INNER JOIN (SELECT user_device_type,
+ groupArray([user_device, toString(count_per_device)]) AS versions_partition
+ FROM (SELECT user_device_type,
+ COALESCE(user_device,'unknown') AS user_device,
+ COUNT(session_id) AS count_per_device
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY user_device_type, user_device
+ ORDER BY count_per_device DESC) AS count_per_device_details
+ GROUP BY user_device_type ) AS device_version_details USING (user_device_type)) AS device_details
+ ON device_details.error_id = os_details.error_id
+ INNER JOIN (SELECT %(error_id)s AS error_id,
+ groupArray(
+ [[[toString(user_country)]], [[toString(count_per_country)]]]) AS country_partition
+ FROM (SELECT user_country,
+ COUNT(session_id) AS count_per_country
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY user_country
+ ORDER BY count_per_country DESC) AS count_per_country_details) AS country_details
+ ON country_details.error_id = device_details.error_id
+ INNER JOIN (SELECT %(error_id)s AS error_id, groupArray([timestamp, count]) AS chart
+ FROM (SELECT toUnixTimestamp(toStartOfInterval(datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ COUNT(DISTINCT session_id) AS count
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY timestamp
+ ORDER BY timestamp) AS chart_details) AS chart_details
+ ON country_details.error_id = chart_details.error_id;"""
+
+ # print("--------------------")
+ # print(main_ch_query % params)
+ row = ch.execute(query=main_ch_query, params=params)
+ if len(row) == 0:
+ return {"errors": ["error doesn't exist"]}
+ row = row[0]
+ row["tags"] = __process_tags(row)
+ row["chart"] = __rearrange_chart_details(start_at=data["startDate"], end_at=data["endDate"], density=density,
+ chart=row["chart"])
+ return {"data": helper.dict_to_camel_case(row)}
+
+
+def __get_basic_constraints(platform=None, time_constraint=True, startTime_arg_name="startDate",
+ endTime_arg_name="endDate"):
+ ch_sub_query = ["project_id =toUInt32(%(project_id)s)"]
+ if time_constraint:
+ ch_sub_query += [f"datetime >= toDateTime(%({startTime_arg_name})s/1000)",
+ f"datetime < toDateTime(%({endTime_arg_name})s/1000)"]
+ if platform == 'mobile':
+ ch_sub_query.append("user_device_type = 'mobile'")
+ elif platform == 'desktop':
+ ch_sub_query.append("user_device_type = 'desktop'")
+ return ch_sub_query
+
+
+def __get_step_size(startTimestamp, endTimestamp, density):
+ step_size = (int(endTimestamp) // 1000 - int(startTimestamp) // 1000) // (int(density) - 1)
+ return step_size
+
+
+def __get_sort_key(key):
+ return {
+ "datetime": "max_datetime",
+ "lastOccurrence": "max_datetime",
+ "firstOccurrence": "min_datetime"
+ }.get(key, 'max_datetime')
+
+
+def search(data, project_id, user_id, flows=False, status="ALL", favorite_only=False):
+ status = status.upper()
+ if status.lower() not in ['all', 'unresolved', 'resolved', 'ignored']:
+ return {"errors": ["invalid error status"]}
+ ch_sub_query = __get_basic_constraints(data.get('platform'))
+ ch_sub_query.append("source ='js_exception'")
+ statuses = []
+ error_ids = None
+ if data.get("startDate") is None:
+ data["startDate"] = TimeUTC.now(-30)
+ if data.get("endDate") is None:
+ data["endDate"] = TimeUTC.now(1)
+ if len(data.get("events", [])) > 0 or len(data.get("filters", [])) > 0 or status != "ALL" or favorite_only:
+ statuses = sessions.search2_pg(data=data, project_id=project_id, user_id=user_id, errors_only=True,
+ error_status=status, favorite_only=favorite_only)
+ error_ids = [e["error_id"] for e in statuses]
+ if len(statuses) == 0:
+ return {"data": {
+ 'total': 0,
+ 'errors': []
+ }}
+ with ch_client.ClickHouseClient() as ch:
+ if data.get("startDate") is None:
+ data["startDate"] = TimeUTC.now(-7)
+ if data.get("endDate") is None:
+ data["endDate"] = TimeUTC.now()
+ density = data.get("density", 7)
+ step_size = __get_step_size(data["startDate"], data["endDate"], density)
+ sort = __get_sort_key('datetime')
+ if data.get("sort") is not None:
+ sort = __get_sort_key(data["sort"])
+ order = "DESC"
+ if data.get("order") is not None:
+ order = data["order"]
+
+ params = {
+ "startDate": data['startDate'],
+ "endDate": data['endDate'],
+ "project_id": project_id,
+ "userId": user_id,
+ "step_size": step_size}
+ if error_ids is not None:
+ params["error_ids"] = tuple(error_ids)
+ ch_sub_query.append("error_id IN %(error_ids)s")
+ main_ch_query = f"""\
+ SELECT COUNT(DISTINCT error_id) AS count
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query)};"""
+ total = ch.execute(query=main_ch_query, params=params)[0]["count"]
+ if flows:
+ return {"data": {"count": total}}
+ if total == 0:
+ rows = []
+ else:
+ main_ch_query = f"""\
+ SELECT error_id, name, message, users, sessions, last_occurrence, first_occurrence, chart
+ FROM (SELECT error_id,
+ name,
+ message,
+ COUNT(DISTINCT user_uuid) AS users,
+ COUNT(DISTINCT session_id) AS sessions,
+ MAX(datetime) AS max_datetime,
+ MIN(datetime) AS min_datetime
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY error_id, name, message
+ ORDER BY {sort} {order}) AS details INNER JOIN (SELECT error_id AS error_id, toUnixTimestamp(MAX(datetime))*1000 AS last_occurrence, toUnixTimestamp(MIN(datetime))*1000 AS first_occurrence
+ FROM errors
+ GROUP BY error_id) AS time_details
+ ON details.error_id=time_details.error_id
+ INNER JOIN (SELECT error_id, groupArray([timestamp, count]) AS chart
+ FROM (SELECT error_id, toUnixTimestamp(toStartOfInterval(datetime, INTERVAL %(step_size)s second)) * 1000 AS timestamp,
+ COUNT(DISTINCT session_id) AS count
+ FROM errors
+ WHERE {" AND ".join(ch_sub_query)}
+ GROUP BY error_id, timestamp
+ ORDER BY timestamp)
+ GROUP BY error_id) AS chart_details ON details.error_id=chart_details.error_id;"""
+
+ # print("--------------------")
+ # print(main_ch_query % params)
+ rows = ch.execute(query=main_ch_query, params=params)
+ if len(statuses) == 0:
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ """SELECT error_id, status, parent_error_id, payload,
+ COALESCE((SELECT TRUE
+ FROM public.user_favorite_errors AS fe
+ WHERE errors.error_id = fe.error_id
+ AND fe.user_id = %(user_id)s LIMIT 1), FALSE) AS favorite,
+ COALESCE((SELECT TRUE
+ FROM public.user_viewed_errors AS ve
+ WHERE errors.error_id = ve.error_id
+ AND ve.user_id = %(user_id)s LIMIT 1), FALSE) AS viewed
+ FROM public.errors
+ WHERE project_id = %(project_id)s AND error_id IN %(error_ids)s;""",
+ {"project_id": project_id, "error_ids": tuple([r["error_id"] for r in rows]),
+ "user_id": user_id})
+ cur.execute(query=query)
+ statuses = cur.fetchall()
+ statuses = {
+ s["error_id"]: s for s in statuses
+ }
+
+ for r in rows:
+ if r["error_id"] in statuses:
+ r["status"] = statuses[r["error_id"]]["status"]
+ r["parent_error_id"] = statuses[r["error_id"]]["parent_error_id"]
+ r["favorite"] = statuses[r["error_id"]]["favorite"]
+ r["viewed"] = statuses[r["error_id"]]["viewed"]
+ r["stack"] = format_first_stack_frame(statuses[r["error_id"]])["stack"]
+ else:
+ r["status"] = "untracked"
+ r["parent_error_id"] = None
+ r["favorite"] = False
+ r["viewed"] = False
+ r["stack"] = None
+
+ r["chart"] = list(r["chart"])
+ for i in range(len(r["chart"])):
+ r["chart"][i] = {"timestamp": r["chart"][i][0], "count": r["chart"][i][1]}
+ r["chart"] = dashboard.__complete_missing_steps(rows=r["chart"], start_time=data["startDate"],
+ end_time=data["endDate"],
+ density=density, neutral={"count": 0})
+ offset = len(rows)
+ rows = [r for r in rows if r["stack"] is None
+ or (len(r["stack"]) == 0 or len(r["stack"]) > 1
+ or len(r["stack"]) > 0
+ and (r["message"].lower() != "script error." or len(r["stack"][0]["absPath"]) > 0))]
+ offset -= len(rows)
+ return {
+ "data": {
+ 'total': total - offset,
+ 'errors': helper.list_to_camel_case(rows)
+ }
+ }
+
+
+def __save_stacktrace(error_id, data):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ """UPDATE public.errors
+ SET stacktrace=%(data)s::jsonb, stacktrace_parsed_at=timezone('utc'::text, now())
+ WHERE error_id = %(error_id)s;""",
+ {"error_id": error_id, "data": json.dumps(data)})
+ cur.execute(query=query)
+
+
+def get_trace(project_id, error_id):
+ error = get(error_id=error_id)
+ if error is None:
+ return {"errors": ["error not found"]}
+ if error.get("source", "") != "js_exception":
+ return {"errors": ["this source of errors doesn't have a sourcemap"]}
+ if error.get("payload") is None:
+ return {"errors": ["null payload"]}
+ if error.get("stacktrace") is not None:
+ return {"sourcemapUploaded": True,
+ "trace": error.get("stacktrace"),
+ "preparsed": True}
+ trace, all_exists = sourcemaps.get_traces_group(project_id=project_id, payload=error["payload"])
+ if all_exists:
+ __save_stacktrace(error_id=error_id, data=trace)
+ return {"sourcemapUploaded": all_exists,
+ "trace": trace,
+ "preparsed": False}
+
+
+def get_sessions(start_date, end_date, project_id, user_id, error_id):
+ extra_constraints = ["s.project_id = %(project_id)s",
+ "s.start_ts >= %(startDate)s",
+ "s.start_ts <= %(endDate)s",
+ "e.error_id = %(error_id)s"]
+ if start_date is None:
+ start_date = TimeUTC.now(-7)
+ if end_date is None:
+ end_date = TimeUTC.now()
+
+ params = {
+ "startDate": start_date,
+ "endDate": end_date,
+ "project_id": project_id,
+ "userId": user_id,
+ "error_id": error_id}
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ f"""SELECT s.project_id,
+ s.session_id::text AS session_id,
+ s.user_uuid,
+ s.user_id,
+ s.user_agent,
+ s.user_os,
+ s.user_browser,
+ s.user_device,
+ s.user_country,
+ s.start_ts,
+ s.duration,
+ s.events_count,
+ s.pages_count,
+ s.errors_count,
+ s.issue_types,
+ COALESCE((SELECT TRUE
+ FROM public.user_favorite_sessions AS fs
+ WHERE s.session_id = fs.session_id
+ AND fs.user_id = %(userId)s LIMIT 1), FALSE) AS favorite,
+ COALESCE((SELECT TRUE
+ FROM public.user_viewed_sessions AS fs
+ WHERE s.session_id = fs.session_id
+ AND fs.user_id = %(userId)s LIMIT 1), FALSE) AS viewed
+ FROM public.sessions AS s INNER JOIN events.errors AS e USING (session_id)
+ WHERE {" AND ".join(extra_constraints)}
+ ORDER BY s.start_ts DESC;""",
+ params)
+ cur.execute(query=query)
+ sessions_list = []
+ total = cur.rowcount
+ row = cur.fetchone()
+ while row is not None and len(sessions_list) < 100:
+ sessions_list.append(row)
+ row = cur.fetchone()
+
+ return {
+ 'total': total,
+ 'sessions': helper.list_to_camel_case(sessions_list)
+ }
+
+
+ACTION_STATE = {
+ "unsolve": 'unresolved',
+ "solve": 'resolved',
+ "ignore": 'ignored'
+}
+
+
+def change_state(project_id, user_id, error_id, action):
+ errors = get(error_id, family=True)
+ print(len(errors))
+ status = ACTION_STATE.get(action)
+ if errors is None or len(errors) == 0:
+ return {"errors": ["error not found"]}
+ if errors[0]["status"] == status:
+ return {"errors": [f"error is already {status}"]}
+
+ if errors[0]["status"] == ACTION_STATE["solve"] and status == ACTION_STATE["ignore"]:
+ return {"errors": [f"state transition not permitted {errors[0]['status']} -> {status}"]}
+
+ params = {
+ "userId": user_id,
+ "error_ids": tuple([e["errorId"] for e in errors]),
+ "status": status}
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ """UPDATE public.errors
+ SET status = %(status)s
+ WHERE error_id IN %(error_ids)s
+ RETURNING status""",
+ params)
+ cur.execute(query=query)
+ row = cur.fetchone()
+ if row is not None:
+ for e in errors:
+ e["status"] = row["status"]
+ return {"data": errors}
+
+
+MAX_RANK = 2
+
+
+def __status_rank(status):
+ return {
+ 'unresolved': MAX_RANK - 2,
+ 'ignored': MAX_RANK - 1,
+ 'resolved': MAX_RANK
+ }.get(status)
+
+
+def merge(error_ids):
+ error_ids = list(set(error_ids))
+ errors = get_batch(error_ids)
+ if len(error_ids) <= 1 or len(error_ids) > len(errors):
+ return {"errors": ["invalid list of ids"]}
+ error_ids = [e["errorId"] for e in errors]
+ parent_error_id = error_ids[0]
+ status = "unresolved"
+ for e in errors:
+ if __status_rank(status) < __status_rank(e["status"]):
+ status = e["status"]
+ if __status_rank(status) == MAX_RANK:
+ break
+ params = {
+ "error_ids": tuple(error_ids),
+ "parent_error_id": parent_error_id,
+ "status": status
+ }
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ """UPDATE public.errors
+ SET parent_error_id = %(parent_error_id)s, status = %(status)s
+ WHERE error_id IN %(error_ids)s OR parent_error_id IN %(error_ids)s;""",
+ params)
+ cur.execute(query=query)
+ # row = cur.fetchone()
+
+ return {"data": "success"}
+
+
+def format_first_stack_frame(error):
+ error["stack"] = sourcemaps.format_payload(error.pop("payload"), truncate_to_first=True)
+ for s in error["stack"]:
+ for c in s.get("context", []):
+ for sci, sc in enumerate(c):
+ if isinstance(sc, str) and len(sc) > 1000:
+ c[sci] = sc[:1000]
+ # convert bytes to string:
+ if isinstance(s["filename"], bytes):
+ s["filename"] = s["filename"].decode("utf-8")
+ return error
+
+
+def stats(project_id, user_id, startTimestamp=TimeUTC.now(delta_days=-7), endTimestamp=TimeUTC.now()):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ """
+ SELECT COUNT(errors.*) AS unresolved_and_unviewed
+ FROM public.errors
+ INNER JOIN (SELECT root_error.error_id
+ FROM events.errors
+ INNER JOIN public.errors AS root_error USING (error_id)
+ WHERE project_id = %(project_id)s
+ AND timestamp >= %(startTimestamp)s
+ AND timestamp <= %(endTimestamp)s
+ AND source = 'js_exception') AS timed_errors USING (error_id)
+ LEFT JOIN (SELECT error_id FROM public.user_viewed_errors WHERE user_id = %(user_id)s) AS user_viewed
+ USING (error_id)
+ WHERE user_viewed.error_id ISNULL
+ AND errors.project_id = %(project_id)s
+ AND errors.status = 'unresolved'
+ AND errors.source = 'js_exception';""",
+ {"project_id": project_id, "user_id": user_id, "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp})
+ cur.execute(query=query)
+ row = cur.fetchone()
+
+ return {
+ "data": helper.dict_to_camel_case(row)
+ }
diff --git a/ee/api/chalicelib/ee/notifications.py b/ee/api/chalicelib/ee/notifications.py
new file mode 100644
index 000000000..41c26b74c
--- /dev/null
+++ b/ee/api/chalicelib/ee/notifications.py
@@ -0,0 +1,86 @@
+import json
+
+from chalicelib.utils import pg_client, helper
+from chalicelib.utils.TimeUTC import TimeUTC
+
+
+def get_all(tenant_id, user_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ SELECT notifications.*,
+ user_viewed_notifications.notification_id NOTNULL AS viewed
+ FROM public.notifications
+ LEFT JOIN (SELECT notification_id
+ FROM public.user_viewed_notifications
+ WHERE user_viewed_notifications.user_id = %(user_id)s) AS user_viewed_notifications USING (notification_id)
+ WHERE notifications.tenant_id =%(tenant_id)s
+ OR notifications.user_id =%(user_id)s
+ ORDER BY created_at DESC
+ LIMIT 100;""",
+ {"tenant_id": tenant_id, "user_id": user_id})
+ )
+ rows = helper.list_to_camel_case(cur.fetchall())
+ for r in rows:
+ r["createdAt"] = TimeUTC.datetime_to_timestamp(r["createdAt"])
+ return rows
+
+
+def view_notification(user_id, notification_ids=[], tenant_id=None, startTimestamp=None, endTimestamp=None):
+ if (notification_ids is None or len(notification_ids) == 0) and endTimestamp is None:
+ return False
+ if startTimestamp is None:
+ startTimestamp = 0
+ notification_ids = [(user_id, id) for id in notification_ids]
+ with pg_client.PostgresClient() as cur:
+ if len(notification_ids) > 0:
+ cur.executemany(
+ "INSERT INTO public.user_viewed_notifications(user_id, notification_id) VALUES (%s,%s) ON CONFLICT DO NOTHING;",
+ notification_ids)
+ else:
+ query = """INSERT INTO public.user_viewed_notifications(user_id, notification_id)
+ SELECT %(user_id)s AS user_id, notification_id
+ FROM public.notifications
+ WHERE (tenant_id =%(tenant_id)s OR user_id =%(user_id)s)
+ AND EXTRACT(EPOCH FROM created_at)*1000>=(%(startTimestamp)s)
+ AND EXTRACT(EPOCH FROM created_at)*1000<=(%(endTimestamp)s+1000)
+ ON CONFLICT DO NOTHING;"""
+ params = {"user_id": user_id, "tenant_id": tenant_id, "startTimestamp": startTimestamp,
+ "endTimestamp": endTimestamp}
+ # print('-------------------')
+ # print(cur.mogrify(query, params))
+ cur.execute(cur.mogrify(query, params))
+ return True
+
+
+def create(notifications):
+ if len(notifications) == 0:
+ return []
+ with pg_client.PostgresClient() as cur:
+ values = []
+ for n in notifications:
+ clone = dict(n)
+ if "userId" not in clone and "tenantId" not in clone:
+ print('!!! Error: userId or tenantId is required to create a notification')
+ continue
+ if "userId" not in clone:
+ clone["userId"] = None
+ if "tenantId" not in clone:
+ clone["tenantId"] = None
+ if "options" not in clone:
+ clone["options"] = '{}'
+ else:
+ clone["options"] = json.dumps(clone["options"])
+ values.append(
+ cur.mogrify(
+ "(%(tenantId)s, %(userId)s, %(title)s, %(description)s, %(buttonText)s, %(buttonUrl)s, %(imageUrl)s,%(options)s)",
+ clone).decode('UTF-8')
+ )
+ cur.execute(
+ f"""INSERT INTO public.notifications(tenant_id, user_id, title, description, button_text, button_url, image_url, options)
+ VALUES {",".join(values)} RETURNING *;""")
+ rows = helper.list_to_camel_case(cur.fetchall())
+ for r in rows:
+ r["createdAt"] = TimeUTC.datetime_to_timestamp(r["createdAt"])
+ r["viewed"] = False
+ return rows
diff --git a/ee/api/chalicelib/ee/projects.py b/ee/api/chalicelib/ee/projects.py
new file mode 100644
index 000000000..b3073191e
--- /dev/null
+++ b/ee/api/chalicelib/ee/projects.py
@@ -0,0 +1,169 @@
+import json
+
+from chalicelib.ee import users
+from chalicelib.utils import pg_client, helper
+from chalicelib.utils.TimeUTC import TimeUTC
+
+
+def __update(tenant_id, project_id, changes):
+ if len(changes.keys()) == 0:
+ return None
+
+ sub_query = []
+ for key in changes.keys():
+ sub_query.append(f"{helper.key_to_snake_case(key)} = %({key})s")
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""\
+ UPDATE public.projects
+ SET
+ {" ,".join(sub_query)}
+ WHERE
+ project_id = %(project_id)s
+ AND deleted_at ISNULL
+ RETURNING project_id,name,gdpr;""",
+ {"project_id": project_id, **changes})
+ )
+ return helper.dict_to_camel_case(cur.fetchone())
+
+
+def __create(tenant_id, name):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""\
+ INSERT INTO public.projects (tenant_id, name, active)
+ VALUES (%(tenant_id)s,%(name)s,TRUE)
+ RETURNING project_id;""",
+ {"tenant_id": tenant_id, "name": name})
+ )
+ project_id = cur.fetchone()["project_id"]
+ return get_project(tenant_id=tenant_id, project_id=project_id, include_gdpr=True)
+
+
+def get_projects(tenant_id, recording_state=False, gdpr=None, recorded=False, stack_integrations=False):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""\
+ SELECT
+ s.project_id, s.name, s.project_key
+ {',s.gdpr' if gdpr else ''}
+ {',COALESCE((SELECT TRUE FROM public.sessions WHERE sessions.project_id = s.project_id LIMIT 1), FALSE) AS recorded' if recorded else ''}
+ {',stack_integrations.count>0 AS stack_integrations' if stack_integrations else ''}
+ FROM public.projects AS s
+ {'LEFT JOIN LATERAL (SELECT COUNT(*) AS count FROM public.integrations WHERE s.project_id = integrations.project_id LIMIT 1) AS stack_integrations ON TRUE' if stack_integrations else ''}
+ where s.tenant_id =%(tenant_id)s
+ AND s.deleted_at IS NULL
+ ORDER BY s.project_id;""",
+ {"tenant_id": tenant_id})
+ )
+ rows = cur.fetchall()
+ if recording_state:
+ for r in rows:
+ query = cur.mogrify(
+ "select COALESCE(MAX(start_ts),0) AS last from public.sessions where project_id=%(project_id)s;",
+ {"project_id": r["project_id"]})
+ cur.execute(
+ query=query
+ )
+ status = cur.fetchone()
+ if status["last"] < TimeUTC.now(-2):
+ r["status"] = "red"
+ elif status["last"] < TimeUTC.now(-1):
+ r["status"] = "yellow"
+ else:
+ r["status"] = "green"
+
+ return helper.list_to_camel_case(rows)
+
+
+def get_project(tenant_id, project_id, include_last_session=False, include_gdpr=None):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(f"""\
+ SELECT
+ s.project_id,
+ s.name,
+ s.project_key
+ {",(SELECT max(ss.start_ts) FROM public.sessions AS ss WHERE ss.project_id = %(project_id)s) AS last_recorded_session_at" if include_last_session else ""}
+ {',s.gdpr' if include_gdpr else ''}
+ FROM public.projects AS s
+ where s.tenant_id =%(tenant_id)s
+ AND s.project_id =%(project_id)s
+ AND s.deleted_at IS NULL
+ LIMIT 1;""",
+ {"tenant_id": tenant_id, "project_id": project_id})
+
+ cur.execute(
+ query=query
+ )
+ row = cur.fetchone()
+ return helper.dict_to_camel_case(row)
+
+
+def is_authorized(project_id, tenant_id):
+ if project_id is None or not str(project_id).isdigit():
+ return False
+ return get_project(tenant_id=tenant_id, project_id=project_id) is not None
+
+
+def create(tenant_id, user_id, data):
+ admin = users.get(user_id=user_id, tenant_id=tenant_id)
+ if not admin["admin"] and not admin["superAdmin"]:
+ return {"errors": ["unauthorized"]}
+ return {"data": __create(tenant_id=tenant_id, name=data.get("name", "my first project"))}
+
+
+def edit(tenant_id, user_id, project_id, data):
+ admin = users.get(user_id=user_id, tenant_id=tenant_id)
+ if not admin["admin"] and not admin["superAdmin"]:
+ return {"errors": ["unauthorized"]}
+ return {"data": __update(tenant_id=tenant_id, project_id=project_id,
+ changes={"name": data.get("name", "my first project")})}
+
+
+def delete(tenant_id, user_id, project_id):
+ admin = users.get(user_id=user_id, tenant_id=tenant_id)
+
+ if not admin["admin"] and not admin["superAdmin"]:
+ return {"errors": ["unauthorized"]}
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ UPDATE public.projects
+ SET
+ deleted_at = timezone('utc'::text, now()),
+ active = FALSE
+ WHERE
+ project_id = %(project_id)s;""",
+ {"project_id": project_id})
+ )
+ return {"data": {"state": "success"}}
+
+
+def get_gdpr(project_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ SELECT
+ gdpr
+ FROM public.projects AS s
+ where s.project_id =%(project_id)s
+ AND s.deleted_at IS NULL;""",
+ {"project_id": project_id})
+ )
+ return cur.fetchone()["gdpr"]
+
+
+def edit_gdpr(project_id, gdpr):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ UPDATE public.projects
+ SET
+ gdpr = gdpr|| %(gdpr)s
+ WHERE
+ project_id = %(project_id)s
+ AND deleted_at ISNULL
+ RETURNING gdpr;""",
+ {"project_id": project_id, "gdpr": json.dumps(gdpr)})
+ )
+ return cur.fetchone()["gdpr"]
diff --git a/ee/api/chalicelib/ee/resources.py b/ee/api/chalicelib/ee/resources.py
new file mode 100644
index 000000000..575c604a5
--- /dev/null
+++ b/ee/api/chalicelib/ee/resources.py
@@ -0,0 +1,25 @@
+from chalicelib.utils import helper
+from chalicelib.ee.utils import ch_client
+from chalicelib.utils.TimeUTC import TimeUTC
+
+
+def get_by_session_id(session_id):
+ with ch_client.ClickHouseClient() as ch:
+ ch_query = """\
+ SELECT
+ datetime,url,type,duration,ttfb,header_size,encoded_body_size,decoded_body_size,success
+ FROM resources
+ WHERE session_id = toUInt64(%(session_id)s);"""
+ params = {"session_id": session_id}
+ rows = ch.execute(query=ch_query, params=params)
+ results = []
+ for r in rows:
+ r["datetime"] = TimeUTC.datetime_to_timestamp(r["datetime"])
+ # TODO: remove this once the tracker is fixed
+ if isinstance(r["url"], bytes):
+ try:
+ r["url"] = r["url"].decode("utf-8")
+ except UnicodeDecodeError:
+ continue
+ results.append(r)
+ return helper.list_to_camel_case(results)
diff --git a/ee/api/chalicelib/ee/signup.py b/ee/api/chalicelib/ee/signup.py
new file mode 100644
index 000000000..104372048
--- /dev/null
+++ b/ee/api/chalicelib/ee/signup.py
@@ -0,0 +1,127 @@
+from chalicelib.utils import helper
+from chalicelib.utils import pg_client
+from chalicelib.ee import users, telemetry
+from chalicelib.utils import captcha
+import json
+from chalicelib.utils.TimeUTC import TimeUTC
+
+
+def get_signed_ups():
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(f"SELECT tenant_id, name FROM public.tenants;")
+ cur.execute(
+ query
+ )
+ rows = cur.fetchall()
+ return {"data": helper.list_to_camel_case(rows)}
+
+
+def create_step1(data):
+ print(f"===================== SIGNUP STEP 1 AT {TimeUTC.to_human_readable(TimeUTC.now())} UTC")
+ errors = []
+
+ email = data.get("email")
+ print(f"=====================> {email}")
+ password = data.get("password")
+
+ print("Verifying email validity")
+ if email is None or len(email) < 5 or not helper.is_valid_email(email):
+ errors.append("Invalid email address.")
+ else:
+ print("Verifying email existance")
+ if users.email_exists(email):
+ errors.append("Email address already in use.")
+ if users.get_deleted_user_by_email(email) is not None:
+ errors.append("Email address previously deleted.")
+
+ print("Verifying captcha")
+ if helper.allow_captcha() and not captcha.is_valid(data["g-recaptcha-response"]):
+ errors.append("Invalid captcha.")
+
+ print("Verifying password validity")
+ if len(data["password"]) < 6:
+ errors.append("Password is too short, it must be at least 6 characters long.")
+
+ print("Verifying fullname validity")
+ fullname = data.get("fullname")
+ if fullname is None or len(fullname) < 1 or not helper.is_alphabet_space_dash(fullname):
+ errors.append("Invalid full name.")
+
+ print("Verifying company's name validity")
+ company_name = data.get("companyName")
+ if company_name is None or len(company_name) < 1 or not helper.is_alphanumeric_space(company_name):
+ errors.append("invalid company's name")
+
+ print("Verifying project's name validity")
+ project_name = data.get("projectName")
+ if project_name is None or len(project_name) < 1:
+ project_name = "my first project"
+
+ if len(errors) > 0:
+ print("==> error")
+ print(errors)
+ return {"errors": errors}
+ print("No errors detected")
+ print("Decomposed infos")
+ tenant_id = data.get("tenantId")
+ if tenant_id is not None:
+ with pg_client.PostgresClient() as cur:
+ print("Starting ACID insert")
+ query = cur.mogrify(f"""\
+ WITH t AS (
+ UPDATE public.tenants
+ SET name = %(companyName)s,
+ version_number = %(versionNumber)s,
+ licence = %(licence)s
+ WHERE tenant_id=%(tenant_id)s
+ ),
+ u AS (
+ UPDATE public.users
+ SET email = %(email)s,
+ name = %(fullname)s,
+ WHERE role ='owner' AND tenant_id=%(tenant_id)s
+ RETURNING user_id,email, role, name
+ )
+ UPDATE public.basic_authentication
+ SET password= crypt(%(password)s, gen_salt('bf', 12))
+ WHERE user_id = (SELECT user_id FROM u)
+ RETURNING %(tenant_id)s AS tenant_id""",
+ {"email": email, "password": password,
+ "fullname": fullname, "companyName": company_name,
+ "projectName": project_name,
+ "tenant_id": tenant_id})
+ cur.execute(
+ query
+ )
+ data = cur.fetchone()
+ else:
+ with pg_client.PostgresClient() as cur:
+ print("Starting ACID insert")
+ query = cur.mogrify(f"""\
+ WITH t AS (
+ INSERT INTO public.tenants (name, version_number, licence)
+ VALUES (%(companyName)s, %(versionNumber)s, %(licence)s)
+ RETURNING tenant_id
+ ),
+ u AS (
+ INSERT INTO public.users (tenant_id, email, role, name, data)
+ VALUES ((SELECT tenant_id FROM t), %(email)s, 'owner', %(fullname)s,%(data)s)
+ RETURNING user_id,email,role,name
+ ),
+ au AS (
+ INSERT INTO public.basic_authentication (user_id, password, generated_password)
+ VALUES ((SELECT user_id FROM u), crypt(%(password)s, gen_salt('bf', 12)), FALSE)
+ )
+ INSERT INTO public.projects (tenant_id, name, active)
+ VALUES ((SELECT t.tenant_id FROM t), %(projectName)s, TRUE)
+ RETURNING tenant_id,project_id;""",
+ {"email": email, "password": password,
+ "fullname": fullname, "companyName": company_name,
+ "projectName": project_name,
+ "data": json.dumps({"lastAnnouncementView": TimeUTC.now()})})
+ cur.execute(
+ query
+ )
+ data = cur.fetchone()
+ telemetry.new_client(tenant_id=data["tenant_id"])
+ return {"data": {"state": "success"}}
diff --git a/ee/api/chalicelib/ee/telemetry.py b/ee/api/chalicelib/ee/telemetry.py
new file mode 100644
index 000000000..704bb390c
--- /dev/null
+++ b/ee/api/chalicelib/ee/telemetry.py
@@ -0,0 +1,54 @@
+from chalicelib.utils import pg_client
+import requests
+
+from chalicelib.core.telemetry import process_data
+
+def compute():
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ f"""UPDATE public.tenants
+ SET t_integrations = COALESCE((SELECT COUNT(DISTINCT provider)
+ FROM public.integrations
+ INNER JOIN public.projects USING (project_id)
+ WHERE projects.tenant_id = all_tenants.tenant_id) +
+ (SELECT COUNT(*)
+ FROM public.webhooks
+ WHERE webhooks.tenant_id = all_tenants.tenant_id
+ AND type = 'slack') +
+ (SELECT COUNT(*)
+ FROM public.jira_cloud
+ INNER JOIN public.users USING (user_id)
+ WHERE users.tenant_id = all_tenants.tenant_id), 0),
+ t_projects=COALESCE((SELECT COUNT(*)
+ FROM public.projects
+ WHERE deleted_at ISNULL
+ AND projects.tenant_id = all_tenants.tenant_id), 0),
+ t_sessions=COALESCE((SELECT COUNT(*)
+ FROM public.sessions
+ INNER JOIN public.projects USING (project_id)
+ WHERE projects.tenant_id = all_tenants.tenant_id), 0),
+ t_users=COALESCE((SELECT COUNT(*)
+ FROM public.users
+ WHERE deleted_at ISNULL
+ AND users.tenant_id = all_tenants.tenant_id), 0)
+ FROM (
+ SELECT tenant_id
+ FROM public.tenants
+ ) AS all_tenants
+ WHERE tenants.tenant_id = all_tenants.tenant_id
+ RETURNING *,(SELECT email FROM users_ee WHERE role = 'owner' AND users_ee.tenant_id = tenants.tenant_id LIMIT 1);"""
+ )
+ data = cur.fetchall()
+ requests.post('https://parrot.asayer.io/os/telemetry',
+ json={"stats": [process_data(d, edition='ee') for d in data]})
+
+
+def new_client(tenant_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""SELECT *,
+ (SELECT email FROM public.users WHERE tenant_id=%(tenant_id)s) AS email
+ FROM public.tenants
+ WHERE tenant_id=%(tenant_id)s;""", {"tenant_id": tenant_id}))
+ data = cur.fetchone()
+ requests.post('https://parrot.asayer.io/os/signup', json=process_data(data, edition='ee'))
diff --git a/ee/api/chalicelib/ee/tenants.py b/ee/api/chalicelib/ee/tenants.py
new file mode 100644
index 000000000..38db9e653
--- /dev/null
+++ b/ee/api/chalicelib/ee/tenants.py
@@ -0,0 +1,86 @@
+from chalicelib.utils import pg_client
+from chalicelib.utils import helper
+from chalicelib.ee import users
+
+
+def get_by_tenant_id(tenant_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""SELECT
+ t.tenant_id,
+ t.name,
+ t.api_key,
+ t.created_at,
+ t.edition,
+ t.version_number,
+ t.opt_out
+ FROM public.tenants AS t
+ WHERE t.tenant_id = %(tenantId)s AND t.deleted_at ISNULL
+ LIMIT 1;""",
+ {"tenantId": tenant_id})
+ )
+ return helper.dict_to_camel_case(cur.fetchone())
+
+
+def get_by_api_key(api_key):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""SELECT
+ t.tenant_id,
+ t.name,
+ t.created_at
+ FROM public.tenants AS t
+ WHERE t.api_key = %(api_key)s AND t.deleted_at ISNULL
+ LIMIT 1;""",
+ {"api_key": api_key})
+ )
+ return helper.dict_to_camel_case(cur.fetchone())
+
+
+def generate_new_api_key(tenant_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""UPDATE public.tenants
+ SET api_key=generate_api_key(20)
+ WHERE tenant_id= %(tenant_id)s AND deleted_at ISNULL
+ RETURNING api_key;""",
+ {"tenant_id": tenant_id})
+ )
+ return helper.dict_to_camel_case(cur.fetchone())
+
+
+def edit_client(tenant_id, changes):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""\
+ UPDATE public.tenants
+ SET {", ".join([f"{helper.key_to_snake_case(k)} = %({k})s" for k in changes.keys()])}
+ WHERE tenant_id= %(tenant_id)s AND deleted_at ISNULL
+ RETURNING name, opt_out;""",
+ {"tenantId": tenant_id, **changes})
+ )
+ return helper.dict_to_camel_case(cur.fetchone())
+
+
+def update(tenant_id, user_id, data):
+ admin = users.get(user_id=user_id, tenant_id=tenant_id)
+
+ if not admin["admin"] and not admin["superAdmin"]:
+ return {"error": "unauthorized"}
+ if "name" not in data and "optOut" not in data:
+ return {"errors": ["please provide 'name' of 'optOut' attribute for update"]}
+ changes = {}
+ if "name" in data:
+ changes["name"] = data["name"]
+ if "optOut" in data:
+ changes["optOut"] = data["optOut"]
+ return edit_client(tenant_id=tenant_id, changes=changes)
+
+
+def get_tenants():
+ with pg_client.PostgresClient() as cur:
+ cur.execute(f"SELECT name FROM public.tenants")
+ return helper.list_to_camel_case(cur.fetchall())
diff --git a/ee/api/chalicelib/ee/users.py b/ee/api/chalicelib/ee/users.py
new file mode 100644
index 000000000..5d6d38dba
--- /dev/null
+++ b/ee/api/chalicelib/ee/users.py
@@ -0,0 +1,473 @@
+import json
+import time
+
+from chalicelib.core import authorizers
+
+from chalicelib.utils import helper
+from chalicelib.utils import pg_client
+from chalicelib.utils.TimeUTC import TimeUTC
+from chalicelib.utils.helper import environ
+
+from chalicelib.ee import tenants
+
+
+def create_new_member(tenant_id, email, password, admin, name, owner=False):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(f"""\
+ WITH u AS (
+ INSERT INTO public.users (tenant_id, email, role, name, data)
+ VALUES (%(tenantId)s, %(email)s, %(role)s, %(name)s, %(data)s)
+ RETURNING user_id,email,role,name,appearance
+ ),
+ au AS (INSERT
+ INTO public.basic_authentication (user_id, password, generated_password)
+ VALUES ((SELECT user_id FROM u), crypt(%(password)s, gen_salt('bf', 12)), TRUE))
+ SELECT u.user_id AS id,
+ u.email,
+ u.role,
+ u.name,
+ TRUE AS change_password,
+ (CASE WHEN u.role = 'owner' THEN TRUE ELSE FALSE END) AS super_admin,
+ (CASE WHEN u.role = 'admin' THEN TRUE ELSE FALSE END) AS admin,
+ (CASE WHEN u.role = 'member' THEN TRUE ELSE FALSE END) AS member,
+ u.appearance
+ FROM u;""",
+ {"tenantId": tenant_id, "email": email, "password": password,
+ "role": "owner" if owner else "admin" if admin else "member", "name": name,
+ "data": json.dumps({"lastAnnouncementView": TimeUTC.now()})})
+ cur.execute(
+ query
+ )
+ return helper.dict_to_camel_case(cur.fetchone())
+
+
+def restore_member(tenant_id, user_id, email, password, admin, name, owner=False):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(f"""\
+ UPDATE public.users
+ SET name= %(name)s,
+ role = %(role)s,
+ deleted_at= NULL,
+ created_at = timezone('utc'::text, now()),
+ tenant_id= %(tenant_id)s,
+ api_key= generate_api_key(20)
+ WHERE user_id=%(user_id)s
+ RETURNING user_id AS id,
+ email,
+ role,
+ name,
+ TRUE AS change_password,
+ (CASE WHEN role = 'owner' THEN TRUE ELSE FALSE END) AS super_admin,
+ (CASE WHEN role = 'admin' THEN TRUE ELSE FALSE END) AS admin,
+ (CASE WHEN role = 'member' THEN TRUE ELSE FALSE END) AS member,
+ appearance;""",
+ {"tenant_id": tenant_id, "user_id": user_id, "email": email,
+ "role": "owner" if owner else "admin" if admin else "member", "name": name})
+ cur.execute(
+ query
+ )
+ result = helper.dict_to_camel_case(cur.fetchone())
+ query = cur.mogrify("""\
+ UPDATE public.basic_authentication
+ SET password= crypt(%(password)s, gen_salt('bf', 12)),
+ generated_password= TRUE,
+ token=NULL,
+ token_requested_at=NULL
+ WHERE user_id=%(user_id)s;""",
+ {"user_id": user_id, "password": password})
+ cur.execute(
+ query
+ )
+
+ return result
+
+
+def update(tenant_id, user_id, changes):
+ AUTH_KEYS = ["password", "generatedPassword", "token"]
+ if len(changes.keys()) == 0:
+ return None
+
+ sub_query_users = []
+ sub_query_bauth = []
+ for key in changes.keys():
+ if key in AUTH_KEYS:
+ if key == "password":
+ sub_query_bauth.append("password = crypt(%(password)s, gen_salt('bf', 12))")
+ sub_query_bauth.append("changed_at = timezone('utc'::text, now())")
+ elif key == "token":
+ if changes[key] is not None:
+ sub_query_bauth.append("token = %(token)s")
+ sub_query_bauth.append("token_requested_at = timezone('utc'::text, now())")
+ else:
+ sub_query_bauth.append("token = NULL")
+ sub_query_bauth.append("token_requested_at = NULL")
+ else:
+ sub_query_bauth.append(f"{helper.key_to_snake_case(key)} = %({key})s")
+ else:
+ if key == "appearance":
+ sub_query_users.append(f"appearance = %(appearance)s::jsonb")
+ changes["appearance"] = json.dumps(changes[key])
+ else:
+ sub_query_users.append(f"{helper.key_to_snake_case(key)} = %({key})s")
+
+ with pg_client.PostgresClient() as cur:
+ if len(sub_query_users) > 0:
+ cur.execute(
+ cur.mogrify(f"""\
+ UPDATE public.users
+ SET {" ,".join(sub_query_users)}
+ FROM public.basic_authentication
+ WHERE users.user_id = %(user_id)s
+ AND users.tenant_id = %(tenant_id)s
+ AND users.user_id = basic_authentication.user_id
+ RETURNING users.user_id AS id,
+ users.email,
+ users.role,
+ users.name,
+ basic_authentication.generated_password AS change_password,
+ (CASE WHEN users.role = 'owner' THEN TRUE ELSE FALSE END) AS super_admin,
+ (CASE WHEN users.role = 'admin' THEN TRUE ELSE FALSE END) AS admin,
+ (CASE WHEN users.role = 'member' THEN TRUE ELSE FALSE END) AS member,
+ users.appearance;""",
+ {"tenant_id": tenant_id, "user_id": user_id, **changes})
+ )
+ if len(sub_query_bauth) > 0:
+ cur.execute(
+ cur.mogrify(f"""\
+ UPDATE public.basic_authentication
+ SET {" ,".join(sub_query_bauth)}
+ FROM public.users AS users
+ WHERE basic_authentication.user_id = %(user_id)s
+ AND users.tenant_id = %(tenant_id)s
+ AND users.user_id = basic_authentication.user_id
+ RETURNING users.user_id AS id,
+ users.email,
+ users.role,
+ users.name,
+ basic_authentication.generated_password AS change_password,
+ (CASE WHEN users.role = 'owner' THEN TRUE ELSE FALSE END) AS super_admin,
+ (CASE WHEN users.role = 'admin' THEN TRUE ELSE FALSE END) AS admin,
+ (CASE WHEN users.role = 'member' THEN TRUE ELSE FALSE END) AS member,
+ users.appearance;""",
+ {"tenant_id": tenant_id, "user_id": user_id, **changes})
+ )
+
+ return helper.dict_to_camel_case(cur.fetchone())
+
+
+def create_member(tenant_id, user_id, data):
+ admin = get(tenant_id=tenant_id, user_id=user_id)
+ if not admin["admin"] and not admin["superAdmin"]:
+ return {"errors": ["unauthorized"]}
+ if data.get("userId") is not None:
+ return {"errors": ["please use POST/PUT /client/members/{memberId} for update"]}
+ user = get_by_email_only(email=data["email"])
+ if user:
+ return {"errors": ["user already exists"]}
+ name = data.get("name", None)
+ if name is not None and not helper.is_alphabet_latin_space(name):
+ return {"errors": ["invalid user name"]}
+ if name is None:
+ name = data["email"]
+ temp_pass = helper.generate_salt()[:8]
+ user = get_deleted_user_by_email(email=data["email"])
+ if user is not None:
+ new_member = restore_member(tenant_id=tenant_id, email=data["email"], password=temp_pass,
+ admin=data.get("admin", False), name=name, user_id=user["userId"])
+ else:
+ new_member = create_new_member(tenant_id=tenant_id, email=data["email"], password=temp_pass,
+ admin=data.get("admin", False), name=name)
+
+ helper.async_post(environ['email_basic'] % 'member_invitation',
+ {
+ "email": data["email"],
+ "userName": data["email"],
+ "tempPassword": temp_pass,
+ "clientId": tenants.get_by_tenant_id(tenant_id)["name"],
+ "senderName": admin["name"]
+ })
+ return {"data": new_member}
+
+
+def get(user_id, tenant_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""SELECT
+ users.user_id AS id,
+ email,
+ role,
+ name,
+ basic_authentication.generated_password,
+ (CASE WHEN role = 'owner' THEN TRUE ELSE FALSE END) AS super_admin,
+ (CASE WHEN role = 'admin' THEN TRUE ELSE FALSE END) AS admin,
+ (CASE WHEN role = 'member' THEN TRUE ELSE FALSE END) AS member,
+ appearance,
+ api_key
+ FROM public.users LEFT JOIN public.basic_authentication ON users.user_id=basic_authentication.user_id
+ WHERE
+ users.user_id = %(userId)s
+ AND tenant_id = %(tenantId)s
+ AND deleted_at IS NULL
+ LIMIT 1;""",
+ {"userId": user_id, "tenantId": tenant_id})
+ )
+ r = cur.fetchone()
+ return helper.dict_to_camel_case(r, ignore_keys=["appearance"])
+
+
+def generate_new_api_key(user_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""UPDATE public.users
+ SET api_key=generate_api_key(20)
+ WHERE
+ users.user_id = %(userId)s
+ AND deleted_at IS NULL
+ RETURNING api_key;""",
+ {"userId": user_id})
+ )
+ r = cur.fetchone()
+ return helper.dict_to_camel_case(r)
+
+
+def edit(user_id_to_update, tenant_id, changes, editor_id):
+ ALLOW_EDIT = ["name", "email", "admin", "appearance"]
+ user = get(user_id=user_id_to_update, tenant_id=tenant_id)
+ if editor_id != user_id_to_update or "admin" in changes and changes["admin"] != user["admin"]:
+ admin = get(tenant_id=tenant_id, user_id=editor_id)
+ if not admin["superAdmin"] and not admin["admin"]:
+ return {"errors": ["unauthorized"]}
+
+ keys = list(changes.keys())
+ for k in keys:
+ if k not in ALLOW_EDIT:
+ changes.pop(k)
+ keys = list(changes.keys())
+
+ if len(keys) > 0:
+ if "email" in keys and changes["email"] != user["email"]:
+ if email_exists(changes["email"]):
+ return {"errors": ["email already exists."]}
+ if get_deleted_user_by_email(changes["email"]) is not None:
+ return {"errors": ["email previously deleted."]}
+ if "admin" in keys:
+ changes["role"] = "admin" if changes.pop("admin") else "member"
+ if len(changes.keys()) > 0:
+ updated_user = update(tenant_id=tenant_id, user_id=user_id_to_update, changes=changes)
+
+ return {"data": updated_user}
+ return {"data": user}
+
+
+def get_by_email_only(email):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""SELECT
+ users.user_id AS id,
+ users.tenant_id,
+ users.email,
+ users.role,
+ users.name,
+ basic_authentication.generated_password,
+ (CASE WHEN users.role = 'owner' THEN TRUE ELSE FALSE END) AS super_admin,
+ (CASE WHEN users.role = 'admin' THEN TRUE ELSE FALSE END) AS admin,
+ (CASE WHEN users.role = 'member' THEN TRUE ELSE FALSE END) AS member
+ FROM public.users LEFT JOIN public.basic_authentication ON users.user_id=basic_authentication.user_id
+ WHERE
+ users.email = %(email)s
+ AND users.deleted_at IS NULL;""",
+ {"email": email})
+ )
+ r = cur.fetchall()
+ return helper.list_to_camel_case(r)
+
+
+def get_by_email_reset(email, reset_token):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""SELECT
+ users.user_id AS id,
+ users.tenant_id,
+ users.email,
+ users.role,
+ users.name,
+ basic_authentication.generated_password,
+ (CASE WHEN users.role = 'owner' THEN TRUE ELSE FALSE END) AS super_admin,
+ (CASE WHEN users.role = 'admin' THEN TRUE ELSE FALSE END) AS admin,
+ (CASE WHEN users.role = 'member' THEN TRUE ELSE FALSE END) AS member
+ FROM public.users LEFT JOIN public.basic_authentication ON users.user_id=basic_authentication.user_id
+ WHERE
+ users.email = %(email)s
+ AND basic_authentication.token =%(token)s
+ AND users.deleted_at IS NULL""",
+ {"email": email, "token": reset_token})
+ )
+ r = cur.fetchone()
+ return helper.dict_to_camel_case(r)
+
+
+def get_members(tenant_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""SELECT
+ users.user_id AS id,
+ users.email,
+ users.role,
+ users.name,
+ basic_authentication.generated_password,
+ (CASE WHEN users.role = 'owner' THEN TRUE ELSE FALSE END) AS super_admin,
+ (CASE WHEN users.role = 'admin' THEN TRUE ELSE FALSE END) AS admin,
+ (CASE WHEN users.role = 'member' THEN TRUE ELSE FALSE END) AS member
+ FROM public.users LEFT JOIN public.basic_authentication ON users.user_id=basic_authentication.user_id
+ WHERE users.tenant_id = %(tenantId)s AND users.deleted_at IS NULL
+ ORDER BY name, id""",
+ {"tenantId": tenant_id})
+ )
+ r = cur.fetchall()
+ if len(r):
+ return helper.list_to_camel_case(r)
+
+ return []
+
+
+def delete_member(user_id, tenant_id, id_to_delete):
+ if user_id == id_to_delete:
+ return {"errors": ["unauthorized, cannot delete self"]}
+
+ admin = get(user_id=user_id, tenant_id=tenant_id)
+ if admin["member"]:
+ return {"errors": ["unauthorized"]}
+
+ to_delete = get(user_id=id_to_delete, tenant_id=tenant_id)
+ if to_delete is None:
+ return {"errors": ["not found"]}
+
+ if to_delete["superAdmin"]:
+ return {"errors": ["cannot delete super admin"]}
+
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(f"""UPDATE public.users
+ SET deleted_at = timezone('utc'::text, now())
+ WHERE user_id=%(user_id)s AND tenant_id=%(tenant_id)s;""",
+ {"user_id": id_to_delete, "tenant_id": tenant_id}))
+ return {"data": get_members(tenant_id=tenant_id)}
+
+
+def change_password(tenant_id, user_id, email, old_password, new_password):
+ item = get(tenant_id=tenant_id, user_id=user_id)
+ if item is None:
+ return {"errors": ["access denied"]}
+ if old_password == new_password:
+ return {"errors": ["old and new password are the same"]}
+ auth = authenticate(email, old_password, for_change_password=True)
+ if auth is None:
+ return {"errors": ["wrong password"]}
+ changes = {"password": new_password, "generatedPassword": False}
+ return {"data": update(tenant_id=tenant_id, user_id=user_id, changes=changes),
+ "jwt": authenticate(email, new_password)["jwt"]}
+
+
+def email_exists(email):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""SELECT
+ count(user_id)
+ FROM public.users
+ WHERE
+ email = %(email)s
+ AND deleted_at IS NULL
+ LIMIT 1;""",
+ {"email": email})
+ )
+ r = cur.fetchone()
+ return r["count"] > 0
+
+
+def get_deleted_user_by_email(email):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"""SELECT
+ *
+ FROM public.users
+ WHERE
+ email = %(email)s
+ AND deleted_at NOTNULL
+ LIMIT 1;""",
+ {"email": email})
+ )
+ r = cur.fetchone()
+ return helper.dict_to_camel_case(r)
+
+
+def auth_exists(user_id, tenant_id, jwt_iat, jwt_aud):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify(
+ f"SELECT user_id AS id,jwt_iat, changed_at FROM public.users INNER JOIN public.basic_authentication USING(user_id) WHERE user_id = %(userId)s AND tenant_id = %(tenantId)s AND deleted_at IS NULL LIMIT 1;",
+ {"userId": user_id, "tenantId": tenant_id})
+ )
+ r = cur.fetchone()
+ return r is not None \
+ and r.get("jwt_iat") is not None \
+ and (abs(jwt_iat - TimeUTC.datetime_to_timestamp(r["jwt_iat"]) // 1000) <= 1 \
+ or (jwt_aud.startswith("plugin") \
+ and (r["changed_at"] is None \
+ or jwt_iat >= (TimeUTC.datetime_to_timestamp(r["changed_at"]) // 1000)))
+ )
+
+
+def authenticate(email, password, for_change_password=False, for_plugin=False):
+ if helper.TRACK_TIME:
+ now = int(time.time() * 1000)
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify(
+ f"""SELECT
+ users.user_id AS id,
+ users.tenant_id,
+ users.role,
+ users.name,
+ basic_authentication.generated_password AS change_password,
+ (CASE WHEN users.role = 'owner' THEN TRUE ELSE FALSE END) AS super_admin,
+ (CASE WHEN users.role = 'admin' THEN TRUE ELSE FALSE END) AS admin,
+ (CASE WHEN users.role = 'member' THEN TRUE ELSE FALSE END) AS member,
+ users.appearance
+ FROM public.users AS users INNER JOIN public.basic_authentication USING(user_id)
+ WHERE users.email = %(email)s
+ AND basic_authentication.password = crypt(%(password)s, basic_authentication.password)
+ AND basic_authentication.user_id = (SELECT su.user_id FROM public.users AS su WHERE su.email=%(email)s AND su.deleted_at IS NULL LIMIT 1)
+ LIMIT 1;""",
+ {"email": email, "password": password})
+
+ cur.execute(query)
+ r = cur.fetchone()
+ if helper.TRACK_TIME:
+ now2 = int(time.time() * 1000)
+ print(f"=====> authentication query&fetch in: {now2 - now} ms")
+ now = now2
+ if r is not None:
+ if for_change_password:
+ return True
+ r = helper.dict_to_camel_case(r, ignore_keys=["appearance"])
+ query = cur.mogrify(
+ f"""UPDATE public.users
+ SET jwt_iat = timezone('utc'::text, now())
+ WHERE user_id = %(user_id)s
+ RETURNING jwt_iat;""",
+ {"user_id": r["id"]})
+ cur.execute(query)
+ return {
+ "jwt": authorizers.generate_jwt(r['id'], r['tenantId'],
+ TimeUTC.datetime_to_timestamp(cur.fetchone()["jwt_iat"]),
+ aud=f"plugin:{helper.get_stage_name()}" if for_plugin else f"front:{helper.get_stage_name()}"),
+ "email": email,
+ **r
+ }
+ return None
diff --git a/ee/api/chalicelib/ee/utils/__init__.py b/ee/api/chalicelib/ee/utils/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/ee/api/chalicelib/ee/utils/ch_client.py b/ee/api/chalicelib/ee/utils/ch_client.py
new file mode 100644
index 000000000..cfe635b4a
--- /dev/null
+++ b/ee/api/chalicelib/ee/utils/ch_client.py
@@ -0,0 +1,29 @@
+import clickhouse_driver
+from chalicelib.utils.helper import environ
+
+
+class ClickHouseClient:
+ __client = None
+
+ def __init__(self):
+ self.__client = clickhouse_driver.Client(host=environ["ch_host"],
+ database="default",
+ port=int(environ["ch_port"])) \
+ if self.__client is None else self.__client
+
+ def __enter__(self):
+ return self
+
+ def execute(self, query, params=None, **args):
+ results = self.__client.execute(query=query, params=params, with_column_types=True, **args)
+ keys = tuple(x for x, y in results[1])
+ return [dict(zip(keys, i)) for i in results[0]]
+
+ def insert(self, query, params=None, **args):
+ return self.__client.execute(query=query, params=params, **args)
+
+ def client(self):
+ return self.__client
+
+ def __exit__(self, *args):
+ pass
diff --git a/ee/api/chalicelib/ee/webhook.py b/ee/api/chalicelib/ee/webhook.py
new file mode 100644
index 000000000..0a2406ab9
--- /dev/null
+++ b/ee/api/chalicelib/ee/webhook.py
@@ -0,0 +1,185 @@
+from chalicelib.utils import pg_client, helper
+from chalicelib.utils.TimeUTC import TimeUTC
+import requests
+
+
+def get_by_id(webhook_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ SELECT
+ w.*
+ FROM public.webhooks AS w
+ where w.webhook_id =%(webhook_id)s AND deleted_at ISNULL;""",
+ {"webhook_id": webhook_id})
+ )
+ w = helper.dict_to_camel_case(cur.fetchone())
+ if w:
+ w["createdAt"] = TimeUTC.datetime_to_timestamp(w["createdAt"])
+ return w
+
+
+def get(tenant_id, webhook_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ SELECT
+ w.*
+ FROM public.webhooks AS w
+ where w.webhook_id =%(webhook_id)s AND w.tenant_id =%(tenant_id)s AND deleted_at ISNULL;""",
+ {"webhook_id": webhook_id, "tenant_id": tenant_id})
+ )
+ w = helper.dict_to_camel_case(cur.fetchone())
+ if w:
+ w["createdAt"] = TimeUTC.datetime_to_timestamp(w["createdAt"])
+ return w
+
+
+def get_by_type(tenant_id, webhook_type):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ SELECT
+ w.webhook_id AS id,w.webhook_id,w.endpoint,w.auth_header,w.type,w.index,w.name,w.created_at
+ FROM public.webhooks AS w
+ where
+ w.tenant_id =%(tenant_id)s
+ AND w.type =%(type)s
+ AND deleted_at ISNULL;""",
+ {"type": webhook_type, "tenant_id": tenant_id})
+ )
+ webhooks = helper.list_to_camel_case(cur.fetchall())
+ for w in webhooks:
+ w["createdAt"] = TimeUTC.datetime_to_timestamp(w["createdAt"])
+ return webhooks
+
+
+def get_by_tenant(tenant_id, replace_none=False):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ SELECT
+ w.*
+ FROM public.webhooks AS w
+ where
+ w.tenant_id =%(tenant_id)s
+ AND deleted_at ISNULL;""",
+ {"tenant_id": tenant_id})
+ )
+ all = helper.list_to_camel_case(cur.fetchall())
+ if replace_none:
+ for w in all:
+ w["createdAt"] = TimeUTC.datetime_to_timestamp(w["createdAt"])
+ for k in w.keys():
+ if w[k] is None:
+ w[k] = ''
+ else:
+ for w in all:
+ w["createdAt"] = TimeUTC.datetime_to_timestamp(w["createdAt"])
+ return all
+
+
+def update(tenant_id, webhook_id, changes, replace_none=False):
+ allow_update = ["name", "index", "authHeader", "endpoint"]
+ with pg_client.PostgresClient() as cur:
+ sub_query = [f"{helper.key_to_snake_case(k)} = %({k})s" for k in changes.keys() if k in allow_update]
+ cur.execute(
+ cur.mogrify(f"""\
+ UPDATE public.webhooks
+ SET {','.join(sub_query)}
+ WHERE tenant_id =%(tenant_id)s AND webhook_id =%(id)s AND deleted_at ISNULL
+ RETURNING *;""",
+ {"tenant_id": tenant_id, "id": webhook_id, **changes})
+ )
+ w = helper.dict_to_camel_case(cur.fetchone())
+ w["createdAt"] = TimeUTC.datetime_to_timestamp(w["createdAt"])
+ if replace_none:
+ for k in w.keys():
+ if w[k] is None:
+ w[k] = ''
+ return w
+
+
+def add(tenant_id, endpoint, auth_header=None, webhook_type='webhook', name="", replace_none=False):
+ with pg_client.PostgresClient() as cur:
+ query = cur.mogrify("""\
+ INSERT INTO public.webhooks(tenant_id, endpoint,auth_header,type,name)
+ VALUES (%(tenant_id)s, %(endpoint)s, %(auth_header)s, %(type)s,%(name)s)
+ RETURNING *;""",
+ {"tenant_id": tenant_id, "endpoint": endpoint, "auth_header": auth_header,
+ "type": webhook_type, "name": name})
+ cur.execute(
+ query
+ )
+ w = helper.dict_to_camel_case(cur.fetchone())
+ w["createdAt"] = TimeUTC.datetime_to_timestamp(w["createdAt"])
+ if replace_none:
+ for k in w.keys():
+ if w[k] is None:
+ w[k] = ''
+ return w
+
+
+def add_edit(tenant_id, data, replace_none=None):
+ if "webhookId" in data:
+ return update(tenant_id=tenant_id, webhook_id=data["webhookId"],
+ changes={"endpoint": data["endpoint"],
+ "authHeader": None if "authHeader" not in data else data["authHeader"],
+ "name": data["name"] if "name" in data else ""}, replace_none=replace_none)
+ else:
+ return add(tenant_id=tenant_id,
+ endpoint=data["endpoint"],
+ auth_header=None if "authHeader" not in data else data["authHeader"],
+ name=data["name"] if "name" in data else "", replace_none=replace_none)
+
+
+def delete(tenant_id, webhook_id):
+ with pg_client.PostgresClient() as cur:
+ cur.execute(
+ cur.mogrify("""\
+ UPDATE public.webhooks
+ SET deleted_at = (now() at time zone 'utc')
+ WHERE tenant_id =%(tenant_id)s AND webhook_id =%(id)s AND deleted_at ISNULL
+ RETURNING *;""",
+ {"tenant_id": tenant_id, "id": webhook_id})
+ )
+ return {"data": {"state": "success"}}
+
+
+def trigger_batch(data_list):
+ webhooks_map = {}
+ for w in data_list:
+ if w["destination"] not in webhooks_map:
+ webhooks_map[w["destination"]] = get_by_id(webhook_id=w["destination"])
+ __trigger(hook=webhooks_map[w["destination"]], data=w["data"])
+
+
+def __trigger(hook, data):
+ if hook["type"] == 'webhook':
+ headers = {}
+ if hook["authHeader"] is not None and len(hook["authHeader"]) > 0:
+ headers = {"Authorization": hook["authHeader"]}
+
+ # body = {
+ # "webhookId": hook["id"],
+ # "createdAt": TimeUTC.now(),
+ # "event": event,
+ # "data": data
+ # }
+
+ r = requests.post(url=hook["endpoint"], json=data, headers=headers)
+ if r.status_code != 200:
+ print("=======> webhook: something went wrong")
+ print(r)
+ print(r.status_code)
+ print(r.text)
+ return
+ response = None
+ try:
+ response = r.json()
+ except:
+ try:
+ response = r.text
+ except:
+ print("no response found")
+ return response
diff --git a/ee/api/chalicelib/utils/TimeUTC.py b/ee/api/chalicelib/utils/TimeUTC.py
new file mode 100644
index 000000000..4b19c45ba
--- /dev/null
+++ b/ee/api/chalicelib/utils/TimeUTC.py
@@ -0,0 +1,115 @@
+from datetime import datetime, timedelta
+from calendar import monthrange
+import pytz
+
+
+class TimeUTC:
+ MS_MINUTE = 60 * 1000
+ MS_HOUR = MS_MINUTE * 60
+ MS_DAY = MS_HOUR * 24
+ MS_MONTH = MS_DAY * 30
+ MS_MONTH_TRUE = monthrange(datetime.now(pytz.utc).astimezone(pytz.utc).year,
+ datetime.now(pytz.utc).astimezone(pytz.utc).month)[1] * MS_DAY
+ RANGE_VALUE = None
+
+ @staticmethod
+ def midnight(delta_days=0):
+ return int((datetime.now(pytz.utc) + timedelta(delta_days)) \
+ .replace(hour=0, minute=0, second=0, microsecond=0) \
+ .astimezone(pytz.utc).timestamp() * 1000)
+
+ @staticmethod
+ def __now(delta_days=0, delta_minutes=0, delta_seconds=0):
+ return (datetime.now(pytz.utc) + timedelta(days=delta_days, minutes=delta_minutes, seconds=delta_seconds)) \
+ .astimezone(pytz.utc)
+
+ @staticmethod
+ def now(delta_days=0, delta_minutes=0, delta_seconds=0):
+ return int(TimeUTC.__now(delta_days=delta_days, delta_minutes=delta_minutes,
+ delta_seconds=delta_seconds).timestamp() * 1000)
+
+ @staticmethod
+ def month_start(delta_month=0):
+ month = TimeUTC.__now().month + delta_month
+ return int(datetime.now(pytz.utc) \
+ .replace(year=TimeUTC.__now().year + ((-12 + month) // 12 if month % 12 <= 0 else month // 12),
+ month=12 + month % 12 if month % 12 <= 0 else month % 12 if month > 12 else month,
+ day=1,
+ hour=0, minute=0,
+ second=0,
+ microsecond=0) \
+ .astimezone(pytz.utc).timestamp() * 1000)
+
+ @staticmethod
+ def year_start(delta_year=0):
+ return int(datetime.now(pytz.utc) \
+ .replace(year=TimeUTC.__now().year + delta_year, month=1, day=1, hour=0, minute=0, second=0,
+ microsecond=0) \
+ .astimezone(pytz.utc).timestamp() * 1000)
+
+ @staticmethod
+ def custom(year=None, month=None, day=None, hour=None, minute=None):
+ args = locals()
+ return int(datetime.now(pytz.utc) \
+ .replace(**{key: args[key] for key in args if args[key] is not None}, second=0, microsecond=0) \
+ .astimezone(pytz.utc).timestamp() * 1000)
+
+ @staticmethod
+ def future(delta_day, delta_hour, delta_minute, minutes_period=None, start=None):
+ this_time = TimeUTC.__now()
+ if delta_day == -1:
+ if this_time.hour < delta_hour or this_time.hour == delta_hour and this_time.minute < delta_minute:
+ return TimeUTC.custom(hour=delta_hour, minute=delta_minute)
+
+ return TimeUTC.custom(day=TimeUTC.__now(1).day, hour=delta_hour, minute=delta_minute)
+ elif delta_day > -1:
+ if this_time.weekday() < delta_day or this_time.weekday() == delta_day and (
+ this_time.hour < delta_hour or this_time.hour == delta_hour and this_time.minute < delta_minute):
+ return TimeUTC.custom(day=TimeUTC.__now(delta_day - this_time.weekday()).day, hour=delta_hour,
+ minute=delta_minute)
+
+ return TimeUTC.custom(day=TimeUTC.__now(7 + delta_day - this_time.weekday()).day, hour=delta_hour,
+ minute=delta_minute)
+ if start is not None:
+ return start + minutes_period * 60 * 1000
+
+ return TimeUTC.now(delta_minutes=minutes_period)
+
+ @staticmethod
+ def from_ms_timestamp(ts):
+ return datetime.fromtimestamp(ts // 1000, pytz.utc)
+
+ @staticmethod
+ def to_human_readable(ts, fmt='%Y-%m-%d %H:%M:%S UTC'):
+ return datetime.utcfromtimestamp(ts // 1000).strftime(fmt)
+
+ @staticmethod
+ def human_to_timestamp(ts, pattern):
+ return int(datetime.strptime(ts, pattern).timestamp() * 1000)
+
+ @staticmethod
+ def datetime_to_timestamp(date):
+ if date is None:
+ return None
+ return int(datetime.timestamp(date) * 1000)
+
+ @staticmethod
+ def get_start_end_from_range(range_value):
+ range_value = range_value.upper()
+ if TimeUTC.RANGE_VALUE is None:
+ this_instant = TimeUTC.now()
+ TimeUTC.RANGE_VALUE = {
+ "TODAY": {"start": TimeUTC.midnight(), "end": this_instant},
+ "YESTERDAY": {"start": TimeUTC.midnight(delta_days=-1), "end": TimeUTC.midnight()},
+ "LAST_7_DAYS": {"start": TimeUTC.midnight(delta_days=-7), "end": this_instant},
+ "LAST_30_DAYS": {"start": TimeUTC.midnight(delta_days=-30), "end": this_instant},
+ "THIS_MONTH": {"start": TimeUTC.month_start(), "end": this_instant},
+ "LAST_MONTH": {"start": TimeUTC.month_start(delta_month=-1), "end": TimeUTC.month_start()},
+ "THIS_YEAR": {"start": TimeUTC.year_start(), "end": this_instant},
+ "CUSTOM_RANGE": {"start": TimeUTC.midnight(delta_days=-7), "end": this_instant} # Default is 7 days
+ }
+ return TimeUTC.RANGE_VALUE[range_value]["start"], TimeUTC.RANGE_VALUE[range_value]["end"]
+
+ @staticmethod
+ def get_utc_offset():
+ return int((datetime.now(pytz.utc).now() - datetime.now(pytz.utc).replace(tzinfo=None)).total_seconds() * 1000)
diff --git a/ee/api/chalicelib/utils/__init__.py b/ee/api/chalicelib/utils/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/ee/api/chalicelib/utils/args_transformer.py b/ee/api/chalicelib/utils/args_transformer.py
new file mode 100644
index 000000000..5611df054
--- /dev/null
+++ b/ee/api/chalicelib/utils/args_transformer.py
@@ -0,0 +1,10 @@
+def int_arg(x):
+ return int(x) if x is not None else int(0)
+
+
+def float_arg(x):
+ return float(x) if x is not None else float(0)
+
+
+def string(x):
+ return x
diff --git a/ee/api/chalicelib/utils/captcha.py b/ee/api/chalicelib/utils/captcha.py
new file mode 100644
index 000000000..f499a6da9
--- /dev/null
+++ b/ee/api/chalicelib/utils/captcha.py
@@ -0,0 +1,24 @@
+from chalicelib.utils.helper import environ as env
+import requests
+from chalicelib.utils import helper
+
+
+def __get_captcha_config():
+ return env["captcha_server"], env["captcha_key"]
+
+
+def is_valid(response):
+ if not helper.allow_captcha():
+ print("!! Captcha is disabled")
+ return True
+ url, secret = __get_captcha_config()
+ r = requests.post(url=url, data={"secret": secret, "response": response})
+ if r.status_code != 200:
+ print("something went wrong")
+ print(r)
+ print(r.status_code)
+ print(r.text)
+ return
+ r = r.json()
+ print(r)
+ return r["success"]
diff --git a/ee/api/chalicelib/utils/dev.py b/ee/api/chalicelib/utils/dev.py
new file mode 100644
index 000000000..3b350ce7e
--- /dev/null
+++ b/ee/api/chalicelib/utils/dev.py
@@ -0,0 +1,28 @@
+from functools import wraps
+from time import time
+import inspect
+from chalicelib.utils import helper
+
+
+def timed(f):
+ @wraps(f)
+ def wrapper(*args, **kwds):
+ if not helper.TRACK_TIME:
+ return f(*args, **kwds)
+ start = time()
+ result = f(*args, **kwds)
+ elapsed = time() - start
+ if inspect.stack()[1][3] == "_view_func":
+ print("DEBUG: %s: took %d s to finish" % (f.__name__, elapsed))
+ else:
+ call_stack = [i[3] for i in inspect.stack()[1:] if i[3] != "wrapper"]
+ call_stack = [c for c in call_stack if
+ c not in ['__init__', '__call__', 'finish_request', 'process_request_thread',
+ 'handle_request', '_generic_handle', 'handle', '_bootstrap_inner', 'run',
+ '_bootstrap', '_main_rest_api_handler', '_user_handler',
+ '_get_view_function_response', 'wrapped_event', 'handle_one_request',
+ '_global_error_handler', 'asayer_middleware']]
+ print("DEBUG: %s > %s took %d s to finish" % (" > ".join(call_stack), f.__name__, elapsed))
+ return result
+
+ return wrapper
diff --git a/ee/api/chalicelib/utils/email_handler.py b/ee/api/chalicelib/utils/email_handler.py
new file mode 100644
index 000000000..2de35e616
--- /dev/null
+++ b/ee/api/chalicelib/utils/email_handler.py
@@ -0,0 +1,90 @@
+import base64
+import re
+from email.header import Header
+from email.mime.image import MIMEImage
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
+
+from chalicelib.utils import helper, smtp
+from chalicelib.utils.helper import environ
+
+
+def __get_subject(subject):
+ return subject if helper.is_production() else f"{helper.get_stage_name()}: {subject}"
+
+
+def __get_html_from_file(source, formatting_variables):
+ if formatting_variables is None:
+ formatting_variables = {}
+ formatting_variables["frontend_url"] = environ["SITE_URL"]
+ with open(source, "r") as body:
+ BODY_HTML = body.read()
+ if formatting_variables is not None and len(formatting_variables.keys()) > 0:
+ BODY_HTML = re.sub(r"%(?![(])", "%%", BODY_HTML)
+ BODY_HTML = BODY_HTML % {**formatting_variables}
+ return BODY_HTML
+
+
+def __replace_images(HTML):
+ pattern_holder = re.compile(r' ')
+ return HTML, mime_img
+
+
+def send_html(BODY_HTML, SUBJECT, recipient, bcc=None):
+ BODY_HTML, mime_img = __replace_images(BODY_HTML)
+ if not isinstance(recipient, list):
+ recipient = [recipient]
+ msg = MIMEMultipart()
+ msg['Subject'] = Header(__get_subject(SUBJECT), 'utf-8')
+ msg['From'] = environ["EMAIL_FROM"]
+ msg['To'] = ""
+ body = MIMEText(BODY_HTML.encode('utf-8'), 'html', "utf-8")
+ msg.attach(body)
+ for m in mime_img:
+ msg.attach(m)
+
+ with smtp.SMTPClient() as s:
+ for r in recipient:
+ msg.replace_header("To", r)
+ r = [r]
+ if bcc is not None and len(bcc) > 0:
+ r += [bcc]
+ try:
+ print(f"Email sending to: {r}")
+ s.sendmail(msg['FROM'], r, msg.as_string().encode('ascii'))
+ except Exception as e:
+ print("!!! Email error!")
+ print(e)
+
+
+def send_text(recipients, text, subject):
+ with smtp.SMTPClient() as s:
+ msg = MIMEMultipart()
+ msg['Subject'] = Header(__get_subject(subject), 'utf-8')
+ msg['From'] = environ["EMAIL_FROM"]
+ msg['To'] = ", ".join(recipients)
+ body = MIMEText(text)
+ msg.attach(body)
+ try:
+ s.sendmail(msg['FROM'], recipients, msg.as_string().encode('ascii'))
+ except Exception as e:
+ print("!! Text-email failed: " + subject),
+ print(e)
+
+
+def __escape_text_html(text):
+ return text.replace("@", "@ ").replace(".", ". ").replace("=", "= ")
diff --git a/ee/api/chalicelib/utils/email_helper.py b/ee/api/chalicelib/utils/email_helper.py
new file mode 100644
index 000000000..3e5565f26
--- /dev/null
+++ b/ee/api/chalicelib/utils/email_helper.py
@@ -0,0 +1,119 @@
+from chalicelib.utils.TimeUTC import TimeUTC
+from chalicelib.utils.email_handler import __get_html_from_file, send_html, __escape_text_html
+
+
+def send_team_invitation(recipient, user_name, temp_password, client_id, sender_name):
+ BODY_HTML = __get_html_from_file("chalicelib/utils/html/invitation.html",
+ formatting_variables={"userName": __escape_text_html(user_name),
+ "password": temp_password, "clientId": client_id,
+ "sender": sender_name})
+ SUBJECT = "Welcome to Asayer"
+ send_html(BODY_HTML, SUBJECT, recipient)
+
+
+def send_reset_code(recipient, reset_code):
+ BODY_HTML = __get_html_from_file("chalicelib/utils/html/reset_password.html",
+ formatting_variables={"code": reset_code})
+ SUBJECT = "Password recovery"
+ send_html(BODY_HTML, SUBJECT, recipient)
+
+
+def send_assign_session(recipient, message, link):
+ BODY_HTML = __get_html_from_file("chalicelib/utils/html/assignment.html",
+ formatting_variables={"message": message,
+ "now": TimeUTC.to_human_readable(TimeUTC.now()),
+ "link": link})
+ SUBJECT = "assigned session"
+ send_html(BODY_HTML, SUBJECT, recipient)
+
+
+def alert_email(recipients, subject, data):
+ BODY_HTML = __get_html_from_file("chalicelib/utils/html/alert_notification.html", formatting_variables=data)
+ send_html(BODY_HTML=BODY_HTML, SUBJECT=subject, recipient=recipients)
+
+
+def __get_color(idx):
+ return "#3EAAAF" if idx == 0 else "#77C3C7" if idx == 1 else "#9ED4D7" if idx == 2 else "#99d59a"
+
+
+def weekly_report2(recipients, data):
+ data["o_tr_u"] = ""
+ data["o_tr_d"] = ""
+ for d in data["days_partition"]:
+ data[
+ "o_tr_u"] += f"""
+
+ """
+ data[
+ "o_tr_d"] += f"""{d["day_short"]} """
+
+ data[
+ "past_week_issues_status"] = f' 0 else "decrease"}.png" width="15px" height="10px" style="font-weight:300;vertical-align:middle">'
+ data["week_decision"] = "More" if data["past_week_issues_evolution"] > 0 else "Fewer"
+ data["past_week_issues_evolution"] = abs(data["past_week_issues_evolution"])
+ data[
+ "past_month_issues_status"] = f' 0 else "decrease"}.png" width="15px" height="10px" style="font-weight:300;vertical-align:middle">'
+ data["month_decision"] = "More" if data["past_month_issues_evolution"] > 0 else "Fewer"
+ data["past_month_issues_evolution"] = abs(data["past_month_issues_evolution"])
+ data["progress_legend"] = []
+ data["progress_tr"] = ""
+ for idx, i in enumerate(data["issues_by_type"]):
+ color = __get_color(idx)
+ data["progress_legend"].append(
+ f"""
+ {i["count"]}{i["type"]}
+ """)
+ data[
+ "progress_tr"] += f' '
+
+ data["progress_legend"] = '' + "".join(
+ data["progress_legend"]) + " "
+ data["breakdown_list"] = ""
+ color_breakdown = {}
+ data["breakdown_list_other"] = ""
+ for idx, i in enumerate(data["issues_breakdown_list"]):
+ if idx < len(data["issues_breakdown_list"]) - 1 or i["type"].lower() != "others":
+ color = __get_color(idx)
+ color_breakdown[i["type"]] = color
+ data["breakdown_list"] += f"""
+ {i["type"]}
+ {i["sessions_count"]}
+ 0 else "decrease"}.png" width="10px" height="7px" style="font-weight:300;vertical-align:middle;margin-right: 3px;"> {abs(i["last_week_sessions_evolution"])}%
+ 0 else "decrease"}.png" width="10px" height="7px" style="font-weight:300;vertical-align:middle;margin-right: 3px;"> {abs(i["last_month_sessions_evolution"])}%
+ """
+ else:
+ data["breakdown_list_other"] = f"""
+
+ {i["type"]}
+ {i["sessions_count"]}
+ 0 else "decrease"}.png" width="10px" height="7px" style="font-weight:300;vertical-align:middle;margin-right: 3px;"> {abs(i["last_week_sessions_evolution"])}%
+ 0 else "decrease"}.png" width="10px" height="7px" style="font-weight:300;vertical-align:middle;margin-right: 3px;"> {abs(i["last_month_sessions_evolution"])}%
+
+ """
+ data["b_tr_u"] = ""
+ data["b_tr_d"] = ""
+ for i in data["issues_breakdown_by_day"]:
+ data[
+ "b_tr_d"] += f"""
+ {i["day_short"]}
+ """
+ if len(i["partition"]) > 0:
+ sup_partition = ""
+ for j in i["partition"]:
+ sup_partition += f' '
+ else:
+ sup_partition = ' '
+ data[
+ "b_tr_u"] += f"""
+
+ """
+ BODY_HTML = __get_html_from_file("chalicelib/utils/html/Project-Weekly-Report.html", formatting_variables=data)
+ SUBJECT = "Asayer Project Weekly Report"
+ send_html(BODY_HTML=BODY_HTML, SUBJECT=SUBJECT, recipient=recipients)
diff --git a/ee/api/chalicelib/utils/event_filter_definition.py b/ee/api/chalicelib/utils/event_filter_definition.py
new file mode 100644
index 000000000..4c132cb13
--- /dev/null
+++ b/ee/api/chalicelib/utils/event_filter_definition.py
@@ -0,0 +1,15 @@
+class Event:
+ def __init__(self, ui_type, table, column):
+ self.ui_type = ui_type
+ self.table = table
+ self.column = column
+
+
+class SupportedFilter:
+ def __init__(self, get, query, value_limit, starts_with, starts_limit, ignore_if_starts_with):
+ self.get = get
+ self.query = query
+ self.valueLimit = value_limit
+ self.startsWith = starts_with
+ self.startsLimit = starts_limit
+ self.ignoreIfStartsWith = ignore_if_starts_with
diff --git a/ee/api/chalicelib/utils/github_client_v3.py b/ee/api/chalicelib/utils/github_client_v3.py
new file mode 100644
index 000000000..a86b721aa
--- /dev/null
+++ b/ee/api/chalicelib/utils/github_client_v3.py
@@ -0,0 +1,133 @@
+import requests
+from datetime import datetime
+
+
+class github_formatters:
+
+ @staticmethod
+ def get_timestamp(ts):
+ ts = ts[:-1]
+ pattern = '%Y-%m-%dT%H:%M:%S'
+ creation = datetime.strptime(ts, pattern)
+ return int(creation.timestamp() * 1000)
+
+ @staticmethod
+ def label(label):
+ return {
+ 'id': label["id"],
+ 'name': label["name"],
+ 'description': label["description"],
+ 'color': label["color"]
+ }
+
+ @staticmethod
+ def comment(comment):
+ return {
+ 'id': str(comment["id"]),
+ 'message': comment["body"],
+ 'author': str(github_formatters.user(comment["user"])["id"]),
+ 'createdAt': github_formatters.get_timestamp(comment["created_at"])
+ }
+
+ @staticmethod
+ def issue(issue):
+ labels = [github_formatters.label(l) for l in issue["labels"]]
+ result = {
+ 'id': str(issue["number"]),
+ 'creator': str(github_formatters.user(issue["user"])["id"]),
+ 'assignees': [str(github_formatters.user(a)["id"]) for a in issue["assignees"]],
+ 'title': issue["title"],
+ 'description': issue["body"],
+ 'status': issue["state"],
+ 'createdAt': github_formatters.get_timestamp(issue["created_at"]),
+ 'closed': issue["closed_at"] is not None,
+ 'commentsCount': issue["comments"],
+ 'issueType': [str(l["id"]) for l in labels if l["name"].lower() != "asayer"],
+ 'labels': [l["name"] for l in labels]
+ }
+ return result
+
+ @staticmethod
+ def user(user):
+ if not user:
+ return None
+ result = {
+ 'id': user["id"],
+ 'name': user["login"],
+ 'avatarUrls': {'24x24': user["avatar_url"]},
+ 'email': ""
+ }
+ return result
+
+ @staticmethod
+ def team_to_dict(team):
+ if not team:
+ return None
+
+ result = {'id': team.id, 'name': team.name, 'members_count': team.members_count}
+ return result
+
+ @staticmethod
+ def repo(repo):
+ if not repo:
+ return None
+ return {
+ "id": str(repo["id"]),
+ "name": repo["name"],
+ "description": repo["description"],
+ "creator": str(repo["owner"]["id"])
+ }
+
+ @staticmethod
+ def organization(org):
+ if not org:
+ return None
+ return {
+ "id": org["id"],
+ "name": org["login"],
+ "description": org["description"],
+ "avatarUrls": {'24x42': org["avatar_url"]}
+ }
+
+
+def get_response_links(response):
+ links = {}
+ if "Link" in response.headers:
+ link_headers = response.headers["Link"].split(", ")
+ for link_header in link_headers:
+ (url, rel) = link_header.split("; ")
+ url = url[1:-1]
+ rel = rel[5:-1]
+ links[rel] = url
+ return links
+
+
+class githubV3Request:
+ __base = "https://api.github.com"
+
+ def __init__(self, token):
+ self.__token = token
+
+ def __get_request_header(self):
+ return {"Accept": "application/vnd.github.v3+json", 'Authorization': f'token {self.__token}'}
+
+ def get(self, url, params={}):
+ results = []
+ params = {"per_page": 100, **params}
+ pages = {"next": f"{self.__base}{url}", "last": ""}
+ while len(pages.keys()) > 0 and pages["next"] != pages["last"]:
+ response = requests.get(pages["next"], headers=self.__get_request_header(), params=params)
+ pages = get_response_links(response)
+ result = response.json()
+ if response.status_code != 200:
+ print("!-------- error")
+ print(result)
+ raise Exception(result["message"])
+ if isinstance(result, dict):
+ return result
+ results += result
+ return results
+
+ def post(self, url, body):
+ response = requests.post(f"{self.__base}{url}", headers=self.__get_request_header(), json=body)
+ return response.json()
diff --git a/ee/api/chalicelib/utils/helper.py b/ee/api/chalicelib/utils/helper.py
new file mode 100644
index 000000000..5bb809dd8
--- /dev/null
+++ b/ee/api/chalicelib/utils/helper.py
@@ -0,0 +1,380 @@
+import math
+import random
+import re
+import string
+
+import requests
+
+local_prefix = 'local-'
+from os import environ, path
+
+import json
+
+
+def get_version_number():
+ return environ["version"]
+
+
+def get_stage_name():
+ stage = environ["stage"]
+ return stage[len(local_prefix):] if stage.startswith(local_prefix) else stage
+
+
+def is_production():
+ return get_stage_name() == "production"
+
+
+def is_staging():
+ return get_stage_name() == "staging"
+
+
+def is_onprem():
+ return not is_production() and not is_staging()
+
+
+def is_local():
+ return environ["stage"].startswith(local_prefix)
+
+
+def generate_salt():
+ return "".join(random.choices(string.hexdigits, k=36))
+
+
+def remove_empty_none_values(dictionary):
+ aux = {}
+ for key in dictionary.keys():
+ if dictionary[key] is not None:
+ if isinstance(dictionary[key], dict):
+ aux[key] = remove_empty_none_values(dictionary[key])
+ elif not isinstance(dictionary[key], str) or len(dictionary[key]) > 0:
+ aux[key] = dictionary[key]
+ return aux
+
+
+def unique_ordered_list(array):
+ uniq = []
+ [uniq.append(x) for x in array if x not in uniq]
+ return uniq
+
+
+def unique_unordered_list(array):
+ return list(set(array))
+
+
+def list_to_camel_case(items, flatten=False):
+ for i in range(len(items)):
+ if flatten:
+ items[i] = flatten_nested_dicts(items[i])
+ items[i] = dict_to_camel_case(items[i])
+
+ return items
+
+
+def dict_to_camel_case(variable, delimiter='_', ignore_keys=[]):
+ if variable is None:
+ return None
+ if isinstance(variable, str):
+ return variable
+ elif isinstance(variable, dict):
+ aux = {}
+ for key in variable.keys():
+ if key in ignore_keys:
+ aux[key] = variable[key]
+ elif isinstance(variable[key], dict):
+ aux[key_to_camel_case(key, delimiter)] = dict_to_camel_case(variable[key])
+ elif isinstance(variable[key], list):
+ aux[key_to_camel_case(key, delimiter)] = list_to_camel_case(variable[key])
+ else:
+ aux[key_to_camel_case(key, delimiter)] = variable[key]
+ return aux
+ else:
+ return variable
+
+
+def dict_to_CAPITAL_keys(variable):
+ if variable is None:
+ return None
+ if isinstance(variable, str):
+ return variable.upper()
+ elif isinstance(variable, dict):
+ aux = {}
+ for key in variable.keys():
+ if isinstance(variable[key], dict):
+ aux[key.upper()] = dict_to_CAPITAL_keys(variable[key])
+ else:
+ aux[key.upper()] = variable[key]
+ return aux
+ else:
+ return variable
+
+
+def variable_to_snake_case(variable, delimiter='_', split_number=False):
+ if isinstance(variable, str):
+ return key_to_snake_case(variable, delimiter, split_number)
+ elif isinstance(variable, dict):
+ aux = {}
+ for key in variable.keys():
+ if isinstance(variable[key], dict):
+ aux[key_to_snake_case(key, delimiter, split_number)] = variable_to_snake_case(variable[key], delimiter,
+ split_number)
+ else:
+ aux[key_to_snake_case(key, delimiter, split_number)] = variable[key]
+ return aux
+ else:
+ return variable
+
+
+def key_to_camel_case(snake_str, delimiter='_'):
+ if snake_str.startswith(delimiter):
+ snake_str = snake_str[1:]
+ components = snake_str.split(delimiter)
+ return components[0] + ''.join(x.title() for x in components[1:])
+
+
+def key_to_snake_case(name, delimiter='_', split_number=False):
+ s1 = re.sub('(.)([A-Z][a-z]+)', fr'\1{delimiter}\2', name)
+ return re.sub('([a-z])([A-Z0-9])' if split_number else '([a-z0-9])([A-Z])', fr'\1{delimiter}\2', s1).lower()
+
+
+TRACK_TIME = True
+
+
+def __sbool_to_bool(value):
+ if value is None or not isinstance(value, str):
+ return False
+ return value.lower() in ["true", "yes", "1"]
+
+
+def allow_cron():
+ return "allowCron" not in environ or __sbool_to_bool(environ["allowCron"])
+
+
+def allow_captcha():
+ return environ.get("captcha_server") is not None and environ.get("captcha_key") is not None \
+ and len(environ["captcha_server"]) > 0 and len(environ["captcha_key"]) > 0
+
+
+def allow_sentry():
+ return "sentry" not in environ or __sbool_to_bool(environ["sentry"])
+
+
+def async_post(endpoint, data):
+ data["auth"] = environ["async_Token"]
+ try:
+ requests.post(endpoint, timeout=1, json=data)
+ except requests.exceptions.ReadTimeout:
+ pass
+
+
+def string_to_sql_like(value):
+ value = re.sub(' +', ' ', value)
+ value = value.replace("*", "%")
+ if value.startswith("^"):
+ value = value[1:]
+ elif not value.startswith("%"):
+ value = '%' + value
+
+ if value.endswith("$"):
+ value = value[:-1]
+ elif not value.endswith("%"):
+ value = value + '%'
+ # value = value.replace(" ", "%")
+ return value
+
+
+def string_to_sql_like_with_op(value, op):
+ if isinstance(value, list) and len(value) > 0:
+ _value = value[0]
+ else:
+ _value = value
+ if _value is None:
+ return _value
+ if op.lower() != 'ilike':
+ return _value.replace("%", "%%")
+ _value = _value.replace("*", "%")
+ if _value.startswith("^"):
+ _value = _value[1:]
+ elif not _value.startswith("%"):
+ _value = '%' + _value
+
+ if _value.endswith("$"):
+ _value = _value[:-1]
+ elif not _value.endswith("%"):
+ _value = _value + '%'
+ return _value.replace("%", "%%")
+
+
+def is_valid_email(email):
+ return re.match(r"[^@]+@[^@]+\.[^@]+", email) is not None
+
+
+def is_valid_http_url(url):
+ regex = re.compile(
+ r'^(?:http|ftp)s?://' # http:// or https://
+ r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # domain...
+ r'localhost|' # localhost...
+ r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
+ r'(?::\d+)?' # optional port
+ r'(?:/?|[/?]\S+)$', re.IGNORECASE)
+
+ return re.match(regex, url) is not None
+
+
+def is_valid_url(url):
+ regex = re.compile(
+ # r'^(?:http|ftp)s?://' # http:// or https://
+ r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # domain...
+ r'localhost|' # localhost...
+ r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
+ r'(?::\d+)?' # optional port
+ r'(?:/?|[/?]\S+)$', re.IGNORECASE)
+
+ return re.match(regex, url) is not None
+
+
+def is_alphabet_space(word):
+ r = re.compile("^[a-zA-Z ]*$")
+ return r.match(word) is not None
+
+
+def is_alphabet_latin_space(word):
+ r = re.compile("^[a-zA-Z\u00C0-\u00D6\u00D8-\u00f6\u00f8-\u00ff\s ]*$")
+ return r.match(word) is not None
+
+
+def is_alphabet_space_dash(word):
+ r = re.compile("^[a-zA-Z -]*$")
+ return r.match(word) is not None
+
+
+def is_alphanumeric_space(word):
+ r = re.compile("^[a-zA-Z0-9._\- ]*$")
+ return r.match(word) is not None
+
+
+def merge_lists_by_key(l1, l2, key):
+ merged = {}
+ for item in l1 + l2:
+ if item[key] in merged:
+ merged[item[key]].update(item)
+ else:
+ merged[item[key]] = item
+ return [val for (_, val) in merged.items()]
+
+
+def flatten_nested_dicts(obj):
+ if obj is None:
+ return None
+ result = {}
+ for key in obj.keys():
+ if isinstance(obj[key], dict):
+ result = {**result, **flatten_nested_dicts(obj[key])}
+ else:
+ result[key] = obj[key]
+ return result
+
+
+def delete_keys_from_dict(d, to_delete):
+ if isinstance(to_delete, str):
+ to_delete = [to_delete]
+ if isinstance(d, dict):
+ for single_to_delete in set(to_delete):
+ if single_to_delete in d:
+ del d[single_to_delete]
+ for k, v in d.items():
+ delete_keys_from_dict(v, to_delete)
+ elif isinstance(d, list):
+ for i in d:
+ delete_keys_from_dict(i, to_delete)
+ return d
+
+
+def explode_widget(data, key=None):
+ result = []
+ for k in data.keys():
+ if k.endswith("Progress") or k == "chart":
+ continue
+ result.append({"key": key_to_snake_case(k) if key is None else key, "data": {"value": data[k]}})
+ if k + "Progress" in data:
+ result[-1]["data"]["progress"] = data[k + "Progress"]
+ if "chart" in data:
+ result[-1]["data"]["chart"] = []
+ for c in data["chart"]:
+ result[-1]["data"]["chart"].append({"timestamp": c["timestamp"], "value": c[k]})
+ return result
+
+
+TEMP_PATH = "./" if is_local() else "/tmp/"
+
+
+def get_issue_title(issue_type):
+ return {'click_rage': "Click Rage",
+ 'dead_click': "Dead Click",
+ 'excessive_scrolling': "Excessive Scrolling",
+ 'bad_request': "Bad Request",
+ 'missing_resource': "Missing Image",
+ 'memory': "High Memory Usage",
+ 'cpu': "High CPU",
+ 'slow_resource': "Slow Resource",
+ 'slow_page_load': "Slow Page",
+ 'crash': "Crash",
+ 'ml_cpu': "High CPU",
+ 'ml_memory': "High Memory Usage",
+ 'ml_dead_click': "Dead Click",
+ 'ml_click_rage': "Click Rage",
+ 'ml_mouse_thrashing': "Mouse Thrashing",
+ 'ml_excessive_scrolling': "Excessive Scrolling",
+ 'ml_slow_resources': "Slow Resource",
+ 'custom': "Custom Event",
+ 'js_exception': "Error",
+ 'custom_event_error': "Custom Error",
+ 'js_error': "Error"}.get(issue_type, issue_type)
+
+
+def __progress(old_val, new_val):
+ return ((old_val - new_val) / new_val) * 100 if new_val > 0 else 0 if old_val == 0 else 100
+
+
+def __decimal_limit(value, limit):
+ factor = pow(10, limit)
+ value = math.floor(value * factor)
+ if value % factor == 0:
+ return value // factor
+ return value / factor
+
+
+def is_free_open_source_edition():
+ return __sbool_to_bool(environ.get("isFOS"))
+
+
+def is_enterprise_edition():
+ return __sbool_to_bool(environ.get("isEE"))
+
+
+stag_config_file = f"chalicelib/.configs/{environ['stage']}.json"
+if not path.isfile(stag_config_file):
+ print("!! stage config file not found, using .chalice/config.json only")
+else:
+ print("!! stage config file found, merging with priority to .chalice/config.json")
+ with open(stag_config_file) as json_file:
+ config = json.load(json_file)
+ environ = {**config, **environ}
+
+if (is_free_open_source_edition() or is_enterprise_edition()) and environ.get("config_file"):
+ if not path.isfile(environ.get("config_file")):
+ print("!! config file not found, using default environment")
+ else:
+ with open(environ.get("config_file")) as json_file:
+ config = json.load(json_file)
+ environ = {**environ, **config}
+
+
+def get_internal_project_id(project_id64):
+ if project_id64 < 0x10000000000000 or project_id64 >= 0x20000000000000:
+ return None
+
+ project_id64 = (project_id64 - 0x10000000000000) * 4212451012670231 & 0xfffffffffffff
+ if project_id64 > 0xffffffff:
+ return None
+ project_id = int(project_id64)
+ return project_id
diff --git a/ee/api/chalicelib/utils/html/Project-Weekly-Report.html b/ee/api/chalicelib/utils/html/Project-Weekly-Report.html
new file mode 100644
index 000000000..bb7b7a38e
--- /dev/null
+++ b/ee/api/chalicelib/utils/html/Project-Weekly-Report.html
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %(project_name)s | Weekly Report
+ %(period_start)s - %(period_end)s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 287 Issues Occured This Week
+
+
+
+
+
+
+
+
+
+ %(o_tr_u)s
+
+
+ %(o_tr_d)s
+
+
+
+
+
+
+
+
+ %(past_week_issues_status)s %(past_week_issues_evolution)s%
+
+
+ %(past_month_issues_status)s %(past_month_issues_evolution)s%
+
+
+
+ %(week_decision)s than past 7 days
+
+
+ %(month_decision)s than past 30 days
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Issues by Type
+
+
+
+
+
+
+ %(progress_legend)s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Issues Breakdown
+
+
+
+ %(b_tr_u)s
+
+
+ %(b_tr_d)s
+
+
+
+
+
+
+ Type
+ Sessions
+ Past 7 Days
+ Past 30 Days
+
+
+
+ %(breakdown_list)s
+
+ %(breakdown_list_other)s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ee/api/chalicelib/utils/html/alert_notification.html b/ee/api/chalicelib/utils/html/alert_notification.html
new file mode 100644
index 000000000..36f7a7614
--- /dev/null
+++ b/ee/api/chalicelib/utils/html/alert_notification.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ New alert!
+
+ %(message)s
+
+ See metrics for more details.
+
+
+
+
+
+
+
+
+
+
+
+
+ Sent with ♡ from Asayer © 2021 - All rights reserved.
+ https://asayer.io/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ee/api/chalicelib/utils/html/assignment.html b/ee/api/chalicelib/utils/html/assignment.html
new file mode 100644
index 000000000..a6eacbfbf
--- /dev/null
+++ b/ee/api/chalicelib/utils/html/assignment.html
@@ -0,0 +1,556 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Assigned session
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Replies to this message are undeliverable and will not reach us. Please do not reply.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ee/api/chalicelib/utils/html/img/asayer-logo.png b/ee/api/chalicelib/utils/html/img/asayer-logo.png
new file mode 100644
index 000000000..56b14d369
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/asayer-logo.png differ
diff --git a/ee/api/chalicelib/utils/html/img/header.png b/ee/api/chalicelib/utils/html/img/header.png
new file mode 100644
index 000000000..0108751f4
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/header.png differ
diff --git a/ee/api/chalicelib/utils/html/img/icn-facebook.png b/ee/api/chalicelib/utils/html/img/icn-facebook.png
new file mode 100644
index 000000000..5df55e55f
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/icn-facebook.png differ
diff --git a/ee/api/chalicelib/utils/html/img/icn-linkedin.png b/ee/api/chalicelib/utils/html/img/icn-linkedin.png
new file mode 100644
index 000000000..7de49669c
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/icn-linkedin.png differ
diff --git a/ee/api/chalicelib/utils/html/img/icn-medium.png b/ee/api/chalicelib/utils/html/img/icn-medium.png
new file mode 100644
index 000000000..dfaafcbb2
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/icn-medium.png differ
diff --git a/ee/api/chalicelib/utils/html/img/icn-twitter.png b/ee/api/chalicelib/utils/html/img/icn-twitter.png
new file mode 100644
index 000000000..a74363513
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/icn-twitter.png differ
diff --git a/ee/api/chalicelib/utils/html/img/illustrations/img-no-signal.png b/ee/api/chalicelib/utils/html/img/illustrations/img-no-signal.png
new file mode 100644
index 000000000..9723375d8
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/illustrations/img-no-signal.png differ
diff --git a/ee/api/chalicelib/utils/html/img/illustrations/img-welcome.png b/ee/api/chalicelib/utils/html/img/illustrations/img-welcome.png
new file mode 100644
index 000000000..6239ced39
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/illustrations/img-welcome.png differ
diff --git a/ee/api/chalicelib/utils/html/img/laptop.png b/ee/api/chalicelib/utils/html/img/laptop.png
new file mode 100644
index 000000000..a54d0df7f
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/laptop.png differ
diff --git a/ee/api/chalicelib/utils/html/img/weekly/arrow-decrease.png b/ee/api/chalicelib/utils/html/img/weekly/arrow-decrease.png
new file mode 100644
index 000000000..7264a1eec
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/weekly/arrow-decrease.png differ
diff --git a/ee/api/chalicelib/utils/html/img/weekly/arrow-increase.png b/ee/api/chalicelib/utils/html/img/weekly/arrow-increase.png
new file mode 100644
index 000000000..175d8db5b
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/weekly/arrow-increase.png differ
diff --git a/ee/api/chalicelib/utils/html/img/weekly/asayer-logo.png b/ee/api/chalicelib/utils/html/img/weekly/asayer-logo.png
new file mode 100644
index 000000000..b7440013c
Binary files /dev/null and b/ee/api/chalicelib/utils/html/img/weekly/asayer-logo.png differ
diff --git a/ee/api/chalicelib/utils/html/invitation.html b/ee/api/chalicelib/utils/html/invitation.html
new file mode 100644
index 000000000..9c8c1448f
--- /dev/null
+++ b/ee/api/chalicelib/utils/html/invitation.html
@@ -0,0 +1,595 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Welcome to Asayer!
+
+
+
+
+
+
+
+
+ You have been invited by %(sender)s to join %(clientId)s team on Asayer.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Your login credentials
+
+
+
+
+
+
+
+ Username / Email
+
+ %(userName)s
+
+
+
+
+
+
+
+ Password
+
+ %(password)s
+
+
+
+
+
+
+
+
+
+
+
+ Replies to this message are undeliverable and will not reach us. Please do not reply.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ee/api/chalicelib/utils/html/reset_password.html b/ee/api/chalicelib/utils/html/reset_password.html
new file mode 100644
index 000000000..68bb21e63
--- /dev/null
+++ b/ee/api/chalicelib/utils/html/reset_password.html
@@ -0,0 +1,545 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Password Recovery
+
+
+
+
+
+
+
+
+
+
+
+
+ Use the code below to reset your password (valid for 24 hours only):
+
+
+ %(code)s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ If you no longer wish to make this change or did not initiate this request, plrease ignore this e-mail.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ee/api/chalicelib/utils/jira_client.py b/ee/api/chalicelib/utils/jira_client.py
new file mode 100644
index 000000000..6da501bbe
--- /dev/null
+++ b/ee/api/chalicelib/utils/jira_client.py
@@ -0,0 +1,327 @@
+from jira import JIRA
+from jira.exceptions import JIRAError
+import time
+from datetime import datetime
+import requests
+from requests.auth import HTTPBasicAuth
+
+fields = "id, summary, description, creator, reporter, created, assignee, status, updated, comment, issuetype, labels"
+
+
+class JiraManager:
+ # retries = 5
+ retries = 0
+
+ def __init__(self, url, username, password, project_id=None):
+ self._config = {"JIRA_PROJECT_ID": project_id, "JIRA_URL": url, "JIRA_USERNAME": username,
+ "JIRA_PASSWORD": password}
+ self._jira = JIRA({'server': url}, basic_auth=(username, password), logging=True)
+
+ def set_jira_project_id(self, project_id):
+ self._config["JIRA_PROJECT_ID"] = project_id
+
+ def get_projects(self):
+ try:
+ projects = self._jira.projects()
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_projects()
+ print(f"=>Error {e.text}")
+ raise e
+ projects_dict_list = []
+ for project in projects:
+ projects_dict_list.append(self.__parser_project_info(project))
+
+ return projects_dict_list
+
+ def get_project(self):
+ try:
+ project = self._jira.project(self._config['JIRA_PROJECT_ID'])
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_project()
+ print(f"=>Error {e.text}")
+ raise e
+ return self.__parser_project_info(project)
+
+ def get_issues(self, sql: str, offset: int = 0):
+ jql = "project = " + self._config['JIRA_PROJECT_ID'] \
+ + ((" AND " + sql) if sql is not None and len(sql) > 0 else "") \
+ + " ORDER BY createdDate DESC"
+
+ try:
+ issues = self._jira.search_issues(jql, maxResults=1000, startAt=offset, fields=fields)
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_issues(sql, offset)
+ print(f"=>Error {e.text}")
+ raise e
+
+ issue_dict_list = []
+ for issue in issues:
+ # print(issue.raw)
+ issue_dict_list.append(self.__parser_issue_info(issue, include_comments=False))
+
+ return {"total": issues.total, "issues": issue_dict_list}
+
+ def get_issue(self, issue_id: str):
+ try:
+ # issue = self._jira.issue(issue_id)
+ issue = self._jira.issue(issue_id, fields=fields)
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_issue(issue_id)
+ print(f"=>Error {e.text}")
+ raise e
+ return self.__parser_issue_info(issue)
+
+ def get_issue_v3(self, issue_id: str):
+ try:
+ url = f"{self._config['JIRA_URL']}/rest/api/3/issue/{issue_id}?fields={fields}"
+ auth = HTTPBasicAuth(self._config['JIRA_USERNAME'], self._config['JIRA_PASSWORD'])
+ issue = requests.get(
+ url,
+ headers={
+ "Accept": "application/json"
+ },
+ auth=auth
+ )
+ except Exception as e:
+ self.retries -= 1
+ if self.retries > 0:
+ time.sleep(1)
+ return self.get_issue_v3(issue_id)
+ print(f"=>Error {e}")
+ raise e
+ return self.__parser_issue_info(issue.json())
+
+ def create_issue(self, issue_dict):
+ issue_dict["project"] = {"id": self._config['JIRA_PROJECT_ID']}
+ try:
+ issue = self._jira.create_issue(fields=issue_dict)
+ return self.__parser_issue_info(issue)
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.create_issue(issue_dict)
+ print(f"=>Error {e.text}")
+ raise e
+
+ def close_issue(self, issue):
+ try:
+ # jira.transition_issue(issue, '5', assignee={'name': 'pm_user'}, resolution={'id': '3'})
+ self._jira.transition_issue(issue, 'Close')
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.close_issue(issue)
+ print(f"=>Error {e.text}")
+ raise e
+
+ def assign_issue(self, issue_id, account_id) -> bool:
+ try:
+ return self._jira.assign_issue(issue_id, account_id)
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.assign_issue(issue_id, account_id)
+ print(f"=>Error {e.text}")
+ raise e
+
+ def add_comment(self, issue_id: str, comment: str):
+ try:
+ comment = self._jira.add_comment(issue_id, comment)
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.add_comment(issue_id, comment)
+ print(f"=>Error {e.text}")
+ raise e
+ return self.__parser_comment_info(comment)
+
+ def add_comment_v3(self, issue_id: str, comment: str):
+ try:
+ url = f"{self._config['JIRA_URL']}/rest/api/3/issue/{issue_id}/comment"
+ auth = HTTPBasicAuth(self._config['JIRA_USERNAME'], self._config['JIRA_PASSWORD'])
+ comment_response = requests.post(
+ url,
+ headers={
+ "Accept": "application/json"
+ },
+ auth=auth,
+ json={
+ "body": {
+ "type": "doc",
+ "version": 1,
+ "content": [
+ {
+ "type": "paragraph",
+ "content": [
+ {
+ "text": comment,
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ )
+ except Exception as e:
+ self.retries -= 1
+ if self.retries > 0:
+ time.sleep(1)
+ return self.add_comment_v3(issue_id, comment)
+ print(f"=>Error {e}")
+ raise e
+ return self.__parser_comment_info(comment_response.json())
+
+ def get_comments(self, issueKey):
+ try:
+ comments = self._jira.comments(issueKey)
+ results = []
+ for c in comments:
+ results.append(self.__parser_comment_info(c.raw))
+ return results
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_comments(issueKey)
+ print(f"=>Error {e.text}")
+ raise e
+
+ def get_meta(self):
+ meta = {}
+ meta['issueTypes'] = self.get_issue_types()
+ meta['users'] = self.get_assignable_users()
+ return meta
+
+ def get_assignable_users(self):
+ try:
+ users = self._jira.search_assignable_users_for_issues('', project=self._config['JIRA_PROJECT_ID'])
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_assignable_users()
+ print(f"=>Error {e.text}")
+ raise e
+ users_dict = []
+ for user in users:
+ users_dict.append({
+ 'name': user.displayName,
+ 'email': user.emailAddress,
+ 'id': user.accountId,
+ 'avatarUrls': user.raw["avatarUrls"]
+ })
+
+ return users_dict
+
+ def get_issue_types(self):
+ try:
+ types = self._jira.issue_types()
+ except JIRAError as e:
+ self.retries -= 1
+ if (e.status_code // 100) == 4 and self.retries > 0:
+ time.sleep(1)
+ return self.get_issue_types()
+ print(f"=>Error {e.text}")
+ raise e
+ types_dict = []
+ for type in types:
+ if not type.subtask and not type.name.lower() == "epic":
+ types_dict.append({
+ 'id': type.id,
+ 'name': type.name,
+ 'iconUrl': type.iconUrl,
+ 'description': type.description
+ })
+ return types_dict
+
+ def __parser_comment_info(self, comment):
+ if not isinstance(comment, dict):
+ comment = comment.raw
+
+ pattern = '%Y-%m-%dT%H:%M:%S.%f%z'
+ creation = datetime.strptime(comment['created'], pattern)
+ # update = datetime.strptime(comment['updated'], pattern)
+
+ return {
+ 'id': comment['id'],
+ 'author': comment['author']['accountId'],
+ 'message': comment['body'],
+ # 'created': comment['created'],
+ 'createdAt': int((creation - creation.utcoffset()).timestamp() * 1000),
+ # 'updated': comment['updated'],
+ # 'updatedAt': int((update - update.utcoffset()).timestamp() * 1000)
+ }
+
+ @staticmethod
+ def __get_closed_status(status):
+ return status.lower() == "done" or status.lower() == "close" or status.lower() == "closed" or status.lower() == "finish" or status.lower() == "finished"
+
+ def __parser_issue_info(self, issue, include_comments=True):
+ results_dict = {}
+ if not isinstance(issue, dict):
+ raw_info = issue.raw
+ else:
+ raw_info = issue
+
+ fields = raw_info['fields']
+ results_dict["id"] = raw_info["id"]
+ results_dict["key"] = raw_info["key"]
+ # results_dict["ticketNumber"] = raw_info["key"]
+ results_dict["title"] = fields["summary"]
+ results_dict["description"] = fields["description"]
+ results_dict["issueType"] = [fields["issuetype"]["id"]]
+
+ # results_dict["assignee"] = None
+ # results_dict["reporter"] = None
+
+ if isinstance(fields["assignee"], dict):
+ results_dict["assignees"] = [fields["assignee"]["accountId"]]
+ # if isinstance(fields["reporter"], dict):
+ # results_dict["reporter"] = fields["reporter"]["accountId"]
+ if isinstance(fields["creator"], dict):
+ results_dict["creator"] = fields["creator"]["accountId"]
+
+ if "comment" in fields:
+ if include_comments:
+ comments_dict = []
+ for comment in fields["comment"]["comments"]:
+ comments_dict.append(self.__parser_comment_info(comment))
+
+ results_dict['comments'] = comments_dict
+ results_dict['commentsCount'] = fields["comment"]["total"]
+
+ results_dict["status"] = fields["status"]['name']
+ results_dict["createdAt"] = fields["created"]
+ # results_dict["updated"] = fields["updated"]
+ results_dict["labels"] = fields["labels"]
+ results_dict["closed"] = self.__get_closed_status(fields["status"]['name'])
+
+ return results_dict
+
+ @staticmethod
+ def __parser_project_info(project):
+ results_dict = {}
+ raw_info = project.raw
+ results_dict["id"] = raw_info["id"]
+ results_dict["name"] = raw_info["name"]
+ results_dict["avatarUrls"] = raw_info["avatarUrls"]
+ results_dict["description"] = raw_info["description"] if "description" in raw_info else ""
+
+ return results_dict
diff --git a/ee/api/chalicelib/utils/metrics_helper.py b/ee/api/chalicelib/utils/metrics_helper.py
new file mode 100644
index 000000000..e0cde1201
--- /dev/null
+++ b/ee/api/chalicelib/utils/metrics_helper.py
@@ -0,0 +1,5 @@
+def __get_step_size(startTimestamp, endTimestamp, density, decimal=False, factor=1000):
+ step_size = (endTimestamp // factor - startTimestamp // factor)
+ if decimal:
+ return step_size / density
+ return step_size // (density - 1)
diff --git a/ee/api/chalicelib/utils/pg_client.py b/ee/api/chalicelib/utils/pg_client.py
new file mode 100644
index 000000000..e95527d64
--- /dev/null
+++ b/ee/api/chalicelib/utils/pg_client.py
@@ -0,0 +1,55 @@
+import psycopg2
+import psycopg2.extras
+from chalicelib.utils.helper import environ
+
+PG_CONFIG = {"host": environ["pg_host"],
+ "database": environ["pg_dbname"],
+ "user": environ["pg_user"],
+ "password": environ["pg_password"],
+ "port": int(environ["pg_port"])}
+
+# connexion pool for FOS & EE
+
+from psycopg2 import pool
+
+try:
+ postgreSQL_pool = psycopg2.pool.ThreadedConnectionPool(6, 20, **PG_CONFIG)
+ if (postgreSQL_pool):
+ print("Connection pool created successfully")
+except (Exception, psycopg2.DatabaseError) as error:
+ print("Error while connecting to PostgreSQL", error)
+ raise error
+
+
+# finally:
+# # closing database connection.
+# # use closeall method to close all the active connection if you want to turn of the application
+# if (postgreSQL_pool):
+# postgreSQL_pool.closeall
+# print("PostgreSQL connection pool is closed")
+
+class PostgresClient:
+ connection = None
+ cursor = None
+
+ def __init__(self):
+ self.connection = postgreSQL_pool.getconn()
+
+ def __enter__(self):
+ if self.cursor is None:
+ self.cursor = self.connection.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
+ return self.cursor
+
+ def __exit__(self, *args):
+ try:
+ self.connection.commit()
+ self.cursor.close()
+ except:
+ print("Error while committing/closing PG-connection", error)
+ raise error
+ finally:
+ postgreSQL_pool.putconn(self.connection)
+
+
+def close():
+ pass
diff --git a/ee/api/chalicelib/utils/s3.py b/ee/api/chalicelib/utils/s3.py
new file mode 100644
index 000000000..544827001
--- /dev/null
+++ b/ee/api/chalicelib/utils/s3.py
@@ -0,0 +1,57 @@
+from botocore.exceptions import ClientError
+
+import boto3
+
+client = boto3.client('s3')
+sts_client = boto3.client('sts')
+
+
+def exists(bucket, key):
+ response = client.list_objects_v2(
+ Bucket=bucket,
+ Prefix=key,
+ )
+ for obj in response.get('Contents', []):
+ if obj['Key'] == key:
+ return True
+ return False
+
+
+def get_presigned_url_for_sharing(bucket, expires_in, key, check_exists=False):
+ if check_exists and not exists(bucket, key):
+ return None
+
+ return client.generate_presigned_url(
+ 'get_object',
+ Params={
+ 'Bucket': bucket,
+ 'Key': key
+ },
+ ExpiresIn=expires_in
+ )
+
+
+def get_presigned_url_for_upload(bucket, expires_in, key):
+ return client.generate_presigned_url(
+ 'put_object',
+ Params={
+ 'Bucket': bucket,
+ 'Key': key
+ },
+ ExpiresIn=expires_in
+ )
+
+
+def get_file(source_bucket, source_key):
+ try:
+ result = client.get_object(
+ Bucket=source_bucket,
+ Key=source_key
+ )
+ except ClientError as ex:
+ if ex.response['Error']['Code'] == 'NoSuchKey':
+ print(f'======> No object found - returning None for {source_bucket}/{source_key}')
+ return None
+ else:
+ raise ex
+ return result["Body"].read().decode()
diff --git a/ee/api/chalicelib/utils/s3urls.py b/ee/api/chalicelib/utils/s3urls.py
new file mode 100644
index 000000000..bc0b39bea
--- /dev/null
+++ b/ee/api/chalicelib/utils/s3urls.py
@@ -0,0 +1,120 @@
+import re
+from urllib.parse import urlparse
+
+
+def style(url):
+ """ Determine 'style' of a given S3 url
+
+ >>> style("s3://my-bucket/my-key/")
+ 's3'
+
+ >>> style("s3://user@my-bucket/my-key/")
+ 's3-credential'
+
+ >>> style("https://my-bucket.s3.amazonaws.com/my-key/")
+ 'bucket-in-netloc'
+
+ >>> style("https://s3.amazonaws.com/my-bucket/my-key/")
+ 'bucket-in-path'
+ """
+ o = urlparse(url)
+ if o.scheme == 's3':
+ if '@' in o.netloc:
+ return 's3-credential'
+ else:
+ return 's3'
+
+ if re.search(r'^s3[.-](\w{2}-\w{4,9}-\d\.)?amazonaws\.com', o.netloc):
+ return 'bucket-in-path'
+
+ if re.search(r'\.s3[.-](\w{2}-\w{4,9}-\d\.)?amazonaws\.com', o.netloc):
+ return 'bucket-in-netloc'
+
+ raise ValueError(f'Unknown url style: {url}')
+
+
+def build_url(url_type, bucket, key=None, region=None, credential_name=None):
+ """ Construct an S3 URL
+
+ Args:
+ url_type: one of 's3', 's3-credential', 'bucket-in-path', 'bucket-in-netloc'
+ bucket: S3 bucket name
+ key: Key within bucket (optional)
+ region: S3 region name (optional)
+ credential_name: user/credential name to use in S3 scheme url (optional)
+
+ Returns
+ (string) S3 URL
+ """
+ if url_type == 's3':
+ credential = f'{credential_name}@' if credential_name else ""
+ return f's3://{credential}{bucket}/{key or ""}'
+
+ if url_type == 'bucket-in-path':
+ return f'https://s3{"-" if region else ""}{region or ""}.amazonaws.com/{bucket}/{key}'
+
+ if url_type == 'bucket-in-netloc':
+ return f'https://{bucket}.s3.amazonaws.com/{key}'
+
+ raise ValueError(f'Invalid url_type: {url_type}')
+
+
+def parse_s3_credential_url(url):
+ """ Parse S3 scheme url containing a user/credential name
+
+ >>> parse_s3_url("s3://user@my-bucket/my-key")
+ {'bucket': 'my-bucket', 'key': 'my-key/', 'credential_name': 'user'}
+ """
+ o = urlparse(url)
+ cred_name, bucket = o.netloc.split('@')
+ key = o.path if o.path[0] != '/' else o.path[1:]
+ return {'bucket': bucket, 'key': key, 'credential_name': cred_name}
+
+
+def parse_s3_url(url):
+ """ Parse S3 scheme url
+
+ >>> parse_s3_url("s3://my-bucket/my-key")
+ {'bucket': 'my-bucket', 'key': 'my-key/'}
+ """
+ o = urlparse(url)
+ bucket = o.netloc
+ key = o.path if o.path[0] != '/' else o.path[1:]
+ return {'bucket': bucket, 'key': key}
+
+
+def parse_bucket_in_path_url(url):
+ """ Parse url with bucket name path
+
+ >>> parse_bucket_in_path_url("https://s3-eu-west-1.amazonaws.com/my-bucket/my-key/")
+ {'bucket': 'my-bucket', 'key': 'my-key/'}
+ """
+ path = urlparse(url).path
+ bucket = path.split('/')[1]
+ key = '/'.join(path.split('/')[2:])
+ return {'bucket': bucket, 'key': key}
+
+
+def parse_bucket_in_netloc_url(url):
+ """ Parse url with bucket name in host/netloc
+
+ >>> parse_bucket_in_netloc_url("https://my-bucket.s3.amazonaws.com/my-key/")
+ {'bucket': 'my-bucket', 'key': 'my-key/'}
+ """
+ o = urlparse(url)
+ bucket = o.netloc.split('.')[0]
+ key = o.path if o.path[0] != '/' else o.path[1:]
+ return {'bucket': bucket, 'key': key}
+
+
+def parse_url(url):
+ url_style = style(url)
+
+ if url_style == 's3-credential':
+ return parse_s3_credential_url(url)
+ if url_style == 's3':
+ return parse_s3_url(url)
+ if url_style == 'bucket-in-path':
+ return parse_bucket_in_path_url(url)
+ if url_style == 'bucket-in-netloc':
+ return parse_bucket_in_netloc_url(url)
diff --git a/ee/api/chalicelib/utils/smtp.py b/ee/api/chalicelib/utils/smtp.py
new file mode 100644
index 000000000..90c95693b
--- /dev/null
+++ b/ee/api/chalicelib/utils/smtp.py
@@ -0,0 +1,39 @@
+import smtplib
+from chalicelib.utils.helper import environ
+
+
+class EmptySMTP:
+ def sendmail(self, from_addr, to_addrs, msg, mail_options=(), rcpt_options=()):
+ print("!! CANNOT SEND EMAIL, NO VALID SMTP CONFIGURATION FOUND")
+
+
+class SMTPClient:
+ server = None
+
+ def __init__(self):
+ if environ["EMAIL_HOST"] is None or len(environ["EMAIL_HOST"]) == 0:
+ return
+ elif environ["EMAIL_USE_SSL"].lower() == "false":
+ self.server = smtplib.SMTP(host=environ["EMAIL_HOST"], port=int(environ["EMAIL_PORT"]))
+ else:
+ if len(environ["EMAIL_SSL_KEY"]) == 0 or len(environ["EMAIL_SSL_CERT"]) == 0:
+ self.server = smtplib.SMTP_SSL(host=environ["EMAIL_HOST"], port=int(environ["EMAIL_PORT"]))
+ else:
+ self.server = smtplib.SMTP_SSL(host=environ["EMAIL_HOST"], port=int(environ["EMAIL_PORT"]),
+ keyfile=environ["EMAIL_SSL_KEY"], certfile=environ["EMAIL_SSL_CERT"])
+
+ def __enter__(self):
+ if self.server is None:
+ return EmptySMTP()
+ self.server.ehlo()
+ if environ["EMAIL_USE_SSL"].lower() == "false" and environ["EMAIL_USE_TLS"].lower() == "true":
+ self.server.starttls()
+ # stmplib docs recommend calling ehlo() before & after starttls()
+ self.server.ehlo()
+ self.server.login(user=environ["EMAIL_USER"], password=environ["EMAIL_PASSWORD"])
+ return self.server
+
+ def __exit__(self, *args):
+ if self.server is None:
+ return
+ self.server.quit()
diff --git a/ee/api/chalicelib/utils/strings.py b/ee/api/chalicelib/utils/strings.py
new file mode 100644
index 000000000..8b07bb373
--- /dev/null
+++ b/ee/api/chalicelib/utils/strings.py
@@ -0,0 +1,45 @@
+import string
+
+jsonb = "'::jsonb,'"
+dash = '", "'
+dash_nl = ',\n'
+dash_key = ")s, %("
+
+
+def __filter(s, chars, l):
+ s = filter(lambda c: c in chars, s)
+ s = "".join(s)
+ if len(s) == 0:
+ return None
+ return s[0:l]
+
+
+__keyword_chars = string.ascii_lowercase + string.ascii_uppercase + string.digits + "_"
+
+
+def keyword(s):
+ if not isinstance(s, str):
+ return None
+ s = s.strip().replace(" ", "_")
+ return __filter(s, __keyword_chars, 30)
+
+
+__pattern_chars = string.ascii_lowercase + string.ascii_uppercase + string.digits + "_-/*."
+
+
+def pattern(s):
+ if not isinstance(s, str):
+ return None
+ return __filter(s, __pattern_chars, 1000)
+
+
+def join(*args):
+ return '\x00'.join(args)
+
+
+def split(s):
+ return s.split('\x00')
+
+
+def hexed(n):
+ return hex(n)[2:]
diff --git a/ee/api/requirements.txt b/ee/api/requirements.txt
new file mode 100644
index 000000000..3944c0923
--- /dev/null
+++ b/ee/api/requirements.txt
@@ -0,0 +1,15 @@
+requests==2.24.0
+urllib3==1.25.11
+boto3==1.16.1
+pyjwt==1.7.1
+psycopg2-binary==2.8.6
+pytz==2020.1
+sentry-sdk==0.19.1
+rollbar==0.15.1
+bugsnag==4.0.1
+kubernetes==12.0.0
+elasticsearch==7.9.1
+jira==2.0.0
+schedule==1.1.0
+croniter==1.0.12
+clickhouse-driver==0.1.5
\ No newline at end of file
diff --git a/ee/api/sourcemaps_reader/.gitignore b/ee/api/sourcemaps_reader/.gitignore
new file mode 100644
index 000000000..f642462b1
--- /dev/null
+++ b/ee/api/sourcemaps_reader/.gitignore
@@ -0,0 +1,11 @@
+# package directories
+node_modules
+jspm_packages
+
+# Serverless directories
+.serverless/*.zip
+
+
+node_modules/
+.idea
+test.js
\ No newline at end of file
diff --git a/ee/api/sourcemaps_reader/README.md b/ee/api/sourcemaps_reader/README.md
new file mode 100644
index 000000000..d543da338
--- /dev/null
+++ b/ee/api/sourcemaps_reader/README.md
@@ -0,0 +1,15 @@
+# sourcemap-reader
+Source Map Reader
+
+# For SAAS:
+to run local; put your test values in handler then run `node handler.js`
+to deploy `sls deploy --stage [staging|prod|dev]`
+
+# Requirements:
+- nodeJS 12 or greater
+
+# Install for OS:
+```
+npm install
+node server.js
+```
\ No newline at end of file
diff --git a/ee/api/sourcemaps_reader/package-lock.json b/ee/api/sourcemaps_reader/package-lock.json
new file mode 100644
index 000000000..719a55bb3
--- /dev/null
+++ b/ee/api/sourcemaps_reader/package-lock.json
@@ -0,0 +1,109 @@
+{
+ "name": "sourcemap-reader",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "aws-sdk": {
+ "version": "2.654.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.654.0.tgz",
+ "integrity": "sha512-RAx/SJ74zAqBW1wyRxiHNflmrv50i35pu8kPxfMIJ418TJzIMt+LKgn55rTJgyUdUzKi+MC9XMY4n7IDtwj3HA==",
+ "requires": {
+ "buffer": "4.9.1",
+ "events": "1.1.1",
+ "ieee754": "1.1.13",
+ "jmespath": "0.15.0",
+ "querystring": "0.2.0",
+ "sax": "1.2.1",
+ "url": "0.10.3",
+ "uuid": "3.3.2",
+ "xml2js": "0.4.19"
+ },
+ "dependencies": {
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
+ },
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ },
+ "url": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
+ "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+ },
+ "ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "jmespath": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
+ "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc="
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "sax": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
+ "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o="
+ },
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
+ },
+ "xml2js": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~9.0.1"
+ }
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
+ }
+ }
+}
diff --git a/ee/api/sourcemaps_reader/package.json b/ee/api/sourcemaps_reader/package.json
new file mode 100644
index 000000000..ed169326e
--- /dev/null
+++ b/ee/api/sourcemaps_reader/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "sourcemap-reader",
+ "version": "1.0.0",
+ "description": "",
+ "main": "handler.js",
+ "dependencies": {
+ "aws-sdk": "^2.654.0",
+ "source-map": "^0.7.3"
+ },
+ "devDependencies": {},
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "Kraiem taha yassine
",
+ "license": "ISC"
+}
diff --git a/frontend/app/Router.js b/frontend/app/Router.js
index 3bdfc3c8f..b2024c7d4 100644
--- a/frontend/app/Router.js
+++ b/frontend/app/Router.js
@@ -22,6 +22,7 @@ import FunnelIssueDetails from 'Components/Funnels/FunnelIssueDetails';
import APIClient from './api_client';
import * as routes from './routes';
import Signup from './components/Signup/Signup';
+import { fetchTenants } from 'Duck/user';
const BugFinder = withSiteIdUpdater(BugFinderPure);
const Dashboard = withSiteIdUpdater(DashboardPure);
@@ -65,9 +66,10 @@ const ONBOARDING_PATH = routes.onboarding();
account: state.getIn([ 'user', 'account' ]),
organisation: state.getIn([ 'user', 'client', 'name' ]),
tenantId: state.getIn([ 'user', 'client', 'tenantId' ]),
+ tenants: state.getIn(['user', 'tenants']),
};
}, {
- fetchUserInfo,
+ fetchUserInfo, fetchTenants
})
class Router extends React.Component {
constructor(props) {
@@ -76,6 +78,7 @@ class Router extends React.Component {
Promise.all([props.fetchUserInfo()])
.then(() => this.onLoginLogout());
}
+ props.fetchTenants();
}
componentDidUpdate(prevProps) {
@@ -89,7 +92,7 @@ class Router extends React.Component {
}
render() {
- const { isLoggedIn, jwt, siteId, sites, loading, changePassword, location } = this.props;
+ const { isLoggedIn, jwt, siteId, sites, loading, changePassword, location, tenants } = this.props;
const siteIdList = sites.map(({ id }) => id).toJS();
const hideHeader = location.pathname && location.pathname.includes('/session/');
@@ -138,7 +141,7 @@ class Router extends React.Component {
-
+ { tenants.length === 0 && }
;
}
diff --git a/frontend/app/components/Client/Integrations/BugsnagForm/BugsnagForm.js b/frontend/app/components/Client/Integrations/BugsnagForm/BugsnagForm.js
index fc3dc1c72..e73f19bcd 100644
--- a/frontend/app/components/Client/Integrations/BugsnagForm/BugsnagForm.js
+++ b/frontend/app/components/Client/Integrations/BugsnagForm/BugsnagForm.js
@@ -1,22 +1,29 @@
import { tokenRE } from 'Types/integrations/bugsnagConfig';
import IntegrationForm from '../IntegrationForm';
import ProjectListDropdown from './ProjectListDropdown';
+import DocLink from 'Shared/DocLink/DocLink';
const BugsnagForm = (props) => (
- tokenRE.test(config.authorizationToken),
- component: ProjectListDropdown,
- }
- ]}
- />
+ <>
+
+
How to integrate Bugsnag with OpenReplay and see backend errors alongside session recordings.
+
+
+ tokenRE.test(config.authorizationToken),
+ component: ProjectListDropdown,
+ }
+ ]}
+ />
+ >
);
BugsnagForm.displayName = "BugsnagForm";
diff --git a/frontend/app/components/Client/Integrations/CloudwatchForm/CloudwatchForm.js b/frontend/app/components/Client/Integrations/CloudwatchForm/CloudwatchForm.js
index df7fbd1ce..e29e343f9 100644
--- a/frontend/app/components/Client/Integrations/CloudwatchForm/CloudwatchForm.js
+++ b/frontend/app/components/Client/Integrations/CloudwatchForm/CloudwatchForm.js
@@ -2,12 +2,13 @@ import { ACCESS_KEY_ID_LENGTH, SECRET_ACCESS_KEY_LENGTH } from 'Types/integratio
import IntegrationForm from '../IntegrationForm';
import LogGroupDropdown from './LogGroupDropdown';
import RegionDropdown from './RegionDropdown';
+import DocLink from 'Shared/DocLink/DocLink';
const CloudwatchForm = (props) => (
<>
How to integrate CloudWatch with OpenReplay and see backend errors alongside session replays.
-
+
(
<>
How to integrate Datadog with OpenReplay and see backend errors alongside session recordings.
-
+
({
config: state.getIn([ 'elasticsearch', 'instance' ])
@@ -43,7 +44,7 @@ export default class ElasticsearchForm extends React.PureComponent {
<>
How to integrate Elasticsearch with OpenReplay and see backend errors alongside session recordings.
-
+
{
return (
@@ -55,7 +56,7 @@ fetch('https://api.openreplay.com/').then(response => console.log(response.json(
}
/>
- See
API for more options.
+
)
};
diff --git a/frontend/app/components/Client/Integrations/GithubForm.js b/frontend/app/components/Client/Integrations/GithubForm.js
index f9daeebe4..32bc42ceb 100644
--- a/frontend/app/components/Client/Integrations/GithubForm.js
+++ b/frontend/app/components/Client/Integrations/GithubForm.js
@@ -1,11 +1,12 @@
import IntegrationForm from './IntegrationForm';
+import DocLink from 'Shared/DocLink/DocLink';
const GithubForm = (props) => (
<>
Integrate GitHub with OpenReplay and create issues directly from the recording page.
{
return (
@@ -52,7 +53,7 @@ export const recordGraphQL = tracker.use(trackerGraphQL());`}
}
/>
- See
API for more options.
+
)
};
diff --git a/frontend/app/components/Client/Integrations/Integrations.js b/frontend/app/components/Client/Integrations/Integrations.js
index c148d7f31..d90587e5f 100644
--- a/frontend/app/components/Client/Integrations/Integrations.js
+++ b/frontend/app/components/Client/Integrations/Integrations.js
@@ -289,7 +289,7 @@ export default class Integrations extends React.PureComponent {
this.showIntegrationConfig(FETCH) }
@@ -298,7 +298,7 @@ export default class Integrations extends React.PureComponent {
this.showIntegrationConfig(MOBX) }
@@ -307,7 +307,7 @@ export default class Integrations extends React.PureComponent {
this.showIntegrationConfig(PROFILER) }
diff --git a/frontend/app/components/Client/Integrations/JiraForm/JiraForm.js b/frontend/app/components/Client/Integrations/JiraForm/JiraForm.js
index 278f89890..867ebbcd1 100644
--- a/frontend/app/components/Client/Integrations/JiraForm/JiraForm.js
+++ b/frontend/app/components/Client/Integrations/JiraForm/JiraForm.js
@@ -1,25 +1,34 @@
import IntegrationForm from '../IntegrationForm';
+import DocLink from 'Shared/DocLink/DocLink';
const JiraForm = (props) => (
-
+ <>
+
+
How to integrate Jira Cloud with OpenReplay.
+
+
+
+
+
+ >
);
JiraForm.displayName = "JiraForm";
diff --git a/frontend/app/components/Client/Integrations/MobxDoc/MobxDoc.js b/frontend/app/components/Client/Integrations/MobxDoc/MobxDoc.js
index f8ab34fa0..7c4b3233b 100644
--- a/frontend/app/components/Client/Integrations/MobxDoc/MobxDoc.js
+++ b/frontend/app/components/Client/Integrations/MobxDoc/MobxDoc.js
@@ -1,5 +1,6 @@
import Highlight from 'react-highlight'
-import ToggleContent from '../../../shared/ToggleContent'
+import ToggleContent from 'Shared/ToggleContent'
+import DocLink from 'Shared/DocLink/DocLink';
const MobxDoc = (props) => {
return (
@@ -49,7 +50,7 @@ function SomeFunctionalComponent() {
}
/>
- See
API for more options.
+
)
};
diff --git a/frontend/app/components/Client/Integrations/NewrelicForm/NewrelicForm.js b/frontend/app/components/Client/Integrations/NewrelicForm/NewrelicForm.js
index 769a17551..0e7b0bed6 100644
--- a/frontend/app/components/Client/Integrations/NewrelicForm/NewrelicForm.js
+++ b/frontend/app/components/Client/Integrations/NewrelicForm/NewrelicForm.js
@@ -1,10 +1,11 @@
import IntegrationForm from '../IntegrationForm';
+import DocLink from 'Shared/DocLink/DocLink';
const NewrelicForm = (props) => (
<>
How to integrate NewRelic with OpenReplay and see backend errors alongside session recordings.
-
+
{
return (
@@ -65,7 +66,7 @@ const metaReducers = [tracker.use(trackerNgRx())]; // check list of ava
}
/>
- See
API for more options.
+
)
};
diff --git a/frontend/app/components/Client/Integrations/ProfilerDoc/ProfilerDoc.js b/frontend/app/components/Client/Integrations/ProfilerDoc/ProfilerDoc.js
index 4a3e4a3d9..e61f968b9 100644
--- a/frontend/app/components/Client/Integrations/ProfilerDoc/ProfilerDoc.js
+++ b/frontend/app/components/Client/Integrations/ProfilerDoc/ProfilerDoc.js
@@ -1,5 +1,6 @@
import Highlight from 'react-highlight'
-import ToggleContent from '../../../shared/ToggleContent'
+import ToggleContent from 'Shared/ToggleContent'
+import DocLink from 'Shared/DocLink/DocLink';
const ProfilerDoc = (props) => {
return (
@@ -59,7 +60,7 @@ const fn = profiler('call_name')(() => {
}
/>
-
See
API for more options.
+
)
};
diff --git a/frontend/app/components/Client/Integrations/ReduxDoc/ReduxDoc.js b/frontend/app/components/Client/Integrations/ReduxDoc/ReduxDoc.js
index a88fb4103..acc083a97 100644
--- a/frontend/app/components/Client/Integrations/ReduxDoc/ReduxDoc.js
+++ b/frontend/app/components/Client/Integrations/ReduxDoc/ReduxDoc.js
@@ -1,5 +1,6 @@
import Highlight from 'react-highlight'
import ToggleContent from '../../../shared/ToggleContent';
+import DocLink from 'Shared/DocLink/DocLink';
const ReduxDoc = (props) => {
return (
@@ -58,7 +59,7 @@ const store = createStore(
}
/>
-
See
API for more options.
+
)
};
diff --git a/frontend/app/components/Client/Integrations/RollbarForm.js b/frontend/app/components/Client/Integrations/RollbarForm.js
index 87a2033e4..04ccc8b2b 100644
--- a/frontend/app/components/Client/Integrations/RollbarForm.js
+++ b/frontend/app/components/Client/Integrations/RollbarForm.js
@@ -1,10 +1,11 @@
import IntegrationForm from './IntegrationForm';
+import DocLink from 'Shared/DocLink/DocLink';
const RollbarForm = (props) => (
<>
How to integrate Rollbar with OpenReplay and see backend errors alongside session replays.
-
+
(
<>
How to integrate Sentry with OpenReplay and see backend errors alongside session recordings.
-
+
(
<>
How to integrate Stackdriver with OpenReplay and see backend errors alongside session recordings.
-
+
(
<>
How to integrate SumoLogic with OpenReplay and see backend errors alongside session recordings.
-
+
{
return (
@@ -59,7 +60,7 @@ const store = new Vuex.Store({
}
/>
- See
API for more options.
+
)
};
diff --git a/frontend/app/components/Client/ProfileSettings/OptOut.js b/frontend/app/components/Client/ProfileSettings/OptOut.js
index 88180e5c3..dea675a60 100644
--- a/frontend/app/components/Client/ProfileSettings/OptOut.js
+++ b/frontend/app/components/Client/ProfileSettings/OptOut.js
@@ -17,7 +17,7 @@ function OptOut(props) {
checked={ optOut }
onClick={ onChange }
className="mr-8"
- label="Enable/Disable"
+ label="Anonymize"
/>
)
diff --git a/frontend/app/components/Client/ProfileSettings/ProfileSettings.js b/frontend/app/components/Client/ProfileSettings/ProfileSettings.js
index 5298914bd..ac04d53fe 100644
--- a/frontend/app/components/Client/ProfileSettings/ProfileSettings.js
+++ b/frontend/app/components/Client/ProfileSettings/ProfileSettings.js
@@ -31,16 +31,6 @@ export default class ProfileSettings extends React.PureComponent {
-
-
-
{ 'Opt out' }
- {/*
{ 'Your API key gives you access to an extra set of services.' }
*/}
-
-
-
-
-
-
{ 'Organization API Key' }
@@ -53,8 +43,8 @@ export default class ProfileSettings extends React.PureComponent {
-
{ 'Opt Out' }
- {/*
{ 'Your API key gives you access to an extra set of services.' }
*/}
+
{ 'Data Collection' }
+
{ 'Enables you to control how OpenReplay captures data on your organization’s usage to improve our product.' }
diff --git a/frontend/app/components/Errors/Error/DistributionBar.js b/frontend/app/components/Errors/Error/DistributionBar.js
index 8e3c168b2..413d38ecb 100644
--- a/frontend/app/components/Errors/Error/DistributionBar.js
+++ b/frontend/app/components/Errors/Error/DistributionBar.js
@@ -1,5 +1,5 @@
import cn from 'classnames';
-import { Popup } from 'UI';
+import { Popup, TextEllipsis } from 'UI';
import { Styles } from '../../Dashboard/Widgets/common';
import cls from './distributionBar.css';
import { colorScale } from 'App/utils';
@@ -15,11 +15,15 @@ function DistributionBar({ className, title, partitions }) {
return (
-
{ title }
-
- { partitions[0].label }
- { `${ Math.round(partitions[0].prc) }% ` }
-
+
{ title }
+
+
+
+
+
{ `${ Math.round(partitions[0].prc) }% ` }
+
{ partitions.map((p, index) =>
diff --git a/frontend/app/components/Header/Header.js b/frontend/app/components/Header/Header.js
index 6e7a6601f..a133c42d7 100644
--- a/frontend/app/components/Header/Header.js
+++ b/frontend/app/components/Header/Header.js
@@ -24,7 +24,6 @@ import { init as initSite, fetchList as fetchSiteList } from 'Duck/site';
import ErrorGenPanel from 'App/dev/components';
import ErrorsBadge from 'Shared/ErrorsBadge';
import Alerts from '../Alerts/Alerts';
-import EmailVerificationMessage from '../shared/EmailVerificationMessage/EmailVerificationMessage';
const DASHBOARD_PATH = dashboard();
const SESSIONS_PATH = sessions();
@@ -99,11 +98,10 @@ const Header = (props) => {
to={ withSiteId(DASHBOARD_PATH, siteId) }
className={ styles.nav }
activeClassName={ styles.active }
- >
+ >
{ 'Metrics' }
- { !account.verifiedEmail &&
}
diff --git a/frontend/app/components/Login/Login.js b/frontend/app/components/Login/Login.js
index 81bc8109a..80cc6d12f 100644
--- a/frontend/app/components/Login/Login.js
+++ b/frontend/app/components/Login/Login.js
@@ -15,6 +15,7 @@ const recaptchaRef = React.createRef();
state => ({
errors: state.getIn([ 'user', 'loginRequest', 'errors' ]),
loading: state.getIn([ 'user', 'loginRequest', 'loading' ]),
+ tenants: state.getIn(['user', 'tenants'])
}),
{ login, },
)
@@ -44,7 +45,7 @@ export default class Login extends React.Component {
write = ({ target: { value, name } }) => this.setState({ [ name ]: value })
render() {
- const { errors, loading } = this.props;
+ const { errors, loading, tenants } = this.props;
return (
@@ -62,7 +63,7 @@ export default class Login extends React.Component {
-
-
-
- {/* Done. See Recoded Sessions */}
diff --git a/frontend/app/components/Onboarding/components/IdentifyUsersTab/IdentifyUsersTab.js b/frontend/app/components/Onboarding/components/IdentifyUsersTab/IdentifyUsersTab.js
index 2e6fd2ad6..bee33974b 100644
--- a/frontend/app/components/Onboarding/components/IdentifyUsersTab/IdentifyUsersTab.js
+++ b/frontend/app/components/Onboarding/components/IdentifyUsersTab/IdentifyUsersTab.js
@@ -1,8 +1,7 @@
import React from 'react'
import CircleNumber from '../CircleNumber'
import MetadataList from '../MetadataList/MetadataList'
-import Snippet from '../Snippet/Snippet'
-import Highlight from 'react-highlight'
+import { HighlightCode } from 'UI'
export default function IdentifyUsersTab() {
return (
@@ -17,10 +16,7 @@ export default function IdentifyUsersTab() {
Call userID to identify your users when recording a session. The identity of the user can be changed, but OpenReplay will only keep the last communicated user ID.
-
- {`tracker.userID('john@doe.com');`}
-
- {/*
*/}
+
@@ -37,19 +33,15 @@ export default function IdentifyUsersTab() {
-
Inject metadata when recording sessions
Use the metadata method in your code to inject custom user data in the form of a key/value pair (string).
-
- {`tracker.metadata('plan', 'premium');`}
-
+
- {/*
*/}
diff --git a/frontend/app/components/Onboarding/components/OnboardingTabs/InstallDocs/InstallDocs.js b/frontend/app/components/Onboarding/components/OnboardingTabs/InstallDocs/InstallDocs.js
index 4072b2018..09e5fd4c9 100644
--- a/frontend/app/components/Onboarding/components/OnboardingTabs/InstallDocs/InstallDocs.js
+++ b/frontend/app/components/Onboarding/components/OnboardingTabs/InstallDocs/InstallDocs.js
@@ -2,10 +2,9 @@ import React, { useState } from 'react'
import { connect } from 'react-redux'
import stl from './installDocs.css'
import cn from 'classnames'
-import CopyButton from '../CopyButton'
import Highlight from 'react-highlight'
import CircleNumber from '../../CircleNumber'
-import { Slider } from 'UI'
+import { Slider, CopyButton } from 'UI'
const installationCommand = 'npm i @openreplay/tracker --save'
const usageCode = `import Tracker from '@openreplay/tracker';
@@ -88,7 +87,7 @@ function InstallDocs({ site }) {
-
+
)
}
diff --git a/frontend/app/components/Onboarding/components/SideMenu.js b/frontend/app/components/Onboarding/components/SideMenu.js
index e828fd856..893fb75b7 100644
--- a/frontend/app/components/Onboarding/components/SideMenu.js
+++ b/frontend/app/components/Onboarding/components/SideMenu.js
@@ -24,24 +24,15 @@ export default function SideMenu() {
window.open('https://docs.openreplay.com/api', '_blank')}
+ onClick={() => window.open('https://docs.openreplay.com', '_blank')}
/>
window.open('https://github.com/openreplay/openreplay/issues/new', '_blank')}
- />
-
- $crisp.push(['do', 'chat:open']) }
+ onClick={() => window.open('https://github.com/openreplay/openreplay/issues', '_blank')}
/>
)
diff --git a/frontend/app/components/Session_/Player/Controls/Timeline.js b/frontend/app/components/Session_/Player/Controls/Timeline.js
index aeab1af64..4114929c9 100644
--- a/frontend/app/components/Session_/Player/Controls/Timeline.js
+++ b/frontend/app/components/Session_/Player/Controls/Timeline.js
@@ -112,6 +112,7 @@ export default class Timeline extends React.PureComponent {
style={ {
left: `${ interval.start * scale }%`,
width: `${ (interval.end - interval.start) * scale }%`,
+ top: '-30px'
} }
/>))
}
@@ -120,7 +121,7 @@ export default class Timeline extends React.PureComponent {
))
}
diff --git a/frontend/app/components/Signup/Signup.js b/frontend/app/components/Signup/Signup.js
index 0d3862853..7979c5f57 100644
--- a/frontend/app/components/Signup/Signup.js
+++ b/frontend/app/components/Signup/Signup.js
@@ -38,31 +38,6 @@ export default class Signup extends React.Component {
-
-
-
Want to self-host?
-
-
-
-
-
-
-
Private Cloud
-
Managed deployments, maximum scalability
-
-
-
-
-
-
-
-
-
-
Open source
-
Deploy on your own infrastructure. Free forever.
-
-
-
diff --git a/frontend/app/components/Signup/SignupForm/SignupForm.js b/frontend/app/components/Signup/SignupForm/SignupForm.js
index b49750016..2bfd480bc 100644
--- a/frontend/app/components/Signup/SignupForm/SignupForm.js
+++ b/frontend/app/components/Signup/SignupForm/SignupForm.js
@@ -1,13 +1,11 @@
-import React, { useState } from 'react'
-import { Icon, Loader, Button, Link, Dropdown, CircularLoader } from 'UI'
-import { forgotPassword, login } from 'App/routes'
+import React from 'react'
+import { Icon, Button, Link, Dropdown, CircularLoader } from 'UI'
+import { login } from 'App/routes'
import ReCAPTCHA from 'react-google-recaptcha'
import stl from './signup.css'
-import cn from 'classnames'
-import { signup, fetchTenants } from 'Duck/user';
+import { signup } from 'Duck/user';
import { connect } from 'react-redux'
-const FORGOT_PASSWORD = forgotPassword()
const LOGIN_ROUTE = login()
const recaptchaRef = React.createRef()
@@ -17,7 +15,7 @@ const recaptchaRef = React.createRef()
errors: state.getIn([ 'user', 'signupRequest', 'errors' ]),
loading: state.getIn([ 'user', 'signupRequest', 'loading' ]),
}),
- { signup, fetchTenants },
+ { signup },
)
export default class SignupForm extends React.Component {
@@ -30,10 +28,6 @@ export default class SignupForm extends React.Component {
organizationName: '',
};
- componentDidMount() {
- this.props.fetchTenants();
- }
-
handleSubmit = (token) => {
const { tenantId, fullname, password, email, projectName, organizationName, auth } = this.state;
this.props.signup({ tenantId, fullname, password, email, projectName, organizationName, auth, 'g-recaptcha-response': token })
@@ -165,17 +159,8 @@ export default class SignupForm extends React.Component {
'Signup'
}
-
- {/*
- {'Back to Login'}
-
*/}
)
}
-}
-
-// export default connect(state => ({
-// errors: state.getIn([ 'user', 'signupRequest', 'errors' ]),
-// loading: state.getIn([ 'user', 'signupRequest', 'loading' ]),
-// }), { signup })(SignupForm)
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/frontend/app/components/shared/Crisp/Crisp.js b/frontend/app/components/shared/Crisp/Crisp.js
deleted file mode 100644
index fc7b61bfb..000000000
--- a/frontend/app/components/shared/Crisp/Crisp.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-
-class Crisp extends React.Component {
- componentDidMount () {
- if (!!window.$crisp) {
- window.$crisp.push(['do', 'chat:show']);
- } else {
- window.$crisp = [];
- window.CRISP_WEBSITE_ID = "adc74d6f-70c5-4947-bdf1-c359f3becfaf";
-
- (function() {
- var d = document;
- var s = d.createElement("script");
-
- s.src = "https://client.crisp.chat/l.js";
- s.async = 1;
- d.getElementById("crisp-chat").appendChild(s);
- })();
- }
- }
-
- componentWillUnmount() {
- window.$crisp.push(['do', 'chat:hide']);
- }
-
- render () {
- return null;
- }
-}
-
-export default Crisp;
\ No newline at end of file
diff --git a/frontend/app/components/shared/Crisp/index.js b/frontend/app/components/shared/Crisp/index.js
deleted file mode 100644
index caf3f17a9..000000000
--- a/frontend/app/components/shared/Crisp/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './Crisp'
\ No newline at end of file
diff --git a/frontend/app/components/shared/DocLink/DocLink.js b/frontend/app/components/shared/DocLink/DocLink.js
index 052d648a1..d750fe192 100644
--- a/frontend/app/components/shared/DocLink/DocLink.js
+++ b/frontend/app/components/shared/DocLink/DocLink.js
@@ -1,13 +1,13 @@
import React from 'react'
import { Button } from 'UI'
-export default function DocLink({ link, label }) {
+export default function DocLink({ className = '', url, label }) {
const openLink = () => {
- window.open(link, '_blank')
+ window.open(url, '_blank')
}
return (
-
+
{ label }
diff --git a/frontend/app/components/shared/TrackingCodeModal/InstallDocs/InstallDocs.js b/frontend/app/components/shared/TrackingCodeModal/InstallDocs/InstallDocs.js
index 6e1bb78f3..cfedaed07 100644
--- a/frontend/app/components/shared/TrackingCodeModal/InstallDocs/InstallDocs.js
+++ b/frontend/app/components/shared/TrackingCodeModal/InstallDocs/InstallDocs.js
@@ -2,7 +2,7 @@ import React from 'react'
import { Controlled as CodeMirror } from 'react-codemirror2'
import stl from './installDocs.css'
import cn from 'classnames'
-import CopyButton from '../CopyButton';
+import { CopyButton } from 'UI';
const installationCommand = 'npm i @openreplay/tracker --save'
const usageCode = `import Tracker from '@openreplay/tracker';
diff --git a/frontend/app/components/ui/CopyButton/CopyButton.js b/frontend/app/components/ui/CopyButton/CopyButton.js
new file mode 100644
index 000000000..d080b1a02
--- /dev/null
+++ b/frontend/app/components/ui/CopyButton/CopyButton.js
@@ -0,0 +1,25 @@
+import React from 'react'
+import { useState } from 'react';
+import copy from 'copy-to-clipboard';
+
+function CopyButton({ content, className }) {
+ const [copied, setCopied] = useState(false)
+
+ const copyHandler = () => {
+ setCopied(true);
+ copy(content);
+ setTimeout(() => {
+ setCopied(false);
+ }, 1000);
+ };
+ return (
+
+ { copied ? 'copied' : 'copy' }
+
+ )
+}
+
+export default CopyButton
diff --git a/frontend/app/components/ui/CopyButton/index.js b/frontend/app/components/ui/CopyButton/index.js
new file mode 100644
index 000000000..a230b4ecc
--- /dev/null
+++ b/frontend/app/components/ui/CopyButton/index.js
@@ -0,0 +1 @@
+export { default } from './CopyButton'
\ No newline at end of file
diff --git a/frontend/app/components/ui/HighlightCode/HighlightCode.js b/frontend/app/components/ui/HighlightCode/HighlightCode.js
new file mode 100644
index 000000000..d9f837b88
--- /dev/null
+++ b/frontend/app/components/ui/HighlightCode/HighlightCode.js
@@ -0,0 +1,18 @@
+import React from 'react'
+import Highlight from 'react-highlight'
+import stl from './highlightCode.css'
+import cn from 'classnames'
+import { CopyButton } from 'UI'
+
+function HighlightCode({ className = 'js', text = ''}) {
+ return (
+
+
+
+ {text}
+
+
+ )
+}
+
+export default HighlightCode
diff --git a/frontend/app/components/ui/HighlightCode/highlightCode.css b/frontend/app/components/ui/HighlightCode/highlightCode.css
new file mode 100644
index 000000000..448b08f72
--- /dev/null
+++ b/frontend/app/components/ui/HighlightCode/highlightCode.css
@@ -0,0 +1,29 @@
+@import 'zindex.css';
+
+.snippetWrapper {
+ position: relative;
+ & .codeCopy {
+ position: absolute;
+ right: 0px;
+ top: -3px;
+ z-index: $codeSnippet;
+ padding: 5px 10px;
+ color: $teal;
+ text-transform: uppercase;
+ cursor: pointer;
+ border-radius: 3px;
+ transition: all 0.4s;
+ user-select: none;
+
+ &:hover {
+ background-color: $gray-light;
+ transition: all 0.2s;
+ }
+ }
+ & .snippet {
+ overflow: hidden;
+ line-height: 20px;
+ border-radius: 5px;
+ user-select: none;
+ }
+}
\ No newline at end of file
diff --git a/frontend/app/components/ui/HighlightCode/index.js b/frontend/app/components/ui/HighlightCode/index.js
new file mode 100644
index 000000000..7f7481148
--- /dev/null
+++ b/frontend/app/components/ui/HighlightCode/index.js
@@ -0,0 +1 @@
+export { default } from './HighlightCode'
\ No newline at end of file
diff --git a/frontend/app/components/ui/index.js b/frontend/app/components/ui/index.js
index c64e5082d..fe9609f16 100644
--- a/frontend/app/components/ui/index.js
+++ b/frontend/app/components/ui/index.js
@@ -50,5 +50,7 @@ export { default as TextLink } from './TextLink';
export { default as Information } from './Information';
export { default as QuestionMarkHint } from './QuestionMarkHint';
export { default as TimelinePointer } from './TimelinePointer';
+export { default as CopyButton } from './CopyButton';
+export { default as HighlightCode } from './HighlightCode';
export { Input, Modal, Form, Message, Card } from 'semantic-ui-react';
diff --git a/frontend/app/duck/user.js b/frontend/app/duck/user.js
index 83430e72d..f7ed2b1a2 100644
--- a/frontend/app/duck/user.js
+++ b/frontend/app/duck/user.js
@@ -87,7 +87,7 @@ export default withRequestState({
updatePasswordRequest: UPDATE_PASSWORD,
requestResetPassowrd: REQUEST_RESET_PASSWORD,
resetPassword: RESET_PASSWORD,
- fetchUserInfoRequest: [ FETCH_ACCOUNT, FETCH_CLIENT ],
+ fetchUserInfoRequest: [ FETCH_ACCOUNT, FETCH_CLIENT, FETCH_TENANTS ],
putClientRequest: PUT_CLIENT,
updateAccountRequest: UPDATE_ACCOUNT,
updateAppearance: UPDATE_APPEARANCE,
diff --git a/frontend/app/svg/icons/integrations/mobx.svg b/frontend/app/svg/icons/integrations/mobx.svg
new file mode 100644
index 000000000..2747797bd
--- /dev/null
+++ b/frontend/app/svg/icons/integrations/mobx.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/app/svg/icons/integrations/openreplay.svg b/frontend/app/svg/icons/integrations/openreplay.svg
index 77fb302b9..667be8f22 100644
--- a/frontend/app/svg/icons/integrations/openreplay.svg
+++ b/frontend/app/svg/icons/integrations/openreplay.svg
@@ -1,5 +1,5 @@
-
+
Group
diff --git a/frontend/logfile b/frontend/logfile
deleted file mode 100644
index 3851af727..000000000
--- a/frontend/logfile
+++ /dev/null
@@ -1,3819 +0,0 @@
-2021-01-23 12:42:45.336 IST [37761] LOG: starting PostgreSQL 13.1 on x86_64-apple-darwin20.1.0, compiled by Apple clang version 12.0.0 (clang-1200.0.32.27), 64-bit
-2021-01-23 12:42:45.337 IST [37761] LOG: listening on IPv4 address "127.0.0.1", port 5432
-2021-01-23 12:42:45.337 IST [37761] LOG: listening on IPv6 address "::1", port 5432
-2021-01-23 12:42:45.338 IST [37761] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
-2021-01-23 12:42:45.352 IST [37762] LOG: database system was interrupted; last known up at 2021-01-21 08:13:03 IST
-2021-01-23 12:42:45.507 IST [37762] LOG: database system was not properly shut down; automatic recovery in progress
-2021-01-23 12:42:45.513 IST [37762] LOG: redo starts at 0/3316BC8
-2021-01-23 12:42:45.513 IST [37762] LOG: invalid record length at 0/3316CB0: wanted 24, got 0
-2021-01-23 12:42:45.513 IST [37762] LOG: redo done at 0/3316C78
-2021-01-23 12:42:45.522 IST [37761] LOG: database system is ready to accept connections
-2021-01-23 14:38:53.706 IST [40210] ERROR: bind message supplies 0 parameters, but prepared statement "pdo_stmt_00000003" requires 1
-2021-01-23 14:38:53.706 IST [40210] STATEMENT: select * from "tenants" where "code" = $1 limit 1
-2021-01-23 14:39:00.422 IST [40215] ERROR: bind message supplies 0 parameters, but prepared statement "pdo_stmt_00000003" requires 1
-2021-01-23 14:39:00.422 IST [40215] STATEMENT: select * from "tenants" where "code" = $1 limit 1
-2021-01-23 16:08:04.745 IST [45258] ERROR: relation "sections" does not exist at character 15
-2021-01-23 16:08:04.745 IST [45258] STATEMENT: select * from "sections" where "id" = $1 limit 1
-2021-01-23 16:08:09.391 IST [45262] ERROR: relation "sections" does not exist at character 15
-2021-01-23 16:08:09.391 IST [45262] STATEMENT: select * from "sections" where "id" = $1 limit 1
-2021-01-23 16:09:22.542 IST [45295] ERROR: relation "sections" does not exist at character 15
-2021-01-23 16:09:22.542 IST [45295] STATEMENT: select * from "sections" where "id" = $1 limit 1
-2021-01-24 01:17:39.683 IST [50859] FATAL: role "postgres" does not exist
-2021-01-24 01:36:57.415 IST [67292] ERROR: missing FROM-clause entry for table "sections" at character 31
-2021-01-24 01:36:57.415 IST [67292] STATEMENT: select * from "classes" where "sections"."class_id" = "classes"."id" and "academic_year_id" = $1 limit 1
-2021-01-24 01:41:44.028 IST [56873] ERROR: column "academic_year_id" does not exist at character 451
-2021-01-24 01:41:44.028 IST [56873] STATEMENT: select * from "users" where (name ILIKE '%af%' or exists (select * from "students" where "users"."id" = "students"."user_id" and "aadhar_number"::text LIKE $1) or exists (select * from "students" where "users"."id" = "students"."user_id" and "admission_number"::text LIKE $2) and exists (select * from "students" where "users"."id" = "students"."user_id" and exists (select * from "enrolments" where "students"."user_id" = "enrolments"."user_id" and "academic_year_id" = $3))) and "users"."deleted_at" is null limit 5
-2021-01-24 01:43:44.869 IST [66608] ERROR: missing FROM-clause entry for table "student" at character 281
-2021-01-24 01:43:44.869 IST [66608] STATEMENT: select * from "users" where (name ILIKE '%af%' or exists (select * from "students" where "users"."id" = "students"."user_id" and "aadhar_number"::text LIKE $1) or exists (select * from "students" where "users"."id" = "students"."user_id" and "admission_number"::text LIKE $2) and "student"."enrolment" = (select * where "has" = $3)) and "users"."deleted_at" is null limit 5
-2021-01-24 14:36:15.553 IST [61561] ERROR: update or delete on table "payments" violates foreign key constraint "late_fees_payment_id_foreign" on table "late_fees"
-2021-01-24 14:36:15.553 IST [61561] DETAIL: Key (id)=(14) is still referenced from table "late_fees".
-2021-01-24 14:36:15.553 IST [61561] STATEMENT: DELETE FROM "tnt_cf809103-d949-4562-896e-bcef7c73e8d7"."payments" WHERE "id" = '14' OR "id" = '15' OR "id" = '16' OR "id" = '17' OR "id" = '18' OR "id" = '19' OR "id" = '20' OR "id" = '21' OR "id" = '22' OR "id" = '23' OR "id" = '24' OR "id" = '25' OR "id" = '26' OR "id" = '27' OR "id" = '28' OR "id" = '29' OR "id" = '30' OR "id" = '31' OR "id" = '32' OR "id" = '33' OR "id" = '34';
-2021-01-24 14:52:27.013 IST [54028] ERROR: relation "tnt_c05488f1-1124-4d7f-81ef-3c7e9fb5b6d2.academic_years" does not exist at character 13
-2021-01-24 14:52:27.013 IST [54028] STATEMENT: INSERT INTO "tnt_c05488f1-1124-4d7f-81ef-3c7e9fb5b6d2".academic_years (id, title, start_at, end_at, is_active, created_at, updated_at) VALUES ( $1, $2, $3, $4, $5, $6, $7)
-2021-01-24 16:13:57.532 IST [79798] ERROR: column "academic_year_ids" does not exist at character 712
-2021-01-24 16:13:57.532 IST [79798] HINT: Perhaps you meant to reference the column "classes.academic_year_id".
-2021-01-24 16:13:57.532 IST [79798] STATEMENT: select * from "enrolments" where exists (select * from "users" where "enrolments"."user_id" = "users"."id" and "name"::text LIKE $1 and "users"."deleted_at" is null) or exists (select * from "users" where "enrolments"."user_id" = "users"."id" and "aadhar_number"::text LIKE $2 and "users"."deleted_at" is null) or exists (select * from "users" where "enrolments"."user_id" = "users"."id" and exists (select * from "students" where "users"."id" = "students"."user_id" and "admission_number"::text LIKE $3) and "users"."deleted_at" is null) and exists (select * from "sections" where "enrolments"."section_id" = "sections"."id" and exists (select * from "classes" where "sections"."class_id" = "classes"."id" and "academic_year_ids" = $4)) limit 5
-2021-01-24 16:16:00.358 IST [61561] ERROR: syntax error at or near "%" at character 716
-2021-01-24 16:16:00.358 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- select
- *
- from
- "enrolments"
- where
- exists (
- select
- *
- from
- "users"
- where
- "enrolments"."user_id" = "users"."id"
- and "name" :: text LIKE % maya %
- and "users"."deleted_at" is null
- )
- or exists (
- select
- *
- from
- "users"
- where
- "enrolments"."user_id" = "users"."id"
- and "aadhar_number" :: text LIKE % maya %
- and "users"."deleted_at" is null
- )
- or exists (
- select
- *
- from
- "users"
- where
- "enrolments"."user_id" = "users"."id"
- and exists (
- select
- *
- from
- "students"
- where
- "users"."id" = "students"."user_id"
- and "admission_number" :: text LIKE % maya %
- )
- and "users"."deleted_at" is null
- )
- and exists (
- select
- *
- from
- "sections"
- where
- "enrolments"."section_id" = "sections"."id"
- and exists (
- select
- *
- from
- "classes"
- where
- "sections"."class_id" = "classes"."id"
- and "academic_year_id" = 21
- )
- )
- limit
- 5
- )
-2021-01-24 16:16:34.283 IST [61561] ERROR: syntax error at or near ")" at character 1647
-2021-01-24 16:16:34.283 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- select
- *
- from
- "enrolments"
- where
- exists (
- select
- *
- from
- "users"
- where
- "enrolments"."user_id" = "users"."id"
- and "name" :: text LIKE '%maya%'
- and "users"."deleted_at" is null
- )
- or exists (
- select
- *
- from
- "users"
- where
- "enrolments"."user_id" = "users"."id"
- and "aadhar_number" :: text LIKE '%maya%'
- and "users"."deleted_at" is null
- )
- or exists (
- select
- *
- from
- "users"
- where
- "enrolments"."user_id" = "users"."id"
- and exists (
- select
- *
- from
- "students"
- where
- "users"."id" = "students"."user_id"
- and "admission_number" :: text LIKE '%maya%'
- )
- and "users"."deleted_at" is null
- )
- and exists (
- select
- *
- from
- "sections"
- where
- "enrolments"."section_id" = "sections"."id"
- and exists (
- select
- *
- from
- "classes"
- where
- "sections"."class_id" = "classes"."id"
- and "academic_year_id" = 21
- )
- )
- limit
- 5
- )
-2021-01-24 16:16:45.440 IST [61561] ERROR: relation "enrolments" does not exist at character 560
-2021-01-24 16:16:45.440 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- select
- *
- from
- "enrolments"
- where
- exists (
- select
- *
- from
- "users"
- where
- "enrolments"."user_id" = "users"."id"
- and "name" :: text LIKE '%maya%'
- and "users"."deleted_at" is null
- )
- or exists (
- select
- *
- from
- "users"
- where
- "enrolments"."user_id" = "users"."id"
- and "aadhar_number" :: text LIKE '%maya%'
- and "users"."deleted_at" is null
- )
- or exists (
- select
- *
- from
- "users"
- where
- "enrolments"."user_id" = "users"."id"
- and exists (
- select
- *
- from
- "students"
- where
- "users"."id" = "students"."user_id"
- and "admission_number" :: text LIKE '%maya%'
- )
- and "users"."deleted_at" is null
- )
- and exists (
- select
- *
- from
- "sections"
- where
- "enrolments"."section_id" = "sections"."id"
- and exists (
- select
- *
- from
- "classes"
- where
- "sections"."class_id" = "classes"."id"
- and "academic_year_id" = 21
- )
- )
- limit
- 5
-2021-01-24 16:17:32.152 IST [61561] ERROR: relation "students" does not exist at character 1320
-2021-01-24 16:17:32.152 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- select
- *
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- where
- exists (
- select
- *
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- where
- "enrolments"."user_id" = "users"."id"
- and "name" :: text LIKE '%maya%'
- and "users"."deleted_at" is null
- )
- or exists (
- select
- *
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- where
- "enrolments"."user_id" = "users"."id"
- and "aadhar_number" :: text LIKE '%maya%'
- and "users"."deleted_at" is null
- )
- or exists (
- select
- *
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- where
- "enrolments"."user_id" = "users"."id"
- and exists (
- select
- *
- from
- "students"
- where
- "users"."id" = "students"."user_id"
- and "admission_number" :: text LIKE '%maya%'
- )
- and "users"."deleted_at" is null
- )
- and exists (
- select
- *
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- where
- "enrolments"."section_id" = "sections"."id"
- and exists (
- select
- *
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- where
- "sections"."class_id" = "classes"."id"
- and "academic_year_id" = 21
- )
- )
- limit
- 5
-2021-01-24 16:21:47.191 IST [61561] ERROR: table name "s" specified more than once
-2021-01-24 16:21:47.191 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
-
- select
- *
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students s on s.user_id = u.id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- where
- c.academic_year_id = 21
- and u.name like '%maya%'
- or s.admission_number like '%maya%'
- or u.aadhar_number like '%maya%'
-2021-01-24 17:11:18.471 IST [41136] ERROR: missing FROM-clause entry for table "section_id, enrolments" at character 8
-2021-01-24 17:11:18.471 IST [41136] STATEMENT: select "enrolments"."section_id, enrolments"."id" from "enrolments" inner join "users" on "users"."id" = "enrolments"."user_id" inner join "students" on "students"."user_id" = "users"."id" inner join "sections" on "sections"."id" = "enrolments"."section_id" inner join "classes" on "classes"."id" = "sections"."class_id" where "classes"."academic_year_id" = $1 and "users"."name"::text LIKE $2 or "users"."aadhar_number"::text LIKE $3 or "students"."admission_number"::text LIKE $4 limit 5
-2021-01-24 17:32:01.504 IST [53198] ERROR: column students.admission does not exist at character 166
-2021-01-24 17:32:01.504 IST [53198] STATEMENT: select "enrolments"."id", "enrolments"."section_id", "users"."name", "sections"."name" as "section_name", "classes"."name" as "class_name", "users"."aadhar_number", "students"."admission" from "enrolments" inner join "users" on "users"."id" = "enrolments"."user_id" inner join "students" on "students"."user_id" = "users"."id" inner join "sections" on "sections"."id" = "enrolments"."section_id" inner join "classes" on "classes"."id" = "sections"."class_id" where "classes"."academic_year_id" = $1 and "users"."name"::text LIKE $2 or "users"."aadhar_number"::text LIKE $3 or "students"."admission_number"::text LIKE $4 limit 5
-2021-01-24 17:42:19.170 IST [15965] ERROR: invalid input syntax for type bigint: "undefined"
-2021-01-24 17:42:19.170 IST [15965] STATEMENT: select * from "enrolments" where "enrolments"."id" = $1 limit 1
-2021-01-24 17:42:19.170 IST [15967] ERROR: invalid input syntax for type bigint: "undefined"
-2021-01-24 17:42:19.170 IST [15967] STATEMENT: select * from "enrolments" where "enrolments"."id" = $1 limit 1
-2021-01-24 17:42:33.397 IST [34326] ERROR: invalid input syntax for type bigint: "undefined"
-2021-01-24 17:42:33.397 IST [34326] STATEMENT: select * from "enrolments" where "enrolments"."id" = $1 limit 1
-2021-01-24 17:42:33.397 IST [34328] ERROR: invalid input syntax for type bigint: "undefined"
-2021-01-24 17:42:33.397 IST [34328] STATEMENT: select * from "enrolments" where "enrolments"."id" = $1 limit 1
-2021-01-24 17:42:49.746 IST [55543] ERROR: invalid input syntax for type bigint: "undefined"
-2021-01-24 17:42:49.746 IST [55543] STATEMENT: select * from "enrolments" where "enrolments"."id" = $1 limit 1
-2021-01-24 17:42:49.746 IST [55544] ERROR: invalid input syntax for type bigint: "undefined"
-2021-01-24 17:42:49.746 IST [55544] STATEMENT: select * from "enrolments" where "enrolments"."id" = $1 limit 1
-2021-01-24 18:05:18.709 IST [36131] ERROR: column sections.standard_id does not exist at character 87
-2021-01-24 18:05:18.709 IST [36131] STATEMENT: select count(*) as aggregate from "sections" inner join "classes" on "classes"."id" = "sections"."standard_id" where "classes"."academic_year_id" = $1
-2021-01-24 18:06:14.567 IST [276] ERROR: column sections.standard_id does not exist at character 87
-2021-01-24 18:06:14.567 IST [276] STATEMENT: select count(*) as aggregate from "sections" inner join "classes" on "classes"."id" = "sections"."standard_id" where "classes"."class_id" = $1
-2021-01-24 19:17:35.056 IST [61561] ERROR: syntax error at or near ""tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"" at character 10
-2021-01-24 19:17:35.056 IST [61561] STATEMENT: select * "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- where c.academic_year_id = 21
-2021-01-24 19:18:40.073 IST [61561] ERROR: syntax error at or near "select" at character 3383
-2021-01-24 19:18:40.073 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- OTHER
- -------------------------------------------
- select amount_paid (
- select
- sum(amount_paid)
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- where
- c.academic_year_id = 21
- )
-2021-01-24 19:18:47.493 IST [61561] ERROR: syntax error at or near "select" at character 3383
-2021-01-24 19:18:47.493 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- OTHER
- -------------------------------------------
- select amount_paid (
- select
- sum(amount_paid) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- where
- c.academic_year_id = 21
- )
-2021-01-24 19:18:57.121 IST [61561] ERROR: syntax error at or near "select" at character 3383
-2021-01-24 19:18:57.121 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- OTHER
- -------------------------------------------
- select amount_paid (
- select
- sum(amount_paid) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- where
- c.academic_year_id = 21
- ) t
-2021-01-24 19:19:01.024 IST [61561] ERROR: syntax error at or near "select" at character 3385
-2021-01-24 19:19:01.024 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- OTHER
- -------------------------------------------
- select t.amount_paid (
- select
- sum(amount_paid) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- where
- c.academic_year_id = 21
- ) t
-2021-01-24 19:19:33.948 IST [61561] ERROR: syntax error at or near "(" at character 3371
-2021-01-24 19:19:33.948 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- OTHER
- -------------------------------------------
- select * (
- select
- sum(amount_paid) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- where
- c.academic_year_id = 21
- ) t
-2021-01-24 19:19:44.475 IST [61561] ERROR: column "amount_paid" does not exist at character 3376
-2021-01-24 19:19:44.475 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- OTHER
- -------------------------------------------
-
- select
- sum(amount_paid) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- where
- c.academic_year_id = 21
-
-2021-01-24 19:19:49.689 IST [61561] ERROR: column p.amount_paid does not exist at character 3376
-2021-01-24 19:19:49.689 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- OTHER
- -------------------------------------------
-
- select
- sum(p.amount_paid) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- where
- c.academic_year_id = 21
-
-2021-01-24 19:19:55.495 IST [61561] ERROR: column p.amount does not exist at character 3376
-2021-01-24 19:19:55.495 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- OTHER
- -------------------------------------------
-
- select
- sum(p.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- where
- c.academic_year_id = 21
-
-2021-01-24 19:20:43.122 IST [61561] ERROR: column p.amount does not exist at character 3376
-2021-01-24 19:20:43.122 IST [61561] HINT: Perhaps you meant to reference the column "pi.amount".
-2021-01-24 19:20:43.122 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- OTHER
- -------------------------------------------
-
- select
- sum(p.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- c.academic_year_id = 21
-
-2021-01-24 19:21:15.388 IST [61561] ERROR: syntax error at or near "(" at character 3372
-2021-01-24 19:21:15.388 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- OTHER
- -------------------------------------------
-
- select * (
- select
- sum(pi.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- c.academic_year_id = 21
- ) t
-
-2021-01-24 19:21:16.736 IST [61561] ERROR: syntax error at or near "(" at character 3372
-2021-01-24 19:21:16.736 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- OTHER
- -------------------------------------------
-
- select * (
- select
- sum(pi.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- c.academic_year_id = 21
- ) t
-
-2021-01-24 19:26:28.793 IST [61561] ERROR: date/time field value out of range: "24-01-2021" at character 3877
-2021-01-24 19:26:28.793 IST [61561] HINT: Perhaps you need a different "datestyle" setting.
-2021-01-24 19:26:28.793 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- select
- sum(pi.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- c.created_at BETWEEN '01-06-2020' and '24-01-2021'
- and c.academic_year_id = 21;
-2021-01-24 19:31:46.134 IST [61561] ERROR: column fa.section_id does not exist at character 4320
-2021-01-24 19:31:46.134 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- -- select
- -- sum(pi.amount) as amount_paid
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- -- where
- -- p.created_at BETWEEN '2019-06-01'
- -- and '2021-01-24'
- -- and c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
-
- SELECT
- *
- FROM
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".fee_assignments fa
- JOIN "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s ON s.id = fa.feeable_id
- AND fa.feeable_type = 'section'
- WHERE fa.academic_year_id = 21
- group by fa.section_id
-2021-01-24 19:31:57.880 IST [61561] ERROR: column "fa.id" must appear in the GROUP BY clause or be used in an aggregate function at character 4092
-2021-01-24 19:31:57.880 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- -- select
- -- sum(pi.amount) as amount_paid
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- -- where
- -- p.created_at BETWEEN '2019-06-01'
- -- and '2021-01-24'
- -- and c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
-
- SELECT
- *
- FROM
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".fee_assignments fa
- JOIN "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s ON s.id = fa.feeable_id
- AND fa.feeable_type = 'section'
- WHERE fa.academic_year_id = 21
- group by s.id
-2021-01-24 19:32:08.697 IST [61561] ERROR: missing FROM-clause entry for table "sa" at character 4096
-2021-01-24 19:32:08.697 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- -- select
- -- sum(pi.amount) as amount_paid
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- -- where
- -- p.created_at BETWEEN '2019-06-01'
- -- and '2021-01-24'
- -- and c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
-
- SELECT
- *,
- sa.id as section_id
- FROM
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".fee_assignments fa
- JOIN "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s ON s.id = fa.feeable_id
- AND fa.feeable_type = 'section'
- WHERE fa.academic_year_id = 21
- group by s.id
-2021-01-24 19:32:26.762 IST [61561] ERROR: column "fa.id" must appear in the GROUP BY clause or be used in an aggregate function at character 4092
-2021-01-24 19:32:26.762 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- -- select
- -- sum(pi.amount) as amount_paid
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- -- where
- -- p.created_at BETWEEN '2019-06-01'
- -- and '2021-01-24'
- -- and c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
-
- SELECT
- *,
- s.id as section_id
- FROM
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".fee_assignments fa
- JOIN "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s ON s.id = fa.feeable_id
- AND fa.feeable_type = 'section'
- WHERE fa.academic_year_id = 21
- group by s.id
-2021-01-24 19:33:03.940 IST [61561] ERROR: syntax error at or near "FROM" at character 4114
-2021-01-24 19:33:03.940 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- -- select
- -- sum(pi.amount) as amount_paid
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- -- where
- -- p.created_at BETWEEN '2019-06-01'
- -- and '2021-01-24'
- -- and c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
-
- SELECT
- s.id as section_id,
-
- FROM
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".fee_assignments fa
- JOIN "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s ON s.id = fa.feeable_id
- AND fa.feeable_type = 'section'
- JOIN "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.section_id = s.id
- WHERE fa.academic_year_id = 21
- group by s.id
-2021-01-24 19:33:32.053 IST [61561] ERROR: column "fa.amount" must appear in the GROUP BY clause or be used in an aggregate function at character 4114
-2021-01-24 19:33:32.053 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- -- select
- -- sum(pi.amount) as amount_paid
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- -- where
- -- p.created_at BETWEEN '2019-06-01'
- -- and '2021-01-24'
- -- and c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- SELECT
- s.id as section_id,
- fa.amount
- FROM
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".fee_assignments fa
- JOIN "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s ON s.id = fa.feeable_id
- AND fa.feeable_type = 'section'
- JOIN "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.section_id = s.id
- WHERE
- fa.academic_year_id = 21
- group by
- s.id
-2021-01-24 19:34:54.376 IST [61561] ERROR: missing FROM-clause entry for table "s" at character 4092
-2021-01-24 19:34:54.376 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- -- select
- -- sum(pi.amount) as amount_paid
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- -- where
- -- p.created_at BETWEEN '2019-06-01'
- -- and '2021-01-24'
- -- and c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- SELECT
- s.id as section_id,
- sum(fa.amount),
- count(e.id) as enrolments
- FROM
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".fee_assignments fa
-
- JOIN "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.section_id = fa.feeable_id
- WHERE
- fa.academic_year_id = 21
- group by
- s.id
-2021-01-24 19:34:58.732 IST [61561] ERROR: missing FROM-clause entry for table "s" at character 4370
-2021-01-24 19:34:58.732 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- -- select
- -- sum(pi.amount) as amount_paid
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- -- where
- -- p.created_at BETWEEN '2019-06-01'
- -- and '2021-01-24'
- -- and c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- SELECT
- -- s.id as section_id,
- sum(fa.amount),
- count(e.id) as enrolments
- FROM
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".fee_assignments fa
-
- JOIN "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.section_id = fa.feeable_id
- WHERE
- fa.academic_year_id = 21
- group by
- s.id
-2021-01-24 19:48:33.759 IST [61561] ERROR: column "e.section_id" must appear in the GROUP BY clause or be used in an aggregate function at character 3402
-2021-01-24 19:48:33.759 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- select
- p.*,
- e.section_id,
- c.id as class_id,
- c.academic_year_id
- -- sum(pi.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- p.created_at BETWEEN '2019-06-01'
- and '2021-01-24'
- and p.status = 'paid'
- and s.id in (4)
- and c.academic_year_id = 21
- group by p.id;
-2021-01-24 19:48:59.558 IST [61561] ERROR: column "c.id" must appear in the GROUP BY clause or be used in an aggregate function at character 3420
-2021-01-24 19:48:59.558 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- select
- p.*,
- -- e.section_id,
- c.id as class_id,
- c.academic_year_id
- -- sum(pi.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- p.created_at BETWEEN '2019-06-01'
- and '2021-01-24'
- and p.status = 'paid'
- and s.id in (4)
- and c.academic_year_id = 21
- group by p.id;
-2021-01-24 19:49:05.206 IST [61561] ERROR: syntax error at or near "from" at character 3499
-2021-01-24 19:49:05.206 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- select
- p.*,
- -- e.section_id,
- -- c.id as class_id,
- -- c.academic_year_id
- -- sum(pi.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- p.created_at BETWEEN '2019-06-01'
- and '2021-01-24'
- and p.status = 'paid'
- and s.id in (4)
- and c.academic_year_id = 21
- group by p.id;
-2021-01-24 19:49:54.422 IST [61561] ERROR: column "pi.amount" must appear in the GROUP BY clause or be used in an aggregate function at character 3439
-2021-01-24 19:49:54.422 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- select
- p.*
- -- , sum(pi.amount) as paid_amount
- , pi.amount
- -- e.section_id,
- -- c.id as class_id,
- -- c.academic_year_id
- -- sum(pi.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- p.created_at BETWEEN '2019-06-01'
- and '2021-01-24'
- and p.status = 'paid'
- and s.id in (4)
- and c.academic_year_id = 21
- group by p.id;
-2021-01-24 19:50:10.578 IST [61561] ERROR: syntax error at or near "e" at character 3435
-2021-01-24 19:50:10.578 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- select
- p.*
- , sum(pi.amount) as paid_amount
- e.section_id,
- -- c.id as class_id,
- -- c.academic_year_id
- -- sum(pi.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- p.created_at BETWEEN '2019-06-01'
- and '2021-01-24'
- and p.status = 'paid'
- and s.id in (4)
- and c.academic_year_id = 21
- group by p.id;
-2021-01-24 19:50:16.778 IST [61561] ERROR: syntax error at or near "e" at character 3435
-2021-01-24 19:50:16.778 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- select
- p.*
- , sum(pi.amount) as paid_amount
- e.section_id,
- -- c.id as class_id,
- -- c.academic_year_id
- -- sum(pi.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- p.created_at BETWEEN '2019-06-01'
- and '2021-01-24'
- and p.status = 'paid'
- and s.id in (4)
- and c.academic_year_id = 21
- group by p.id, e.section_id;
-2021-01-24 19:51:33.455 IST [61561] ERROR: syntax error at or near "," at character 3433
-2021-01-24 19:51:33.455 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- select
- p.id
- , s.class_id
- , e.section_id,
- , p.enrolment_id
- , sum(pi.amount) as paid_amount
-
- -- c.id as class_id,
- -- c.academic_year_id
- -- sum(pi.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- p.created_at BETWEEN '2019-06-01'
- and '2021-01-24'
- and p.status = 'paid'
- and s.id in (4)
- and c.academic_year_id = 21
- group by p.id, s.class_id, e.section_id, p.enrolment_id;
-2021-01-24 19:52:33.123 IST [61561] ERROR: column "c.academic_year_id" must appear in the GROUP BY clause or be used in an aggregate function at character 3486
-2021-01-24 19:52:33.123 IST [61561] STATEMENT: -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payment_items pi
- -- left join "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".payments p on p.id = pi.payment_id
- -- where p.enrolment_id = 1
- -- select * from "tnt_fadab5cd-0384-403b-a152-1e7592084ab4".users where "name" LIKE '%afi%'
- -- DROP schema "tnt_788478b3-dcc8-4b5f-b4ee-d51c861333ff" CASCADE;
- -- select * from "tnt_cf809103-d949-4562-896e-bcef7c73e8d7".users where phone = '9705664434'
- -- select * from "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments where user_id = 1340
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."enrolments"
- -- where
- -- exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "name" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and "aadhar_number" :: text LIKE '%maya%'
- -- and "users"."deleted_at" is null
- -- )
- -- or exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."users"
- -- where
- -- "enrolments"."user_id" = "users"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."students"
- -- where
- -- "users"."id" = "students"."user_id"
- -- and "admission_number" :: text LIKE '%maya%'
- -- )
- -- and "users"."deleted_at" is null
- -- )
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."sections"
- -- where
- -- "enrolments"."section_id" = "sections"."id"
- -- and exists (
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."classes"
- -- where
- -- "sections"."class_id" = "classes"."id"
- -- and "academic_year_id" = 21
- -- )
- -- )
- -- limit
- -- 5
- -------------------------------------------
- -- AUTO COMPLETE
- -------------------------------------------
- -- select
- -- u.id, s."name" as section_name, u."name" as name, c."name" as class_name, u.aadhar_number, st.admission_number, s.id as section_id, c.id as class_id
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".users u on u.id = e.user_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".students st on st.user_id = u.id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21
- -- and u.name like '%maya%'
- -- or st.admission_number like '%maya%'
- -- or u.aadhar_number like '%maya%'
- -------------------------------------------
- -- SECTIONS
- -------------------------------------------
- -- select
- -- *
- -- from
- -- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s
- -- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- -- where
- -- c.academic_year_id = 21;
- -------------------------------------------
- -- AMOUNT PAID BY Academic Year ID
- -------------------------------------------
- select
- p.id
- , s.class_id
- , e.section_id
- , p.enrolment_id
- , sum(pi.amount) as paid_amount
- , c.academic_year_id
- -- c.id as class_id,
- -- c.academic_year_id
- -- sum(pi.amount) as amount_paid
- from
- "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payments p
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".enrolments e on e.id = p.enrolment_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".sections s on s.id = e.section_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".classes c on c.id = s.class_id
- join "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1".payment_items pi on pi.payment_id = p.id
- where
- p.created_at BETWEEN '2019-06-01'
- and '2021-01-24'
- and p.status = 'paid'
- and s.id in (4)
- and c.academic_year_id = 21
- group by p.id, s.class_id, e.section_id, p.enrolment_id;
-2021-01-24 19:56:39.082 IST [61561] ERROR: relation "payments" does not exist at character 225
-2021-01-24 19:56:39.082 IST [61561] STATEMENT: select
- p.id as payment_id,
- p.type,
- p.mode,
- p.status,
- p.dd_cheque_number,
- s.class_id,
- e.section_id,
- p.enrolment_id,
- sum(pi.amount) as paid_amount,
- c.academic_year_id,
- p.created_at,
- p.updated_at
- from
- payments p
- join enrolments e on e.id = p.enrolment_id
- join sections s on s.id = e.section_id
- join classes c on c.id = s.class_id
- join payment_items pi on pi.payment_id = p.id
- group by
- p.id,
- s.class_id,
- e.section_id,
- p.enrolment_id,
- c.academic_year_id;
-2021-01-24 19:57:21.731 IST [61561] ERROR: relation "payments" does not exist at character 244
-2021-01-24 19:57:21.731 IST [61561] STATEMENT: CREATE VIEW payments_view AS
- SELECT
- p.id AS payment_id,
- p.type,
- p.mode,
- p.status,
- p.dd_cheque_number,
- s.class_id,
- e.section_id,
- p.enrolment_id,
- sum(
- pi.amount) AS paid_amount,
- c.academic_year_id,
- p.created_at,
- p.updated_at
- FROM
- payments p
- JOIN enrolments e ON e.id = p.enrolment_id
- JOIN sections s ON s.id = e.section_id
- JOIN classes c ON c.id = s.class_id
- JOIN payment_items pi ON pi.payment_id = p.id
- GROUP BY
- p.id,
- s.class_id,
- e.section_id,
- p.enrolment_id,
- c.academic_year_id;
-2021-01-24 19:57:48.605 IST [61561] ERROR: invalid input syntax for type oid: "" at character 1397
-2021-01-24 19:57:48.605 IST [61561] STATEMENT: SELECT c.conname AS constraint_name,(SELECT STRING_AGG(QUOTE_IDENT(a.attname),','ORDER BY t.seq)FROM(SELECT ROW_NUMBER()OVER(ROWS UNBOUNDED PRECEDING)AS seq,attnum FROM UNNEST(c.conkey)AS t(attnum))AS t INNER JOIN pg_attribute AS a ON a.attrelid=c.conrelid AND a.attnum=t.attnum)AS child_column,tt.schema as parent_schema,tt.name AS parent_name,(SELECT STRING_AGG(QUOTE_IDENT(a.attname),','ORDER BY t.seq)FROM(SELECT ROW_NUMBER()OVER(ROWS UNBOUNDED PRECEDING)AS seq,attnum FROM UNNEST(c.confkey)AS t(attnum))AS t INNER JOIN pg_attribute AS a ON a.attrelid=c.confrelid AND a.attnum=t.attnum)AS parent_column,CASE confupdtype WHEN'r'THEN'restrict'WHEN'c'THEN'cascade'WHEN'n'THEN'set null'WHEN'd'THEN'set default'WHEN'a'THEN'no action'ELSE NULL END AS on_update,CASE confdeltype WHEN'r'THEN'restrict'WHEN'c'THEN'cascade'WHEN'n'THEN'set null'WHEN'd'THEN'set default'WHEN'a'THEN'no action'ELSE NULL END AS on_delete FROM pg_catalog.pg_constraint AS c INNER JOIN(SELECT pg_class.oid,QUOTE_IDENT(pg_namespace.nspname)as schema,QUOTE_IDENT(pg_class.relname)AS name FROM pg_class INNER JOIN pg_namespace ON pg_class.relnamespace=pg_namespace.oid)AS tf ON tf.oid=c.conrelid INNER JOIN(SELECT pg_class.oid,QUOTE_IDENT(pg_namespace.nspname)as schema,QUOTE_IDENT(pg_class.relname)AS name FROM pg_class INNER JOIN pg_namespace ON pg_class.relnamespace=pg_namespace.oid)AS tt ON tt.oid=c.confrelid WHERE tf.oid='' AND c.contype='f';
-2021-01-24 19:58:16.168 IST [61561] ERROR: relation "payments" does not exist at character 286
-2021-01-24 19:58:16.168 IST [61561] STATEMENT: CREATE VIEW "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."payments_view" AS SELECT
- p.id AS payment_id,
- p.type,
- p.mode,
- p.status,
- p.dd_cheque_number,
- s.class_id,
- e.section_id,
- p.enrolment_id,
- sum(pi.amount) AS paid_amount,
- c.academic_year_id,
- p.created_at,
- p.updated_at
- FROM
- payments p
- JOIN enrolments e ON e.id = p.enrolment_id
- JOIN sections s ON s.id = e.section_id
- JOIN classes c ON c.id = s.class_id
- JOIN payment_items pi ON pi.payment_id = p.id
- GROUP BY
- p.id,
- s.class_id,
- e.section_id,
- p.enrolment_id,
- c.academic_year_id;
-2021-01-25 00:02:22.238 IST [61561] ERROR: duplicate key value violates unique constraint "terms_pkey"
-2021-01-25 00:02:22.238 IST [61561] DETAIL: Key (id)=(4) already exists.
-2021-01-25 00:02:22.238 IST [61561] STATEMENT: UPDATE "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."terms" SET "id" = '4' WHERE "id" = '11';
-2021-01-25 00:02:51.913 IST [61561] ERROR: duplicate key value violates unique constraint "terms_pkey"
-2021-01-25 00:02:51.913 IST [61561] DETAIL: Key (id)=(2) already exists.
-2021-01-25 00:02:51.913 IST [61561] STATEMENT: UPDATE "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."terms" SET "id" = '2' WHERE "id" = '9';
-2021-01-25 00:11:59.847 IST [61561] ERROR: null value in column "amount" of relation "fee_assignments" violates not-null constraint
-2021-01-25 00:11:59.847 IST [61561] DETAIL: Failing row contains (1, null, null, null, null, null, null, null, null, null, null, null).
-2021-01-25 00:11:59.847 IST [61561] STATEMENT: INSERT INTO "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."fee_assignments" VALUES (DEFAULT);
-2021-01-25 00:12:14.126 IST [61561] ERROR: insert or update on table "fee_assignments" violates foreign key constraint "fee_assignments_fee_type_id_foreign"
-2021-01-25 00:12:14.126 IST [61561] DETAIL: Key (fee_type_id)=(89) is not present in table "fee_types".
-2021-01-25 00:12:14.126 IST [61561] STATEMENT: INSERT INTO "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."fee_assignments" ("id", "amount", "amount_new_admission", "fee_type_id", "academic_year_id", "term_id", "feeable_type", "feeable_id", "created_at") VALUES ('8253', '2340', '0', '89', '56', '5', 'section', '50', '2020-06-23 16:02:59.271264');
-2021-01-25 00:14:27.104 IST [61561] ERROR: insert or update on table "fee_assignments" violates foreign key constraint "fee_assignments_term_id_foreign"
-2021-01-25 00:14:27.104 IST [61561] DETAIL: Key (term_id)=(5) is not present in table "terms".
-2021-01-25 00:14:27.104 IST [61561] STATEMENT: INSERT INTO "tnt_67201e5a-f3b8-48fb-ae8a-f8484ceed5a1"."fee_assignments" ("id", "amount", "amount_new_admission", "fee_type_id", "academic_year_id", "term_id", "feeable_type", "feeable_id", "created_at") VALUES ('8253', '2340', '0', '89', '56', '5', 'section', '50', '2020-06-23 16:02:59.271264');
-2021-04-13 13:56:20.424 IST [39875] LOG: starting PostgreSQL 13.2 on x86_64-apple-darwin20.3.0, compiled by Apple clang version 12.0.0 (clang-1200.0.32.29), 64-bit
-2021-04-13 13:56:20.428 IST [39875] LOG: listening on IPv6 address "::1", port 5432
-2021-04-13 13:56:20.428 IST [39875] LOG: listening on IPv4 address "127.0.0.1", port 5432
-2021-04-13 13:56:20.434 IST [39875] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
-2021-04-13 13:56:20.447 IST [39876] LOG: database system was interrupted; last known up at 2021-04-07 21:56:31 IST
-2021-04-13 13:56:20.630 IST [39876] LOG: database system was not properly shut down; automatic recovery in progress
-2021-04-13 13:56:20.634 IST [39876] LOG: redo starts at 0/4A1B5D0
-2021-04-13 13:56:20.634 IST [39876] LOG: invalid record length at 0/4A1B6B8: wanted 24, got 0
-2021-04-13 13:56:20.634 IST [39876] LOG: redo done at 0/4A1B680
-2021-04-13 13:56:20.645 IST [39875] LOG: database system is ready to accept connections
-2021-04-13 13:57:38.422 IST [39997] ERROR: new row for relation "users" violates check constraint "users_blood_group_check"
-2021-04-13 13:57:38.422 IST [39997] DETAIL: Failing row contains (13, Demo Teacher, 1711, null, null, $2y$10$MVlQIOJyYK2gLtDbVP9LNe//4MqnCFwvpNzXvn0c9irwH5ic6gYEK, 1234567890, 123412341239, 1986-10-10, male, null, null, A+, null, t, null, 2021-04-13 08:27:38, 2021-04-13 08:27:38, null).
-2021-04-13 13:57:38.422 IST [39997] STATEMENT: insert into "users" ("username", "name", "phone", "gender", "dob", "blood_group", "aadhar_number", "password", "updated_at", "created_at") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) returning "id"
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index fa3abbf98..9f40b8bba 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -106,16 +106,15 @@
}
},
"node_modules/@babel/cli": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.13.10.tgz",
- "integrity": "sha512-lYSBC7B4B9hJ7sv0Ojx1BrGhuzCoOIYfLjd+Xpd4rOzdS+a47yi8voV8vFkfjlZR1N5qZO7ixOCbobUdT304PQ==",
+ "version": "7.13.16",
+ "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.13.16.tgz",
+ "integrity": "sha512-cL9tllhqvsQ6r1+d9Invf7nNXg/3BlfL1vvvL/AdH9fZ2l5j0CeBcoq6UjsqHpvyN1v5nXSZgqJZoGeK+ZOAbw==",
"dev": true,
"dependencies": {
"commander": "^4.0.1",
"convert-source-map": "^1.1.0",
"fs-readdir-recursive": "^1.1.0",
"glob": "^7.0.0",
- "lodash": "^4.17.19",
"make-dir": "^2.1.0",
"slash": "^2.0.0",
"source-map": "^0.5.0"
@@ -151,31 +150,30 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.13.12",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz",
- "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz",
+ "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==",
"dev": true
},
"node_modules/@babel/core": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz",
- "integrity": "sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz",
+ "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@babel/generator": "^7.13.9",
- "@babel/helper-compilation-targets": "^7.13.10",
- "@babel/helper-module-transforms": "^7.13.0",
- "@babel/helpers": "^7.13.10",
- "@babel/parser": "^7.13.10",
+ "@babel/generator": "^7.14.0",
+ "@babel/helper-compilation-targets": "^7.13.16",
+ "@babel/helper-module-transforms": "^7.14.0",
+ "@babel/helpers": "^7.14.0",
+ "@babel/parser": "^7.14.0",
"@babel/template": "^7.12.13",
- "@babel/traverse": "^7.13.0",
- "@babel/types": "^7.13.0",
+ "@babel/traverse": "^7.14.0",
+ "@babel/types": "^7.14.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.1.2",
- "lodash": "^4.17.19",
"semver": "^6.3.0",
"source-map": "^0.5.0"
},
@@ -197,12 +195,12 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.13.9",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz",
- "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz",
+ "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.13.0",
+ "@babel/types": "^7.14.1",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
}
@@ -236,12 +234,12 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz",
- "integrity": "sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA==",
+ "version": "7.13.16",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz",
+ "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.13.8",
+ "@babel/compat-data": "^7.13.15",
"@babel/helper-validator-option": "^7.12.17",
"browserslist": "^4.14.5",
"semver": "^6.3.0"
@@ -251,15 +249,16 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.13.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz",
- "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.1.tgz",
+ "integrity": "sha512-r8rsUahG4ywm0QpGcCrLaUSOuNAISR3IZCg4Fx05Ozq31aCUrQsTLH6KPxy0N5ULoQ4Sn9qjNdGNtbPWAC6hYg==",
"dev": true,
"dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.12.13",
"@babel/helper-function-name": "^7.12.13",
- "@babel/helper-member-expression-to-functions": "^7.13.0",
+ "@babel/helper-member-expression-to-functions": "^7.13.12",
"@babel/helper-optimise-call-expression": "^7.12.13",
- "@babel/helper-replace-supers": "^7.13.0",
+ "@babel/helper-replace-supers": "^7.13.12",
"@babel/helper-split-export-declaration": "^7.12.13"
},
"peerDependencies": {
@@ -280,9 +279,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
- "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz",
+ "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==",
"dev": true,
"dependencies": {
"@babel/helper-compilation-targets": "^7.13.0",
@@ -328,13 +327,13 @@
}
},
"node_modules/@babel/helper-hoist-variables": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz",
- "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==",
+ "version": "7.13.16",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz",
+ "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==",
"dev": true,
"dependencies": {
- "@babel/traverse": "^7.13.0",
- "@babel/types": "^7.13.0"
+ "@babel/traverse": "^7.13.15",
+ "@babel/types": "^7.13.16"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
@@ -356,19 +355,19 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.13.12",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz",
- "integrity": "sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz",
+ "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==",
"dev": true,
"dependencies": {
"@babel/helper-module-imports": "^7.13.12",
"@babel/helper-replace-supers": "^7.13.12",
"@babel/helper-simple-access": "^7.13.12",
"@babel/helper-split-export-declaration": "^7.12.13",
- "@babel/helper-validator-identifier": "^7.12.11",
+ "@babel/helper-validator-identifier": "^7.14.0",
"@babel/template": "^7.12.13",
- "@babel/traverse": "^7.13.0",
- "@babel/types": "^7.13.12"
+ "@babel/traverse": "^7.14.0",
+ "@babel/types": "^7.14.0"
}
},
"node_modules/@babel/helper-optimise-call-expression": {
@@ -437,9 +436,9 @@
}
},
"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==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz",
+ "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==",
"dev": true
},
"node_modules/@babel/helper-validator-option": {
@@ -461,31 +460,31 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz",
- "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz",
+ "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==",
"dev": true,
"dependencies": {
"@babel/template": "^7.12.13",
- "@babel/traverse": "^7.13.0",
- "@babel/types": "^7.13.0"
+ "@babel/traverse": "^7.14.0",
+ "@babel/types": "^7.14.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
- "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz",
+ "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.12.11",
+ "@babel/helper-validator-identifier": "^7.14.0",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.13.12",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz",
- "integrity": "sha512-4T7Pb244rxH24yR116LAuJ+adxXXnHhZaLJjegJVKSdoNCe4x1eDBaud5YIcQFcqzsaD5BHvJw5BQ0AZapdCRw==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz",
+ "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -509,9 +508,9 @@
}
},
"node_modules/@babel/plugin-proposal-async-generator-functions": {
- "version": "7.13.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz",
- "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==",
+ "version": "7.13.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz",
+ "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0",
@@ -535,13 +534,26 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-decorators": {
- "version": "7.13.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.5.tgz",
- "integrity": "sha512-i0GDfVNuoapwiheevUOuSW67mInqJ8qw7uWfpjNVeHMn143kXblEy/bmL9AdZ/0yf/4BMQeWXezK0tQIvNPqag==",
+ "node_modules/@babel/plugin-proposal-class-static-block": {
+ "version": "7.13.11",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz",
+ "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==",
"dev": true,
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.13.0",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/plugin-syntax-class-static-block": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-decorators": {
+ "version": "7.13.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.15.tgz",
+ "integrity": "sha512-ibAMAqUm97yzi+LPgdr5Nqb9CMkeieGHvwPg1ywSGjZrZHQEGqE01HmOio8kxRpA/+VtOHouIVy2FMpBbtltjA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.13.11",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-decorators": "^7.12.13"
},
@@ -696,6 +708,21 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz",
+ "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.12.13",
+ "@babel/helper-create-class-features-plugin": "^7.14.0",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-proposal-unicode-property-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz",
@@ -748,6 +775,18 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-class-static-block": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz",
+ "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-decorators": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz",
@@ -904,6 +943,18 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz",
+ "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.13.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz",
@@ -967,12 +1018,12 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz",
- "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.1.tgz",
+ "integrity": "sha512-2mQXd0zBrwfp0O1moWIhPpEeTKDvxyHcnma3JATVP1l+CctWBuot6OJG8LQ4DnBj4ZZPSmlb/fm4mu47EOAnVA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13"
+ "@babel/helper-plugin-utils": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
@@ -1009,9 +1060,9 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz",
- "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==",
+ "version": "7.13.17",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz",
+ "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0"
@@ -1121,12 +1172,12 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz",
- "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz",
+ "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.13.0",
+ "@babel/helper-module-transforms": "^7.14.0",
"@babel/helper-plugin-utils": "^7.13.0",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
@@ -1135,14 +1186,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.13.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz",
- "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz",
+ "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.13.0",
+ "@babel/helper-module-transforms": "^7.14.0",
"@babel/helper-plugin-utils": "^7.13.0",
- "@babel/helper-simple-access": "^7.12.13",
+ "@babel/helper-simple-access": "^7.13.12",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
"peerDependencies": {
@@ -1166,12 +1217,12 @@
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz",
- "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz",
+ "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.13.0",
+ "@babel/helper-module-transforms": "^7.14.0",
"@babel/helper-plugin-utils": "^7.13.0"
},
"peerDependencies": {
@@ -1240,9 +1291,9 @@
}
},
"node_modules/@babel/plugin-transform-react-constant-elements": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.10.tgz",
- "integrity": "sha512-E+aCW9j7mLq01tOuGV08YzLBt+vSyr4bOPT75B6WrAlrUfmOYOZ/yWk847EH0dv0xXiCihWLEmlX//O30YhpIw==",
+ "version": "7.13.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz",
+ "integrity": "sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0"
@@ -1329,9 +1380,9 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz",
- "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==",
+ "version": "7.13.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz",
+ "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==",
"dev": true,
"dependencies": {
"regenerator-transform": "^0.14.2"
@@ -1477,18 +1528,19 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.13.12",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz",
- "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.1.tgz",
+ "integrity": "sha512-0M4yL1l7V4l+j/UHvxcdvNfLB9pPtIooHTbEhgD/6UGyh8Hy3Bm1Mj0buzjDXATCSz3JFibVdnoJZCrlUCanrQ==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.13.12",
- "@babel/helper-compilation-targets": "^7.13.10",
+ "@babel/compat-data": "^7.14.0",
+ "@babel/helper-compilation-targets": "^7.13.16",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-validator-option": "^7.12.17",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12",
- "@babel/plugin-proposal-async-generator-functions": "^7.13.8",
+ "@babel/plugin-proposal-async-generator-functions": "^7.13.15",
"@babel/plugin-proposal-class-properties": "^7.13.0",
+ "@babel/plugin-proposal-class-static-block": "^7.13.11",
"@babel/plugin-proposal-dynamic-import": "^7.13.8",
"@babel/plugin-proposal-export-namespace-from": "^7.12.13",
"@babel/plugin-proposal-json-strings": "^7.13.8",
@@ -1499,9 +1551,11 @@
"@babel/plugin-proposal-optional-catch-binding": "^7.13.8",
"@babel/plugin-proposal-optional-chaining": "^7.13.12",
"@babel/plugin-proposal-private-methods": "^7.13.0",
+ "@babel/plugin-proposal-private-property-in-object": "^7.14.0",
"@babel/plugin-proposal-unicode-property-regex": "^7.12.13",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.12.13",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
"@babel/plugin-syntax-json-strings": "^7.8.3",
@@ -1511,14 +1565,15 @@
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.0",
"@babel/plugin-syntax-top-level-await": "^7.12.13",
"@babel/plugin-transform-arrow-functions": "^7.13.0",
"@babel/plugin-transform-async-to-generator": "^7.13.0",
"@babel/plugin-transform-block-scoped-functions": "^7.12.13",
- "@babel/plugin-transform-block-scoping": "^7.12.13",
+ "@babel/plugin-transform-block-scoping": "^7.14.1",
"@babel/plugin-transform-classes": "^7.13.0",
"@babel/plugin-transform-computed-properties": "^7.13.0",
- "@babel/plugin-transform-destructuring": "^7.13.0",
+ "@babel/plugin-transform-destructuring": "^7.13.17",
"@babel/plugin-transform-dotall-regex": "^7.12.13",
"@babel/plugin-transform-duplicate-keys": "^7.12.13",
"@babel/plugin-transform-exponentiation-operator": "^7.12.13",
@@ -1526,16 +1581,16 @@
"@babel/plugin-transform-function-name": "^7.12.13",
"@babel/plugin-transform-literals": "^7.12.13",
"@babel/plugin-transform-member-expression-literals": "^7.12.13",
- "@babel/plugin-transform-modules-amd": "^7.13.0",
- "@babel/plugin-transform-modules-commonjs": "^7.13.8",
+ "@babel/plugin-transform-modules-amd": "^7.14.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.14.0",
"@babel/plugin-transform-modules-systemjs": "^7.13.8",
- "@babel/plugin-transform-modules-umd": "^7.13.0",
+ "@babel/plugin-transform-modules-umd": "^7.14.0",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13",
"@babel/plugin-transform-new-target": "^7.12.13",
"@babel/plugin-transform-object-super": "^7.12.13",
"@babel/plugin-transform-parameters": "^7.13.0",
"@babel/plugin-transform-property-literals": "^7.12.13",
- "@babel/plugin-transform-regenerator": "^7.12.13",
+ "@babel/plugin-transform-regenerator": "^7.13.15",
"@babel/plugin-transform-reserved-words": "^7.12.13",
"@babel/plugin-transform-shorthand-properties": "^7.12.13",
"@babel/plugin-transform-spread": "^7.13.0",
@@ -1545,10 +1600,10 @@
"@babel/plugin-transform-unicode-escapes": "^7.12.13",
"@babel/plugin-transform-unicode-regex": "^7.12.13",
"@babel/preset-modules": "^0.1.4",
- "@babel/types": "^7.13.12",
- "babel-plugin-polyfill-corejs2": "^0.1.4",
- "babel-plugin-polyfill-corejs3": "^0.1.3",
- "babel-plugin-polyfill-regenerator": "^0.1.2",
+ "@babel/types": "^7.14.1",
+ "babel-plugin-polyfill-corejs2": "^0.2.0",
+ "babel-plugin-polyfill-corejs3": "^0.2.0",
+ "babel-plugin-polyfill-regenerator": "^0.2.0",
"core-js-compat": "^3.9.0",
"semver": "^6.3.0"
},
@@ -1557,13 +1612,14 @@
}
},
"node_modules/@babel/preset-flow": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.12.13.tgz",
- "integrity": "sha512-gcEjiwcGHa3bo9idURBp5fmJPcyFPOszPQjztXrOjUE2wWVqc6fIVJPgWPIQksaQ5XZ2HWiRsf2s1fRGVjUtVw==",
+ "version": "7.13.13",
+ "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.13.13.tgz",
+ "integrity": "sha512-MDtwtamMifqq3R2mC7l3A3uFalUb3NH5TIBQWjN/epEPlZktcLq4se3J+ivckKrLMGsR7H9LW8+pYuIUN9tsKg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13",
- "@babel/plugin-transform-flow-strip-types": "^7.12.13"
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/helper-validator-option": "^7.12.17",
+ "@babel/plugin-transform-flow-strip-types": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
@@ -1586,15 +1642,16 @@
}
},
"node_modules/@babel/preset-react": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.13.tgz",
- "integrity": "sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA==",
+ "version": "7.13.13",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz",
+ "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/helper-validator-option": "^7.12.17",
"@babel/plugin-transform-react-display-name": "^7.12.13",
- "@babel/plugin-transform-react-jsx": "^7.12.13",
- "@babel/plugin-transform-react-jsx-development": "^7.12.12",
+ "@babel/plugin-transform-react-jsx": "^7.13.12",
+ "@babel/plugin-transform-react-jsx-development": "^7.12.17",
"@babel/plugin-transform-react-pure-annotations": "^7.12.1"
},
"peerDependencies": {
@@ -1616,13 +1673,13 @@
}
},
"node_modules/@babel/register": {
- "version": "7.13.8",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.8.tgz",
- "integrity": "sha512-yCVtABcmvQjRsX2elcZFUV5Q5kDDpHdtXKKku22hNDma60lYuhKmtp1ykZ/okRCPLT2bR5S+cA1kvtBdAFlDTQ==",
+ "version": "7.13.16",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz",
+ "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==",
"dev": true,
"dependencies": {
+ "clone-deep": "^4.0.1",
"find-cache-dir": "^2.0.0",
- "lodash": "^4.17.19",
"make-dir": "^2.1.0",
"pirates": "^4.0.0",
"source-map-support": "^0.5.16"
@@ -1632,17 +1689,17 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
- "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz",
+ "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==",
"dependencies": {
"regenerator-runtime": "^0.13.4"
}
},
"node_modules/@babel/runtime-corejs3": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz",
- "integrity": "sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz",
+ "integrity": "sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg==",
"dev": true,
"dependencies": {
"core-js-pure": "^3.0.0",
@@ -1661,30 +1718,28 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz",
- "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz",
+ "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@babel/generator": "^7.13.0",
+ "@babel/generator": "^7.14.0",
"@babel/helper-function-name": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13",
- "@babel/parser": "^7.13.0",
- "@babel/types": "^7.13.0",
+ "@babel/parser": "^7.14.0",
+ "@babel/types": "^7.14.0",
"debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.19"
+ "globals": "^11.1.0"
}
},
"node_modules/@babel/types": {
- "version": "7.13.12",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz",
- "integrity": "sha512-K4nY2xFN4QMvQwkQ+zmBDp6ANMbVNw6BbxWmYA4qNjhR9W+Lj/8ky5MEY2Me5r+B2c6/v6F53oMndG+f9s3IiA==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz",
+ "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.12.11",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.14.0",
"to-fast-properties": "^2.0.0"
}
},
@@ -1966,15 +2021,6 @@
"react": ">=0.14.0"
}
},
- "node_modules/@icons/material": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz",
- "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==",
- "dev": true,
- "peerDependencies": {
- "react": "*"
- }
- },
"node_modules/@jest/console": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
@@ -2075,15 +2121,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/@jest/core/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/@jest/core/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -2307,15 +2344,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/@jest/transform/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/@jest/transform/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -2532,9 +2560,9 @@
}
},
"node_modules/@popperjs/core": {
- "version": "2.9.1",
- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.1.tgz",
- "integrity": "sha512-DvJbbn3dUgMxDnJLH+RZQPnXak1h4ZVYQ7CWiFWjQwBFkVajT4rfw2PdpHLTSTwxrYfnoEXkuBiwkDm6tPMQeA==",
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.2.tgz",
+ "integrity": "sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q==",
"dev": true,
"funding": {
"type": "opencollective",
@@ -2646,19 +2674,19 @@
}
},
"node_modules/@storybook/addons": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.1.21.tgz",
- "integrity": "sha512-xo5TGu9EZVCqgh3D1veVnfuGzyKDWWsvOMo18phVqRxj21G3/+hScVyfIYwNTv7Ys5/Ahp9JxJUMXL3V3ny+tw==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.2.9.tgz",
+ "integrity": "sha512-GnmEKbJwiN1jncN9NSA8CuR1i2XAlasPcl/Zn0jkfV9WitQeczVcJCPw86SGH84AD+tTBCyF2i9UC0KaOV1YBQ==",
"dev": true,
"dependencies": {
- "@storybook/api": "6.1.21",
- "@storybook/channels": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/core-events": "6.1.21",
- "@storybook/router": "6.1.21",
- "@storybook/theming": "6.1.21",
- "core-js": "^3.0.1",
- "global": "^4.3.2",
+ "@storybook/api": "6.2.9",
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "@storybook/router": "6.2.9",
+ "@storybook/theming": "6.2.9",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
"regenerator-runtime": "^0.13.7"
},
"peerDependencies": {
@@ -2667,28 +2695,29 @@
}
},
"node_modules/@storybook/api": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.1.21.tgz",
- "integrity": "sha512-QjZk70VSXMw/wPPoWdMp5Bl9VmkfmGhIz8PALrFLLEZHjzptpfZE2qkGEEJHG0NAksFUv6NxGki2/632dzR7Ug==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.2.9.tgz",
+ "integrity": "sha512-okkA3HAScE9tGnYBrjTOcgzT+L1lRHNoEh3ZfGgh1u/XNEyHGNkj4grvkd6nX7BzRcYQ/l2VkcKCqmOjUnSkVQ==",
"dev": true,
"dependencies": {
- "@reach/router": "^1.3.3",
- "@storybook/channels": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/core-events": "6.1.21",
+ "@reach/router": "^1.3.4",
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/core-events": "6.2.9",
"@storybook/csf": "0.0.1",
- "@storybook/router": "6.1.21",
+ "@storybook/router": "6.2.9",
"@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.1.21",
+ "@storybook/theming": "6.2.9",
"@types/reach__router": "^1.3.7",
- "core-js": "^3.0.1",
- "fast-deep-equal": "^3.1.1",
- "global": "^4.3.2",
- "lodash": "^4.17.15",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
"memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
"regenerator-runtime": "^0.13.7",
- "store2": "^2.7.1",
- "telejson": "^5.0.2",
+ "store2": "^2.12.0",
+ "telejson": "^5.1.0",
"ts-dedent": "^2.0.0",
"util-deprecate": "^1.0.2"
},
@@ -2697,122 +2726,23 @@
"react-dom": "^16.8.0 || ^17.0.0"
}
},
- "node_modules/@storybook/channel-postmessage": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.1.21.tgz",
- "integrity": "sha512-SuI/ffqcPT02VNda32k8V0D4XpLm5bIy8CLIs0OAnQg+zt5KjGBpQBngk3q4EaAiOoAhbMWAQiUzRUXfrgkgXg==",
+ "node_modules/@storybook/builder-webpack4": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.2.9.tgz",
+ "integrity": "sha512-swECic1huVdj+B+iRJIQ8ds59HuPVE4fmhI+j/nhw0CQCsgAEKqDlOQVYEimW6nZX8GO4WxNm6tiiRzxixejbw==",
"dev": true,
"dependencies": {
- "@storybook/channels": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/core-events": "6.1.21",
- "core-js": "^3.0.1",
- "global": "^4.3.2",
- "qs": "^6.6.0",
- "telejson": "^5.0.2"
- }
- },
- "node_modules/@storybook/channels": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.1.21.tgz",
- "integrity": "sha512-7WoizMjyHqCyvcWncLexSg9FLPIErWAZL4NvluEthwsHSO2sDybn9mh1pzsFHdYMuTP6ml06Zt9ayWMtIveHDg==",
- "dev": true,
- "dependencies": {
- "core-js": "^3.0.1",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "node_modules/@storybook/client-api": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.1.21.tgz",
- "integrity": "sha512-uLFXQ5z1LLWYnw1w+YUJPzIPRVlwCCvM2Si37aHDZn1F3fnbMg+huEhEqIQ1TTTw3wiJoTeGuShYvqyaiNwq/w==",
- "dev": true,
- "dependencies": {
- "@storybook/addons": "6.1.21",
- "@storybook/channel-postmessage": "6.1.21",
- "@storybook/channels": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/core-events": "6.1.21",
- "@storybook/csf": "0.0.1",
- "@types/qs": "^6.9.0",
- "@types/webpack-env": "^1.15.3",
- "core-js": "^3.0.1",
- "global": "^4.3.2",
- "lodash": "^4.17.15",
- "memoizerific": "^1.11.3",
- "qs": "^6.6.0",
- "regenerator-runtime": "^0.13.7",
- "stable": "^0.1.8",
- "store2": "^2.7.1",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- }
- },
- "node_modules/@storybook/client-logger": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.1.21.tgz",
- "integrity": "sha512-QJV+gnVM2fQ4M7lSkRLCXkOw/RU+aEtUefo9TAnXxPHK3UGG+DyvLmha6fHGaz9GAcFxyWtgqCyVOhMe03Q35g==",
- "dev": true,
- "dependencies": {
- "core-js": "^3.0.1",
- "global": "^4.3.2"
- }
- },
- "node_modules/@storybook/components": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.1.21.tgz",
- "integrity": "sha512-2NjkyS1yeYXlRY7azt88woqd6eqJA00oloIxgMAFLVpRmvFxoHalY61wNrvxl2QSu9cNofp984AbGc8gPbizBA==",
- "dev": true,
- "dependencies": {
- "@popperjs/core": "^2.5.4",
- "@storybook/client-logger": "6.1.21",
- "@storybook/csf": "0.0.1",
- "@storybook/theming": "6.1.21",
- "@types/overlayscrollbars": "^1.9.0",
- "@types/react-color": "^3.0.1",
- "@types/react-syntax-highlighter": "11.0.4",
- "core-js": "^3.0.1",
- "fast-deep-equal": "^3.1.1",
- "global": "^4.3.2",
- "lodash": "^4.17.15",
- "markdown-to-jsx": "^6.11.4",
- "memoizerific": "^1.11.3",
- "overlayscrollbars": "^1.10.2",
- "polished": "^3.4.4",
- "react-color": "^2.17.0",
- "react-popper-tooltip": "^3.1.1",
- "react-syntax-highlighter": "^13.5.0",
- "react-textarea-autosize": "^8.1.1",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- }
- },
- "node_modules/@storybook/core": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.1.21.tgz",
- "integrity": "sha512-ITqSid3VVL5/fkx7Wwu7QfD2Y5xjl3V6p7yUpLSzP8GpBnCHKDvJ4pFJUdJlGQ0mnGz6ACa0qVnSc+V0hiy1sA==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.12.3",
+ "@babel/core": "^7.12.10",
"@babel/plugin-proposal-class-properties": "^7.12.1",
- "@babel/plugin-proposal-decorators": "^7.12.1",
+ "@babel/plugin-proposal-decorators": "^7.12.12",
"@babel/plugin-proposal-export-default-from": "^7.12.1",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
- "@babel/plugin-proposal-optional-chaining": "^7.12.1",
+ "@babel/plugin-proposal-optional-chaining": "^7.12.7",
"@babel/plugin-proposal-private-methods": "^7.12.1",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-transform-arrow-functions": "^7.12.1",
- "@babel/plugin-transform-block-scoping": "^7.12.1",
+ "@babel/plugin-transform-block-scoping": "^7.12.12",
"@babel/plugin-transform-classes": "^7.12.1",
"@babel/plugin-transform-destructuring": "^7.12.1",
"@babel/plugin-transform-for-of": "^7.12.1",
@@ -2820,86 +2750,55 @@
"@babel/plugin-transform-shorthand-properties": "^7.12.1",
"@babel/plugin-transform-spread": "^7.12.1",
"@babel/plugin-transform-template-literals": "^7.12.1",
- "@babel/preset-env": "^7.12.1",
- "@babel/preset-react": "^7.12.1",
- "@babel/preset-typescript": "^7.12.1",
- "@babel/register": "^7.12.1",
- "@storybook/addons": "6.1.21",
- "@storybook/api": "6.1.21",
- "@storybook/channel-postmessage": "6.1.21",
- "@storybook/channels": "6.1.21",
- "@storybook/client-api": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/components": "6.1.21",
- "@storybook/core-events": "6.1.21",
- "@storybook/csf": "0.0.1",
- "@storybook/node-logger": "6.1.21",
- "@storybook/router": "6.1.21",
+ "@babel/preset-env": "^7.12.11",
+ "@babel/preset-react": "^7.12.10",
+ "@babel/preset-typescript": "^7.12.7",
+ "@storybook/addons": "6.2.9",
+ "@storybook/api": "6.2.9",
+ "@storybook/channel-postmessage": "6.2.9",
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-api": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/components": "6.2.9",
+ "@storybook/core-common": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "@storybook/node-logger": "6.2.9",
+ "@storybook/router": "6.2.9",
"@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.1.21",
- "@storybook/ui": "6.1.21",
- "@types/glob-base": "^0.3.0",
- "@types/micromatch": "^4.0.1",
- "@types/node-fetch": "^2.5.4",
- "airbnb-js-shims": "^2.2.1",
- "ansi-to-html": "^0.6.11",
- "autoprefixer": "^9.7.2",
- "babel-loader": "^8.0.6",
- "babel-plugin-emotion": "^10.0.20",
+ "@storybook/theming": "6.2.9",
+ "@storybook/ui": "6.2.9",
+ "@types/node": "^14.0.10",
+ "@types/webpack": "^4.41.26",
+ "autoprefixer": "^9.8.6",
+ "babel-loader": "^8.2.2",
"babel-plugin-macros": "^2.8.0",
- "babel-preset-minify": "^0.5.0 || 0.6.0-alpha.5",
- "better-opn": "^2.0.0",
- "boxen": "^4.1.0",
- "case-sensitive-paths-webpack-plugin": "^2.2.0",
- "chalk": "^4.0.0",
- "cli-table3": "0.6.0",
- "commander": "^5.0.0",
- "core-js": "^3.0.1",
- "cpy": "^8.1.1",
- "css-loader": "^3.5.3",
- "detect-port": "^1.3.0",
- "dotenv-webpack": "^1.7.0",
- "ejs": "^3.1.2",
- "express": "^4.17.0",
- "file-loader": "^6.0.0",
- "file-system-cache": "^1.0.5",
- "find-up": "^4.1.0",
- "fork-ts-checker-webpack-plugin": "^4.1.4",
- "fs-extra": "^9.0.0",
+ "babel-plugin-polyfill-corejs3": "^0.1.0",
+ "case-sensitive-paths-webpack-plugin": "^2.3.0",
+ "core-js": "^3.8.2",
+ "css-loader": "^3.6.0",
+ "dotenv-webpack": "^1.8.0",
+ "file-loader": "^6.2.0",
+ "find-up": "^5.0.0",
+ "fork-ts-checker-webpack-plugin": "^4.1.6",
+ "fs-extra": "^9.0.1",
"glob": "^7.1.6",
- "glob-base": "^0.3.0",
"glob-promise": "^3.4.0",
- "global": "^4.3.2",
- "html-webpack-plugin": "^4.2.1",
- "inquirer": "^7.0.0",
- "interpret": "^2.0.0",
- "ip": "^1.1.5",
- "json5": "^2.1.1",
- "lazy-universal-dotenv": "^3.0.1",
- "micromatch": "^4.0.2",
- "node-fetch": "^2.6.0",
- "pkg-dir": "^4.2.0",
+ "global": "^4.4.0",
+ "html-webpack-plugin": "^4.0.0",
"pnp-webpack-plugin": "1.6.4",
- "postcss-flexbugs-fixes": "^4.1.0",
- "postcss-loader": "^3.0.0",
- "pretty-hrtime": "^1.0.3",
- "qs": "^6.6.0",
- "raw-loader": "^4.0.1",
+ "postcss": "^7.0.35",
+ "postcss-flexbugs-fixes": "^4.2.1",
+ "postcss-loader": "^4.2.0",
+ "raw-loader": "^4.0.2",
"react-dev-utils": "^11.0.3",
- "regenerator-runtime": "^0.13.7",
- "resolve-from": "^5.0.0",
- "serve-favicon": "^2.5.0",
- "shelljs": "^0.8.4",
"stable": "^0.1.8",
- "style-loader": "^1.2.1",
- "telejson": "^5.0.2",
- "terser-webpack-plugin": "^3.0.0",
+ "style-loader": "^1.3.0",
+ "terser-webpack-plugin": "^3.1.0",
"ts-dedent": "^2.0.0",
- "unfetch": "^4.1.0",
- "url-loader": "^4.0.0",
+ "url-loader": "^4.1.1",
"util-deprecate": "^1.0.2",
- "webpack": "^4.44.2",
- "webpack-dev-middleware": "^3.7.0",
+ "webpack": "4",
+ "webpack-dev-middleware": "^3.7.3",
"webpack-filter-warnings-plugin": "^1.2.1",
"webpack-hot-middleware": "^2.25.0",
"webpack-virtual-modules": "^0.2.2"
@@ -2907,33 +2806,33 @@
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0",
"react-dom": "^16.8.0 || ^17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/core-events": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.1.21.tgz",
- "integrity": "sha512-KWqnh1C7M1pT//WfQb3AD60yTR8jL48AfaeLGto2gO9VK7VVgj/EGsrXZP/GTL90ygyExbbBI5gkr7EBTu/HYw==",
+ "node_modules/@storybook/builder-webpack4/node_modules/@babel/helper-define-polyfill-provider": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
+ "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
"dev": true,
"dependencies": {
- "core-js": "^3.0.1"
+ "@babel/helper-compilation-targets": "^7.13.0",
+ "@babel/helper-module-imports": "^7.12.13",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/traverse": "^7.13.0",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0-0"
}
},
- "node_modules/@storybook/core/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==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@storybook/core/node_modules/autoprefixer": {
+ "node_modules/@storybook/builder-webpack4/node_modules/autoprefixer": {
"version": "9.8.6",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz",
"integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==",
@@ -2955,50 +2854,101 @@
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
}
},
- "node_modules/@storybook/core/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/@storybook/builder-webpack4/node_modules/babel-plugin-macros": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
+ "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
"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"
+ "@babel/runtime": "^7.7.2",
+ "cosmiconfig": "^6.0.0",
+ "resolve": "^1.12.0"
}
},
- "node_modules/@storybook/core/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==",
+ "node_modules/@storybook/builder-webpack4/node_modules/babel-plugin-macros/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": {
- "color-name": "~1.1.4"
+ "@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": ">=7.0.0"
+ "node": ">=8"
}
},
- "node_modules/@storybook/core/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==",
- "dev": true
- },
- "node_modules/@storybook/core/node_modules/commander": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
- "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
+ "node_modules/@storybook/builder-webpack4/node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
+ "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
"dev": true,
- "engines": {
- "node": ">= 6"
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.1.5",
+ "core-js-compat": "^3.8.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@storybook/core/node_modules/html-webpack-plugin": {
+ "node_modules/@storybook/builder-webpack4/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==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@storybook/builder-webpack4/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@storybook/builder-webpack4/node_modules/fork-ts-checker-webpack-plugin": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
+ "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.5.5",
+ "chalk": "^2.4.1",
+ "micromatch": "^3.1.10",
+ "minimatch": "^3.0.4",
+ "semver": "^5.6.0",
+ "tapable": "^1.0.0",
+ "worker-rpc": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6.11.5",
+ "yarn": ">=1.0.0"
+ }
+ },
+ "node_modules/@storybook/builder-webpack4/node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/@storybook/builder-webpack4/node_modules/html-webpack-plugin": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz",
"integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==",
@@ -3021,105 +2971,132 @@
"webpack": "^4.0.0 || ^5.0.0"
}
},
- "node_modules/@storybook/core/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "node_modules/@storybook/builder-webpack4/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==",
"dev": true,
"dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
+ "is-plain-object": "^2.0.4"
},
"engines": {
- "node": ">=6.0.0"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "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/@storybook/builder-webpack4/node_modules/postcss-loader": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.2.0.tgz",
+ "integrity": "sha512-mqgScxHqbiz1yxbnNcPdKYo/6aVt+XExURmEbQlviFVWogDbM4AJ0A/B+ZBpYsJrTRxKw7HyRazg9x0Q9SWwLA==",
+ "dev": true,
+ "dependencies": {
+ "cosmiconfig": "^7.0.0",
+ "klona": "^2.0.4",
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^3.0.0",
+ "semver": "^7.3.4"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/postcss/"
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "postcss": "^7.0.0 || ^8.0.1",
+ "webpack": "^4.0.0 || ^5.0.0"
}
},
- "node_modules/@storybook/core/node_modules/postcss-value-parser": {
+ "node_modules/@storybook/builder-webpack4/node_modules/postcss-loader/node_modules/loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/@storybook/builder-webpack4/node_modules/postcss-loader/node_modules/schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/@storybook/builder-webpack4/node_modules/postcss-loader/node_modules/semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@storybook/builder-webpack4/node_modules/postcss-value-parser": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
- "node_modules/@storybook/core/node_modules/postcss/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/@storybook/core/node_modules/postcss/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/@storybook/core/node_modules/postcss/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==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@storybook/core/node_modules/postcss/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/@storybook/core/node_modules/postcss/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "node_modules/@storybook/core/node_modules/postcss/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/core/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core/node_modules/style-loader": {
+ "node_modules/@storybook/builder-webpack4/node_modules/style-loader": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz",
"integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==",
@@ -3139,7 +3116,7 @@
"webpack": "^4.0.0 || ^5.0.0"
}
},
- "node_modules/@storybook/core/node_modules/style-loader/node_modules/loader-utils": {
+ "node_modules/@storybook/builder-webpack4/node_modules/style-loader/node_modules/loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
@@ -3153,7 +3130,309 @@
"node": ">=8.9.0"
}
},
- "node_modules/@storybook/core/node_modules/supports-color": {
+ "node_modules/@storybook/builder-webpack4/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/@storybook/channel-postmessage": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.2.9.tgz",
+ "integrity": "sha512-OqV+gLeeCHR0KExsIz0B7gD17Cjd9D+I75qnBsLWM9inWO5kc/WZ5svw8Bvjlcm6snWpvxUaT8L+svuqcPSmww==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "qs": "^6.10.0",
+ "telejson": "^5.1.0"
+ }
+ },
+ "node_modules/@storybook/channels": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.2.9.tgz",
+ "integrity": "sha512-6dC8Fb2ipNyOQXnUZMDeEUaJGH5DMLzyHlGLhVyDtrO5WR6bO8mQdkzf4+5dSKXgCBNX0BSkssXth4pDjn18rg==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "node_modules/@storybook/client-api": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.2.9.tgz",
+ "integrity": "sha512-aLvEUVkbvv6Qo/2mF4rFCecdqi2CGOUDdsV1a6EFIVS/9gXFdpirsOwKHo9qNjacGdWPlBYGCUcbrw+DvNaSFA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/addons": "6.2.9",
+ "@storybook/channel-postmessage": "6.2.9",
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "@storybook/csf": "0.0.1",
+ "@types/qs": "^6.9.5",
+ "@types/webpack-env": "^1.16.0",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "regenerator-runtime": "^0.13.7",
+ "stable": "^0.1.8",
+ "store2": "^2.12.0",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/client-logger": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.2.9.tgz",
+ "integrity": "sha512-IfOQZuvpjh66qBInQCJOb9S0dTGpzZ/Cxlcvokp+PYt95KztaWN3mPm+HaDQCeRsrWNe0Bpm1zuickcJ6dBOXg==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2",
+ "global": "^4.4.0"
+ }
+ },
+ "node_modules/@storybook/components": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.2.9.tgz",
+ "integrity": "sha512-hnV1MI2aB2g1sJ7NJphpxi7TwrMZQ/tpCJeHnkjmzyC6ez1MXqcBXGrEEdSXzRfAxjQTOEpu6H1mnns0xMP0Ag==",
+ "dev": true,
+ "dependencies": {
+ "@popperjs/core": "^2.6.0",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/csf": "0.0.1",
+ "@storybook/theming": "6.2.9",
+ "@types/color-convert": "^2.0.0",
+ "@types/overlayscrollbars": "^1.12.0",
+ "@types/react-syntax-highlighter": "11.0.5",
+ "color-convert": "^2.0.1",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
+ "markdown-to-jsx": "^7.1.0",
+ "memoizerific": "^1.11.3",
+ "overlayscrollbars": "^1.13.1",
+ "polished": "^4.0.5",
+ "prop-types": "^15.7.2",
+ "react-colorful": "^5.0.1",
+ "react-popper-tooltip": "^3.1.1",
+ "react-syntax-highlighter": "^13.5.3",
+ "react-textarea-autosize": "^8.3.0",
+ "regenerator-runtime": "^0.13.7",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/core": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.2.9.tgz",
+ "integrity": "sha512-pzbyjWvj0t8m0kR2pC9GQne4sZn7Y/zfcbm6/31CL+yhzOQjfJEj3n4ZFUlxikXqQJPg1aWfypfyaeaLL0QyuA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-client": "6.2.9",
+ "@storybook/core-server": "6.2.9"
+ },
+ "peerDependencies": {
+ "@storybook/builder-webpack5": "6.2.9",
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@storybook/builder-webpack5": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/core-client": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.2.9.tgz",
+ "integrity": "sha512-jW841J5lCe1Ub5ZMtzYPgCy/OUddFxxVYeHLZyuNxlH5RoiQQxbDpuFlzuZMYGuIzD6eZw+ANE4w5vW/y5oBfA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/addons": "6.2.9",
+ "@storybook/channel-postmessage": "6.2.9",
+ "@storybook/client-api": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "@storybook/csf": "0.0.1",
+ "@storybook/ui": "6.2.9",
+ "ansi-to-html": "^0.6.11",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
+ "qs": "^6.10.0",
+ "regenerator-runtime": "^0.13.7",
+ "ts-dedent": "^2.0.0",
+ "unfetch": "^4.2.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0",
+ "webpack": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/core-common": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.2.9.tgz",
+ "integrity": "sha512-ve0Qb4EMit8jGibfZBprmaU2i4LtpB4vSMIzD9nB1YeBmw2cGhHubtmayZ0TwcV3fPQhtYH9wwRWuWyzzHyQyw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.12.10",
+ "@babel/plugin-proposal-class-properties": "^7.12.1",
+ "@babel/plugin-proposal-decorators": "^7.12.12",
+ "@babel/plugin-proposal-export-default-from": "^7.12.1",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
+ "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
+ "@babel/plugin-proposal-optional-chaining": "^7.12.7",
+ "@babel/plugin-proposal-private-methods": "^7.12.1",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-transform-arrow-functions": "^7.12.1",
+ "@babel/plugin-transform-block-scoping": "^7.12.12",
+ "@babel/plugin-transform-classes": "^7.12.1",
+ "@babel/plugin-transform-destructuring": "^7.12.1",
+ "@babel/plugin-transform-for-of": "^7.12.1",
+ "@babel/plugin-transform-parameters": "^7.12.1",
+ "@babel/plugin-transform-shorthand-properties": "^7.12.1",
+ "@babel/plugin-transform-spread": "^7.12.1",
+ "@babel/preset-env": "^7.12.11",
+ "@babel/preset-react": "^7.12.10",
+ "@babel/preset-typescript": "^7.12.7",
+ "@babel/register": "^7.12.1",
+ "@storybook/node-logger": "6.2.9",
+ "@storybook/semver": "^7.3.2",
+ "@types/glob-base": "^0.3.0",
+ "@types/micromatch": "^4.0.1",
+ "@types/node": "^14.0.10",
+ "@types/pretty-hrtime": "^1.0.0",
+ "babel-loader": "^8.2.2",
+ "babel-plugin-macros": "^3.0.1",
+ "babel-plugin-polyfill-corejs3": "^0.1.0",
+ "chalk": "^4.1.0",
+ "core-js": "^3.8.2",
+ "express": "^4.17.1",
+ "file-system-cache": "^1.0.5",
+ "find-up": "^5.0.0",
+ "fork-ts-checker-webpack-plugin": "^6.0.4",
+ "glob": "^7.1.6",
+ "glob-base": "^0.3.0",
+ "interpret": "^2.2.0",
+ "json5": "^2.1.3",
+ "lazy-universal-dotenv": "^3.0.1",
+ "micromatch": "^4.0.2",
+ "pkg-dir": "^5.0.0",
+ "pretty-hrtime": "^1.0.3",
+ "resolve-from": "^5.0.0",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2",
+ "webpack": "4"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/@babel/helper-define-polyfill-provider": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
+ "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.13.0",
+ "@babel/helper-module-imports": "^7.12.13",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/traverse": "^7.13.0",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0-0"
+ }
+ },
+ "node_modules/@storybook/core-common/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==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
+ "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.1.5",
+ "core-js-compat": "^3.8.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/chalk": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "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/@storybook/core-common/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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-common/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==",
@@ -3165,7 +3444,130 @@
"node": ">=8"
}
},
- "node_modules/@storybook/core/node_modules/supports-color/node_modules/has-flag": {
+ "node_modules/@storybook/core-events": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.2.9.tgz",
+ "integrity": "sha512-xQmbX/oYQK1QsAGN8hriXX5SUKOoTUe3L4dVaVHxJqy7MReRWJpprJmCpbAPJzWS6WCbDFfCM5kVEexHLOzJlQ==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2"
+ }
+ },
+ "node_modules/@storybook/core-server": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.2.9.tgz",
+ "integrity": "sha512-DzihO73pj1Ro0Y4tq9hjw2mLMUYeSRPrx7CndCOBxcTHCKQ8Kd7Dee3wJ49t5/19V7TW1+4lYR59GAy73FeOAQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.12.10",
+ "@babel/plugin-transform-template-literals": "^7.12.1",
+ "@babel/preset-react": "^7.12.10",
+ "@storybook/addons": "6.2.9",
+ "@storybook/builder-webpack4": "6.2.9",
+ "@storybook/core-client": "6.2.9",
+ "@storybook/core-common": "6.2.9",
+ "@storybook/node-logger": "6.2.9",
+ "@storybook/semver": "^7.3.2",
+ "@storybook/theming": "6.2.9",
+ "@storybook/ui": "6.2.9",
+ "@types/node": "^14.0.10",
+ "@types/node-fetch": "^2.5.7",
+ "@types/pretty-hrtime": "^1.0.0",
+ "@types/webpack": "^4.41.26",
+ "airbnb-js-shims": "^2.2.1",
+ "babel-loader": "^8.2.2",
+ "better-opn": "^2.1.1",
+ "boxen": "^4.2.0",
+ "case-sensitive-paths-webpack-plugin": "^2.3.0",
+ "chalk": "^4.1.0",
+ "cli-table3": "0.6.0",
+ "commander": "^6.2.1",
+ "core-js": "^3.8.2",
+ "cpy": "^8.1.1",
+ "css-loader": "^3.6.0",
+ "detect-port": "^1.3.0",
+ "dotenv-webpack": "^1.8.0",
+ "express": "^4.17.1",
+ "file-loader": "^6.2.0",
+ "file-system-cache": "^1.0.5",
+ "find-up": "^5.0.0",
+ "fs-extra": "^9.0.1",
+ "global": "^4.4.0",
+ "html-webpack-plugin": "^4.0.0",
+ "ip": "^1.1.5",
+ "node-fetch": "^2.6.1",
+ "pnp-webpack-plugin": "1.6.4",
+ "pretty-hrtime": "^1.0.3",
+ "prompts": "^2.4.0",
+ "read-pkg-up": "^7.0.1",
+ "regenerator-runtime": "^0.13.7",
+ "resolve-from": "^5.0.0",
+ "serve-favicon": "^2.5.0",
+ "style-loader": "^1.3.0",
+ "telejson": "^5.1.0",
+ "terser-webpack-plugin": "^3.1.0",
+ "ts-dedent": "^2.0.0",
+ "url-loader": "^4.1.1",
+ "util-deprecate": "^1.0.2",
+ "webpack": "4",
+ "webpack-dev-middleware": "^3.7.3",
+ "webpack-virtual-modules": "^0.2.2"
+ },
+ "peerDependencies": {
+ "@storybook/builder-webpack5": "6.2.9",
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@storybook/builder-webpack5": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/core-server/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==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/chalk": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "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/@storybook/core-server/node_modules/commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@storybook/core-server/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==",
@@ -3174,6 +3576,75 @@
"node": ">=8"
}
},
+ "node_modules/@storybook/core-server/node_modules/html-webpack-plugin": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz",
+ "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==",
+ "dev": true,
+ "dependencies": {
+ "@types/html-minifier-terser": "^5.0.0",
+ "@types/tapable": "^1.0.5",
+ "@types/webpack": "^4.41.8",
+ "html-minifier-terser": "^5.0.1",
+ "loader-utils": "^1.2.3",
+ "lodash": "^4.17.20",
+ "pretty-error": "^2.1.1",
+ "tapable": "^1.1.3",
+ "util.promisify": "1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9"
+ },
+ "peerDependencies": {
+ "webpack": "^4.0.0 || ^5.0.0"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/style-loader": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz",
+ "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==",
+ "dev": true,
+ "dependencies": {
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^2.7.0"
+ },
+ "engines": {
+ "node": ">= 8.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^4.0.0 || ^5.0.0"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/style-loader/node_modules/loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/@storybook/core-server/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==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/@storybook/csf": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz",
@@ -3184,14 +3655,14 @@
}
},
"node_modules/@storybook/node-logger": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.1.21.tgz",
- "integrity": "sha512-wQZZw4n1PG3kGOsczWCBC6+8RagYkrGYDqsVOpUcs5shGbPg5beCXDuzP4nxz2IlsoP9ZtTSaX741H791OIOjA==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.2.9.tgz",
+ "integrity": "sha512-ryRBChWZf1A5hOVONErJZosS25IdMweoMVFAUAcj91iC0ynoSA6YL2jmoE71jQchxEXEgkDeRkX9lR/GlqFGZQ==",
"dev": true,
"dependencies": {
"@types/npmlog": "^4.1.2",
- "chalk": "^4.0.0",
- "core-js": "^3.0.1",
+ "chalk": "^4.1.0",
+ "core-js": "^3.8.2",
"npmlog": "^4.1.2",
"pretty-hrtime": "^1.0.3"
}
@@ -3212,9 +3683,9 @@
}
},
"node_modules/@storybook/node-logger/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": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -3227,24 +3698,6 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@storybook/node-logger/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==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@storybook/node-logger/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==",
- "dev": true
- },
"node_modules/@storybook/node-logger/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -3267,32 +3720,34 @@
}
},
"node_modules/@storybook/react": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.1.21.tgz",
- "integrity": "sha512-j3gq/ssWxRCCH5iCHbP3ihXSGS7lVWh1HpmBmGbbhHGHgdmSPsRjwDXiQGE81EmE7bzbC8NECBhU3zHJ6h1TvA==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.2.9.tgz",
+ "integrity": "sha512-glvw+o/Vek2oapYIXCYDK6gm3cuSnx0XdOpiJVcXk3KLb8JfLbdzGYYp6dcWUbyOBqGcGFRpXIgMmkcwgn+fvQ==",
"dev": true,
"dependencies": {
"@babel/preset-flow": "^7.12.1",
- "@babel/preset-react": "^7.12.1",
- "@pmmmwh/react-refresh-webpack-plugin": "^0.4.2",
- "@storybook/addons": "6.1.21",
- "@storybook/core": "6.1.21",
- "@storybook/node-logger": "6.1.21",
+ "@babel/preset-react": "^7.12.10",
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
+ "@storybook/addons": "6.2.9",
+ "@storybook/core": "6.2.9",
+ "@storybook/core-common": "6.2.9",
+ "@storybook/node-logger": "6.2.9",
"@storybook/semver": "^7.3.2",
- "@types/webpack-env": "^1.15.3",
+ "@types/webpack-env": "^1.16.0",
"babel-plugin-add-react-displayname": "^0.0.5",
"babel-plugin-named-asset-import": "^0.3.1",
"babel-plugin-react-docgen": "^4.2.1",
- "core-js": "^3.0.1",
- "global": "^4.3.2",
- "lodash": "^4.17.15",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
"prop-types": "^15.7.2",
"react-dev-utils": "^11.0.3",
"react-docgen-typescript-plugin": "^0.6.2",
"react-refresh": "^0.8.3",
+ "read-pkg-up": "^7.0.1",
"regenerator-runtime": "^0.13.7",
"ts-dedent": "^2.0.0",
- "webpack": "^4.44.2"
+ "webpack": "4"
},
"bin": {
"build-storybook": "bin/build.js",
@@ -3300,26 +3755,38 @@
"storybook-server": "bin/index.js"
},
"engines": {
- "node": ">=8.0.0"
+ "node": ">=10.13.0"
},
"peerDependencies": {
"@babel/core": "^7.11.5",
"react": "^16.8.0 || ^17.0.0",
"react-dom": "^16.8.0 || ^17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/@storybook/router": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.1.21.tgz",
- "integrity": "sha512-m75WvUhoCBWDVekICAdbkidji/w5hCjHo+M8L13UghpwXWEnyr4/QqvkOb/PcSC8aZzxeMqSCpRQ1o6LWULneg==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.2.9.tgz",
+ "integrity": "sha512-7Bn1OFoItCl8whXRT8N1qp1Lky7kzXJ3aslWp5E8HcM8rxh4OYXfbaeiyJEJxBTGC5zxgY+tAEXHFjsAviFROg==",
"dev": true,
"dependencies": {
- "@reach/router": "^1.3.3",
+ "@reach/router": "^1.3.4",
+ "@storybook/client-logger": "6.2.9",
"@types/reach__router": "^1.3.7",
- "core-js": "^3.0.1",
- "global": "^4.3.2",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
"memoizerific": "^1.11.3",
- "qs": "^6.6.0"
+ "qs": "^6.10.0",
+ "ts-dedent": "^2.0.0"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0",
@@ -3342,22 +3809,59 @@
"node": ">=10"
}
},
+ "node_modules/@storybook/semver/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/@storybook/semver/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/@storybook/semver/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/@storybook/theming": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.1.21.tgz",
- "integrity": "sha512-yq7+/mpdljRdSRJYw/In/9tnDGXIUDe//mhyMftFfrB2mq6zi1yAZpowCerWhiDE2ipGkrfzIYx/Sn7bcaXgqg==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.2.9.tgz",
+ "integrity": "sha512-183oJW7AD7Fhqg5NT4ct3GJntwteAb9jZnQ6yhf9JSdY+fk8OhxRbPf7ov0au2gYACcGrWDd9K5pYQsvWlP5gA==",
"dev": true,
"dependencies": {
"@emotion/core": "^10.1.1",
"@emotion/is-prop-valid": "^0.8.6",
- "@emotion/styled": "^10.0.23",
- "@storybook/client-logger": "6.1.21",
- "core-js": "^3.0.1",
+ "@emotion/styled": "^10.0.27",
+ "@storybook/client-logger": "6.2.9",
+ "core-js": "^3.8.2",
"deep-object-diff": "^1.1.0",
- "emotion-theming": "^10.0.19",
- "global": "^4.3.2",
+ "emotion-theming": "^10.0.27",
+ "global": "^4.4.0",
"memoizerific": "^1.11.3",
- "polished": "^3.4.4",
+ "polished": "^4.0.5",
"resolve-from": "^5.0.0",
"ts-dedent": "^2.0.0"
},
@@ -3367,47 +3871,62 @@
}
},
"node_modules/@storybook/ui": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.1.21.tgz",
- "integrity": "sha512-2nRb5egnSBKbosuR7g5PsuM4XnRLXZUf7TBjwT6eRlomnE2wrWM5DtTLpFeUpDob0SI5hPlOV1xCpPz3XmeyyA==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.2.9.tgz",
+ "integrity": "sha512-jq2xmw3reIqik/6ibUSbNKGR+Xvr9wkAEwexiOl+5WQ5BeYJpw4dmDmsFQf+SQuWaSEUUPolbzkakRQM778Kdg==",
"dev": true,
"dependencies": {
"@emotion/core": "^10.1.1",
- "@storybook/addons": "6.1.21",
- "@storybook/api": "6.1.21",
- "@storybook/channels": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/components": "6.1.21",
- "@storybook/core-events": "6.1.21",
- "@storybook/router": "6.1.21",
+ "@storybook/addons": "6.2.9",
+ "@storybook/api": "6.2.9",
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/components": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "@storybook/router": "6.2.9",
"@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.1.21",
- "@types/markdown-to-jsx": "^6.11.0",
- "copy-to-clipboard": "^3.0.8",
- "core-js": "^3.0.1",
- "core-js-pure": "^3.0.1",
- "downshift": "^6.0.6",
- "emotion-theming": "^10.0.19",
+ "@storybook/theming": "6.2.9",
+ "@types/markdown-to-jsx": "^6.11.3",
+ "copy-to-clipboard": "^3.3.1",
+ "core-js": "^3.8.2",
+ "core-js-pure": "^3.8.2",
+ "downshift": "^6.0.15",
+ "emotion-theming": "^10.0.27",
"fuse.js": "^3.6.1",
- "global": "^4.3.2",
- "lodash": "^4.17.15",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
"markdown-to-jsx": "^6.11.4",
"memoizerific": "^1.11.3",
- "polished": "^3.4.4",
- "qs": "^6.6.0",
- "react-draggable": "^4.0.3",
- "react-helmet-async": "^1.0.2",
- "react-hotkeys": "2.0.0",
- "react-sizeme": "^2.6.7",
+ "polished": "^4.0.5",
+ "qs": "^6.10.0",
+ "react-draggable": "^4.4.3",
+ "react-helmet-async": "^1.0.7",
+ "react-sizeme": "^3.0.1",
"regenerator-runtime": "^0.13.7",
"resolve-from": "^5.0.0",
- "store2": "^2.7.1"
+ "store2": "^2.12.0"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0",
"react-dom": "^16.8.0 || ^17.0.0"
}
},
+ "node_modules/@storybook/ui/node_modules/markdown-to-jsx": {
+ "version": "6.11.4",
+ "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz",
+ "integrity": "sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==",
+ "dev": true,
+ "dependencies": {
+ "prop-types": "^15.6.2",
+ "unquote": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "peerDependencies": {
+ "react": ">= 0.14.0"
+ }
+ },
"node_modules/@svgr/babel-plugin-add-jsx-attribute": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz",
@@ -3513,18 +4032,6 @@
"node": ">=8"
}
},
- "node_modules/@svgr/core/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=",
- "dev": true,
- "dependencies": {
- "caller-callsite": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/@svgr/core/node_modules/cosmiconfig": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
@@ -3616,18 +4123,6 @@
"node": ">=8"
}
},
- "node_modules/@svgr/plugin-svgo/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=",
- "dev": true,
- "dependencies": {
- "caller-callsite": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/@svgr/plugin-svgo/node_modules/cosmiconfig": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
@@ -3750,6 +4245,21 @@
"integrity": "sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw==",
"dev": true
},
+ "node_modules/@types/color-convert": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz",
+ "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/color-name": "*"
+ }
+ },
+ "node_modules/@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
+ "dev": true
+ },
"node_modules/@types/component-emitter": {
"version": "1.2.10",
"resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz",
@@ -3859,27 +4369,33 @@
}
},
"node_modules/@types/minimatch": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
- "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==",
"dev": true
},
"node_modules/@types/node": {
- "version": "14.14.35",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.35.tgz",
- "integrity": "sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==",
+ "version": "14.14.43",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.43.tgz",
+ "integrity": "sha512-3pwDJjp1PWacPTpH0LcfhgjvurQvrZFBrC6xxjaUEZ7ifUtT32jtjPxEMMblpqd2Mvx+k8haqQJLQxolyGN/cQ==",
"dev": true
},
"node_modules/@types/node-fetch": {
- "version": "2.5.8",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.8.tgz",
- "integrity": "sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw==",
+ "version": "2.5.10",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz",
+ "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==",
"dev": true,
"dependencies": {
"@types/node": "*",
"form-data": "^3.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/npmlog": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.2.tgz",
@@ -3898,6 +4414,12 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
+ "node_modules/@types/pretty-hrtime": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.0.tgz",
+ "integrity": "sha512-xl+5r2rcrxdLViAYkkiLMYsoUs3qEyrAnHFyEzYysgRxdVp3WbhysxIvJIxZp9FvZ2CYezh0TaHZorivH+voOQ==",
+ "dev": true
+ },
"node_modules/@types/prop-types": {
"version": "15.7.3",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
@@ -3926,9 +4448,9 @@
}
},
"node_modules/@types/react": {
- "version": "17.0.3",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz",
- "integrity": "sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==",
+ "version": "17.0.4",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.4.tgz",
+ "integrity": "sha512-onz2BqScSFMoTRdJUZUDD/7xrusM8hBA2Fktk2qgaTYPCgPvWnDEgkrOs8hhPUf2jfcIXkJ5yK6VfYormJS3Jw==",
"dev": true,
"dependencies": {
"@types/prop-types": "*",
@@ -3936,40 +4458,21 @@
"csstype": "^3.0.2"
}
},
- "node_modules/@types/react-color": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.4.tgz",
- "integrity": "sha512-EswbYJDF1kkrx93/YU+BbBtb46CCtDMvTiGmcOa/c5PETnwTiSWoseJ1oSWeRl/4rUXkhME9bVURvvPg0W5YQw==",
- "dev": true,
- "dependencies": {
- "@types/react": "*",
- "@types/reactcss": "*"
- }
- },
"node_modules/@types/react-syntax-highlighter": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.4.tgz",
- "integrity": "sha512-9GfTo3a0PHwQeTVoqs0g5bS28KkSY48pp5659wA+Dp4MqceDEa8EHBqrllJvvtyusszyJhViUEap0FDvlk/9Zg==",
+ "version": "11.0.5",
+ "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz",
+ "integrity": "sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==",
"dev": true,
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/react/node_modules/csstype": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz",
- "integrity": "sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g==",
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
+ "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==",
"dev": true
},
- "node_modules/@types/reactcss": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.3.tgz",
- "integrity": "sha512-d2gQQ0IL6hXLnoRfVYZukQNWHuVsE75DzFTLPUuyyEhJS8G2VvlE+qfQQ91SJjaMqlURRCNIsX7Jcsw6cEuJlA==",
- "dev": true,
- "dependencies": {
- "@types/react": "*"
- }
- },
"node_modules/@types/scheduler": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz",
@@ -3989,9 +4492,9 @@
"dev": true
},
"node_modules/@types/tapable": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz",
- "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.7.tgz",
+ "integrity": "sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ==",
"dev": true
},
"node_modules/@types/uglify-js": {
@@ -4019,14 +4522,14 @@
"dev": true
},
"node_modules/@types/webpack": {
- "version": "4.41.26",
- "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.26.tgz",
- "integrity": "sha512-7ZyTfxjCRwexh+EJFwRUM+CDB2XvgHl4vfuqf1ZKrgGvcS5BrNvPQqJh3tsZ0P6h6Aa1qClVHaJZszLPzpqHeA==",
+ "version": "4.41.27",
+ "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.27.tgz",
+ "integrity": "sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA==",
"dev": true,
"dependencies": {
"@types/anymatch": "*",
"@types/node": "*",
- "@types/tapable": "*",
+ "@types/tapable": "^1",
"@types/uglify-js": "*",
"@types/webpack-sources": "*",
"source-map": "^0.6.0"
@@ -4073,6 +4576,34 @@
"integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==",
"dev": true
},
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "2.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz",
+ "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/experimental-utils": "2.34.0",
+ "functional-red-black-tree": "^1.0.1",
+ "regexpp": "^3.0.0",
+ "tsutils": "^3.17.1"
+ },
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^2.0.0",
+ "eslint": "^5.0.0 || ^6.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@typescript-eslint/experimental-utils": {
"version": "2.34.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz",
@@ -4095,17 +4626,31 @@
"eslint": "*"
}
},
- "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "node_modules/@typescript-eslint/parser": {
+ "version": "2.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz",
+ "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==",
"dev": true,
"dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
+ "@types/eslint-visitor-keys": "^1.0.0",
+ "@typescript-eslint/experimental-utils": "2.34.0",
+ "@typescript-eslint/typescript-estree": "2.34.0",
+ "eslint-visitor-keys": "^1.1.0"
},
"engines": {
- "node": ">=8.0.0"
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^5.0.0 || ^6.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/@typescript-eslint/typescript-estree": {
@@ -4375,10 +4920,9 @@
}
},
"node_modules/acorn": {
- "version": "5.7.4",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
- "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
- "dev": true,
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"bin": {
"acorn": "bin/acorn"
},
@@ -4409,26 +4953,12 @@
}
},
"node_modules/acorn-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
- "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
+ "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
"dev": true,
- "peer": true,
- "dependencies": {
- "acorn": "^3.0.4"
- }
- },
- "node_modules/acorn-jsx/node_modules/acorn": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
- "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
- "dev": true,
- "peer": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
"node_modules/acorn-node": {
@@ -4441,17 +4971,6 @@
"xtend": "^4.0.2"
}
},
- "node_modules/acorn-node/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/acorn-node/node_modules/acorn-walk": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
@@ -4552,16 +5071,19 @@
}
},
"node_modules/ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
- "peer": true,
"dependencies": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
+ "fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ajv-errors": {
@@ -4574,22 +5096,14 @@
}
},
"node_modules/ajv-keywords": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
- "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
- "peer": true,
"peerDependencies": {
- "ajv": "^5.0.0"
+ "ajv": "^6.9.1"
}
},
- "node_modules/ajv/node_modules/fast-deep-equal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
- "dev": true,
- "peer": true
- },
"node_modules/alphanum-sort": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
@@ -4841,12 +5355,12 @@
}
},
"node_modules/ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
"dependencies": {
- "type-fest": "^0.11.0"
+ "type-fest": "^0.21.3"
},
"engines": {
"node": ">=8"
@@ -4856,12 +5370,12 @@
}
},
"node_modules/ansi-escapes/node_modules/type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
+ "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==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -5019,6 +5533,19 @@
"node": ">=4"
}
},
+ "node_modules/ansi-styles/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/ansi-styles/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/ansi-to-html": {
"version": "0.6.14",
"resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz",
@@ -5127,15 +5654,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/anymatch/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/anymatch/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -5194,6 +5712,30 @@
"readable-stream": "^2.0.6"
}
},
+ "node_modules/are-we-there-yet/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/are-we-there-yet/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -5479,9 +6021,9 @@
"dev": true
},
"node_modules/ast-types/node_modules/tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
"dev": true
},
"node_modules/astral-regex": {
@@ -5494,9 +6036,9 @@
}
},
"node_modules/async": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
- "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
+ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
"dev": true
},
"node_modules/async-each": {
@@ -5569,11 +6111,35 @@
"browserslist": "cli.js"
}
},
- "node_modules/aws-sdk": {
- "version": "2.870.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.870.0.tgz",
- "integrity": "sha512-pbNO+RuEx45aaEZind0Tl9NADxncLJf0mRAwof0szyYMB+FZm165yz7FCxFLumU4R9qw8vOG5YFACBaNoQkJdg==",
+ "node_modules/autoprefixer/node_modules/postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
"dev": true,
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/autoprefixer/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/aws-sdk": {
+ "version": "2.899.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.899.0.tgz",
+ "integrity": "sha512-k8jSANDQGvTyyj1f/7Hj4SWaV61/gjj/BopRmavAr6n1ayjXtUeVrV8G29+ABD3V82pHXDqLq47bqNmZ9m86xQ==",
+ "dev": true,
+ "hasInstallScript": true,
"dependencies": {
"buffer": "4.9.2",
"events": "1.1.1",
@@ -5605,9 +6171,9 @@
"dev": true
},
"node_modules/axe-core": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.3.tgz",
- "integrity": "sha512-vwPpH4Aj4122EW38mxO/fxhGKtwWTMLDIJfZ1He0Edbtjcfna/R3YB67yVhezUMzqc3Jr3+Ii50KRntlENL4xQ==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.0.tgz",
+ "integrity": "sha512-1uIESzroqpaTzt9uX48HO+6gfnKu3RwvWdCcWSrX4csMInJfCo1yvKPNXCwXFRpJqRW25tiASb6No0YH57PXqg==",
"dev": true,
"engines": {
"node": ">=4"
@@ -5630,15 +6196,6 @@
"js-tokens": "^3.0.2"
}
},
- "node_modules/babel-code-frame/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/babel-code-frame/node_modules/ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
@@ -5670,18 +6227,6 @@
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
},
- "node_modules/babel-code-frame/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=",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/babel-code-frame/node_modules/supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
@@ -5691,81 +6236,6 @@
"node": ">=0.8.0"
}
},
- "node_modules/babel-core": {
- "version": "6.26.3",
- "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
- "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "babel-code-frame": "^6.26.0",
- "babel-generator": "^6.26.0",
- "babel-helpers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-register": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "convert-source-map": "^1.5.1",
- "debug": "^2.6.9",
- "json5": "^0.5.1",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.4",
- "path-is-absolute": "^1.0.1",
- "private": "^0.1.8",
- "slash": "^1.0.0",
- "source-map": "^0.5.7"
- }
- },
- "node_modules/babel-core/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/babel-core/node_modules/json5": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
- "dev": true,
- "peer": true,
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/babel-core/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true,
- "peer": true
- },
- "node_modules/babel-core/node_modules/slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/babel-core/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/babel-eslint": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
@@ -5799,96 +6269,6 @@
"node": ">=4"
}
},
- "node_modules/babel-generator": {
- "version": "6.26.1",
- "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
- "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "detect-indent": "^4.0.0",
- "jsesc": "^1.3.0",
- "lodash": "^4.17.4",
- "source-map": "^0.5.7",
- "trim-right": "^1.0.1"
- }
- },
- "node_modules/babel-generator/node_modules/jsesc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
- "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
- "dev": true,
- "peer": true,
- "bin": {
- "jsesc": "bin/jsesc"
- }
- },
- "node_modules/babel-generator/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/babel-helper-evaluate-path": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz",
- "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==",
- "dev": true
- },
- "node_modules/babel-helper-flip-expressions": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz",
- "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=",
- "dev": true
- },
- "node_modules/babel-helper-is-nodes-equiv": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz",
- "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=",
- "dev": true
- },
- "node_modules/babel-helper-is-void-0": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz",
- "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=",
- "dev": true
- },
- "node_modules/babel-helper-mark-eval-scopes": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz",
- "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=",
- "dev": true
- },
- "node_modules/babel-helper-remove-or-void": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz",
- "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=",
- "dev": true
- },
- "node_modules/babel-helper-to-multiple-sequence-expressions": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz",
- "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==",
- "dev": true
- },
- "node_modules/babel-helpers": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
- "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
"node_modules/babel-jest": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz",
@@ -5946,6 +6326,31 @@
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
+ "node_modules/babel-loader/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/babel-loader/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/babel-loader/node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -5961,14 +6366,28 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/babel-messages": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
- "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "node_modules/babel-loader/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,
- "peer": true,
"dependencies": {
- "babel-runtime": "^6.22.0"
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-loader/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
"node_modules/babel-plugin-add-react-displayname": {
@@ -6004,6 +6423,33 @@
"source-map": "^0.5.7"
}
},
+ "node_modules/babel-plugin-emotion/node_modules/babel-plugin-macros": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
+ "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.7.2",
+ "cosmiconfig": "^6.0.0",
+ "resolve": "^1.12.0"
+ }
+ },
+ "node_modules/babel-plugin-emotion/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/babel-plugin-emotion/node_modules/source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -6065,6 +6511,15 @@
"node": ">=6"
}
},
+ "node_modules/babel-plugin-istanbul/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/babel-plugin-jest-hoist": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz",
@@ -6078,125 +6533,18 @@
}
},
"node_modules/babel-plugin-macros": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
- "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.0.1.tgz",
+ "integrity": "sha512-CKt4+Oy9k2wiN+hT1uZzOw7d8zb1anbQpf7KLwaaXRCi/4pzKdFKHf7v5mvoPmjkmxshh7eKZQuRop06r5WP4w==",
"dev": true,
"dependencies": {
- "@babel/runtime": "^7.7.2",
- "cosmiconfig": "^6.0.0",
- "resolve": "^1.12.0"
- }
- },
- "node_modules/babel-plugin-minify-builtins": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz",
- "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==",
- "dev": true
- },
- "node_modules/babel-plugin-minify-constant-folding": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz",
- "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==",
- "dev": true,
- "dependencies": {
- "babel-helper-evaluate-path": "^0.5.0"
- }
- },
- "node_modules/babel-plugin-minify-dead-code-elimination": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz",
- "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==",
- "dev": true,
- "dependencies": {
- "babel-helper-evaluate-path": "^0.5.0",
- "babel-helper-mark-eval-scopes": "^0.4.3",
- "babel-helper-remove-or-void": "^0.4.3",
- "lodash": "^4.17.11"
- }
- },
- "node_modules/babel-plugin-minify-flip-comparisons": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz",
- "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=",
- "dev": true,
- "dependencies": {
- "babel-helper-is-void-0": "^0.4.3"
- }
- },
- "node_modules/babel-plugin-minify-guarded-expressions": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz",
- "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==",
- "dev": true,
- "dependencies": {
- "babel-helper-evaluate-path": "^0.5.0",
- "babel-helper-flip-expressions": "^0.4.3"
- }
- },
- "node_modules/babel-plugin-minify-infinity": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz",
- "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=",
- "dev": true
- },
- "node_modules/babel-plugin-minify-mangle-names": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz",
- "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==",
- "dev": true,
- "dependencies": {
- "babel-helper-mark-eval-scopes": "^0.4.3"
- }
- },
- "node_modules/babel-plugin-minify-numeric-literals": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz",
- "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=",
- "dev": true
- },
- "node_modules/babel-plugin-minify-replace": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz",
- "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==",
- "dev": true
- },
- "node_modules/babel-plugin-minify-simplify": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz",
- "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==",
- "dev": true,
- "dependencies": {
- "babel-helper-evaluate-path": "^0.5.0",
- "babel-helper-flip-expressions": "^0.4.3",
- "babel-helper-is-nodes-equiv": "^0.0.1",
- "babel-helper-to-multiple-sequence-expressions": "^0.5.0"
- }
- },
- "node_modules/babel-plugin-minify-type-constructors": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz",
- "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=",
- "dev": true,
- "dependencies": {
- "babel-helper-is-void-0": "^0.4.3"
- }
- },
- "node_modules/babel-plugin-module-resolver": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz",
- "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "find-babel-config": "^1.1.0",
- "glob": "^7.1.2",
- "pkg-up": "^2.0.0",
- "reselect": "^3.0.1",
- "resolve": "^1.4.0"
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
},
"engines": {
- "node": ">= 6.0.0"
+ "node": ">=10",
+ "npm": ">=6"
}
},
"node_modules/babel-plugin-named-asset-import": {
@@ -6209,13 +6557,13 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz",
- "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz",
+ "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.13.0",
- "@babel/helper-define-polyfill-provider": "^0.1.5",
+ "@babel/compat-data": "^7.13.11",
+ "@babel/helper-define-polyfill-provider": "^0.2.0",
"semver": "^6.1.1"
},
"peerDependencies": {
@@ -6223,25 +6571,25 @@
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
- "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz",
+ "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.1.5",
- "core-js-compat": "^3.8.1"
+ "@babel/helper-define-polyfill-provider": "^0.2.0",
+ "core-js-compat": "^3.9.1"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz",
- "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz",
+ "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.1.5"
+ "@babel/helper-define-polyfill-provider": "^0.2.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
@@ -6281,30 +6629,6 @@
"integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
"dev": true
},
- "node_modules/babel-plugin-transform-inline-consecutive-adds": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz",
- "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=",
- "dev": true
- },
- "node_modules/babel-plugin-transform-member-expression-literals": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz",
- "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=",
- "dev": true
- },
- "node_modules/babel-plugin-transform-merge-sibling-variables": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz",
- "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=",
- "dev": true
- },
- "node_modules/babel-plugin-transform-minify-booleans": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz",
- "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=",
- "dev": true
- },
"node_modules/babel-plugin-transform-object-rest-spread": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
@@ -6315,60 +6639,12 @@
"babel-runtime": "^6.26.0"
}
},
- "node_modules/babel-plugin-transform-property-literals": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz",
- "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- }
- },
"node_modules/babel-plugin-transform-react-remove-prop-types": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz",
"integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==",
"dev": true
},
- "node_modules/babel-plugin-transform-regexp-constructors": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz",
- "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=",
- "dev": true
- },
- "node_modules/babel-plugin-transform-remove-console": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz",
- "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=",
- "dev": true
- },
- "node_modules/babel-plugin-transform-remove-debugger": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz",
- "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=",
- "dev": true
- },
- "node_modules/babel-plugin-transform-remove-undefined": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz",
- "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==",
- "dev": true,
- "dependencies": {
- "babel-helper-evaluate-path": "^0.5.0"
- }
- },
- "node_modules/babel-plugin-transform-simplify-comparison-operators": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz",
- "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=",
- "dev": true
- },
- "node_modules/babel-plugin-transform-undefined-to-void": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz",
- "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=",
- "dev": true
- },
"node_modules/babel-preset-jest": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz",
@@ -6385,37 +6661,6 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/babel-preset-minify": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz",
- "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==",
- "dev": true,
- "dependencies": {
- "babel-plugin-minify-builtins": "^0.5.0",
- "babel-plugin-minify-constant-folding": "^0.5.0",
- "babel-plugin-minify-dead-code-elimination": "^0.5.1",
- "babel-plugin-minify-flip-comparisons": "^0.4.3",
- "babel-plugin-minify-guarded-expressions": "^0.4.4",
- "babel-plugin-minify-infinity": "^0.4.3",
- "babel-plugin-minify-mangle-names": "^0.5.0",
- "babel-plugin-minify-numeric-literals": "^0.4.3",
- "babel-plugin-minify-replace": "^0.5.0",
- "babel-plugin-minify-simplify": "^0.5.1",
- "babel-plugin-minify-type-constructors": "^0.4.3",
- "babel-plugin-transform-inline-consecutive-adds": "^0.4.3",
- "babel-plugin-transform-member-expression-literals": "^6.9.4",
- "babel-plugin-transform-merge-sibling-variables": "^6.9.4",
- "babel-plugin-transform-minify-booleans": "^6.9.4",
- "babel-plugin-transform-property-literals": "^6.9.4",
- "babel-plugin-transform-regexp-constructors": "^0.4.3",
- "babel-plugin-transform-remove-console": "^6.9.4",
- "babel-plugin-transform-remove-debugger": "^6.9.4",
- "babel-plugin-transform-remove-undefined": "^0.5.0",
- "babel-plugin-transform-simplify-comparison-operators": "^6.9.4",
- "babel-plugin-transform-undefined-to-void": "^6.9.4",
- "lodash": "^4.17.11"
- }
- },
"node_modules/babel-preset-react-app": {
"version": "9.1.2",
"resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.1.2.tgz",
@@ -6671,6 +6916,33 @@
"regenerator-runtime": "^0.13.4"
}
},
+ "node_modules/babel-preset-react-app/node_modules/babel-plugin-macros": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
+ "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.7.2",
+ "cosmiconfig": "^6.0.0",
+ "resolve": "^1.12.0"
+ }
+ },
+ "node_modules/babel-preset-react-app/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/babel-preset-react-app/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -6689,51 +6961,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/babel-register": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
- "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "babel-core": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "home-or-tmp": "^2.0.0",
- "lodash": "^4.17.4",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.4.15"
- }
- },
- "node_modules/babel-register/node_modules/core-js": {
- "version": "2.6.12",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
- "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
- "deprecated": "core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.",
- "dev": true,
- "hasInstallScript": true,
- "peer": true
- },
- "node_modules/babel-register/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/babel-register/node_modules/source-map-support": {
- "version": "0.4.18",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
- "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "source-map": "^0.5.6"
- }
- },
"node_modules/babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
@@ -6747,7 +6974,7 @@
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
- "deprecated": "core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.",
+ "deprecated": "core-js@<3.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. Please, upgrade your dependencies to the actual version of core-js.",
"hasInstallScript": true
},
"node_modules/babel-runtime/node_modules/regenerator-runtime": {
@@ -6755,88 +6982,6 @@
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
},
- "node_modules/babel-template": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
- "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "babel-runtime": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "lodash": "^4.17.4"
- }
- },
- "node_modules/babel-traverse": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
- "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "babel-code-frame": "^6.26.0",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "debug": "^2.6.8",
- "globals": "^9.18.0",
- "invariant": "^2.2.2",
- "lodash": "^4.17.4"
- }
- },
- "node_modules/babel-traverse/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/babel-traverse/node_modules/globals": {
- "version": "9.18.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
- "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/babel-traverse/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true,
- "peer": true
- },
- "node_modules/babel-types": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
- "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "babel-runtime": "^6.26.0",
- "esutils": "^2.0.2",
- "lodash": "^4.17.4",
- "to-fast-properties": "^1.0.3"
- }
- },
- "node_modules/babel-types/node_modules/to-fast-properties": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
- "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/babylon": {
"version": "6.18.0",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
@@ -6852,9 +6997,9 @@
"integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
},
"node_modules/balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/base": {
"version": "0.11.2",
@@ -7005,6 +7150,35 @@
"node": ">= 6"
}
},
+ "node_modules/block-stream2/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/block-stream2/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/bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -7138,24 +7312,6 @@
"node": ">=8"
}
},
- "node_modules/boxen/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==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/boxen/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==",
- "dev": true
- },
"node_modules/boxen/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -7221,6 +7377,28 @@
"brfs": "bin/cmd.js"
}
},
+ "node_modules/brfs/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/brfs/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/brfs/node_modules/through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -7355,6 +7533,15 @@
}
]
},
+ "node_modules/browserify-sign/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/browserify-zlib": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
@@ -7365,15 +7552,15 @@
}
},
"node_modules/browserslist": {
- "version": "4.16.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
- "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
+ "version": "4.16.6",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
+ "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
"dependencies": {
- "caniuse-lite": "^1.0.30001181",
- "colorette": "^1.2.1",
- "electron-to-chromium": "^1.3.649",
+ "caniuse-lite": "^1.0.30001219",
+ "colorette": "^1.2.2",
+ "electron-to-chromium": "^1.3.723",
"escalade": "^3.1.1",
- "node-releases": "^1.1.70"
+ "node-releases": "^1.1.71"
},
"bin": {
"browserslist": "cli.js"
@@ -7548,26 +7735,15 @@
}
},
"node_modules/caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
"dev": true,
- "peer": true,
"dependencies": {
- "callsites": "^0.2.0"
+ "caller-callsite": "^2.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/caller-path/node_modules/callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
}
},
"node_modules/callsites": {
@@ -7619,9 +7795,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001204",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz",
- "integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ=="
+ "version": "1.0.30001221",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001221.tgz",
+ "integrity": "sha512-b9TOZfND3uGSLjMOrLh8XxSQ41x8mX+9MLJYDM4AAHLfaZHttrLNPrScWjVnBITRZbY5sPpCt7X85n7VSLZ+/g=="
},
"node_modules/capture-exit": {
"version": "2.0.0",
@@ -7756,9 +7932,9 @@
}
},
"node_modules/chokidar/node_modules/anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
@@ -7865,13 +8041,10 @@
"dev": true
},
"node_modules/chrome-trace-event": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
- "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
"dev": true,
- "dependencies": {
- "tslib": "^1.9.0"
- },
"engines": {
"node": ">=6.0"
}
@@ -7904,14 +8077,6 @@
"webpack": ">=4.0.1"
}
},
- "node_modules/circular-json": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
- "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
- "deprecated": "CircularJSON is in maintenance only, flatted is its successor.",
- "dev": true,
- "peer": true
- },
"node_modules/class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
@@ -7951,6 +8116,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/class-utils/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=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/class-utils/node_modules/is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
@@ -7963,6 +8140,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/class-utils/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=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/class-utils/node_modules/is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@@ -7977,7 +8166,7 @@
"node": ">=0.10.0"
}
},
- "node_modules/class-utils/node_modules/is-descriptor/node_modules/kind-of": {
+ "node_modules/class-utils/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==",
@@ -7987,9 +8176,9 @@
}
},
"node_modules/classnames": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
- "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
+ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
},
"node_modules/clean-css": {
"version": "4.2.3",
@@ -8127,27 +8316,17 @@
}
},
"node_modules/clone-deep": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-1.0.0.tgz",
- "integrity": "sha512-hmJRX8x1QOJVV+GUjOBzi6iauhPqc9hIF6xitWRBbiPZOBb6vGo/mDRIK9P74RTKSQK7AE8B0DDWY/vpRrPmQw==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
"dependencies": {
- "for-own": "^1.0.0",
"is-plain-object": "^2.0.4",
- "kind-of": "^5.0.0",
- "shallow-clone": "^1.0.0"
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/clone-deep/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">=6"
}
},
"node_modules/clsx": {
@@ -8192,9 +8371,9 @@
}
},
"node_modules/codemirror": {
- "version": "5.60.0",
- "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.60.0.tgz",
- "integrity": "sha512-AEL7LhFOlxPlCL8IdTcJDblJm8yrAGib7I+DErJPdZd4l6imx8IMgKK3RblVgBQqz3TZJR4oknQ03bz+uNjBYA=="
+ "version": "5.61.0",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.61.0.tgz",
+ "integrity": "sha512-D3wYH90tYY1BsKlUe0oNj2JAhQ9TepkD51auk3N7q+4uz7A/cgJ5JsWHreT0PqieW1QhOuqxQ2reCXV1YXzecg=="
},
"node_modules/collection-visit": {
"version": "1.0.0",
@@ -8219,17 +8398,20 @@
}
},
"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==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dependencies": {
- "color-name": "1.1.3"
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
}
},
"node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ "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/color-string": {
"version": "1.5.5",
@@ -8240,6 +8422,19 @@
"simple-swizzle": "^0.2.2"
}
},
+ "node_modules/color/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/color/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/colorette": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
@@ -8274,6 +8469,21 @@
"color-string": "^1.5.2"
}
},
+ "node_modules/colorspace/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/colorspace/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -8426,6 +8636,28 @@
"typedarray": "^0.0.6"
}
},
+ "node_modules/concat-stream/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/concat-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/confusing-browser-globals": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz",
@@ -8575,37 +8807,6 @@
"webpack": "^4.0.0 || ^5.0.0"
}
},
- "node_modules/copy-webpack-plugin/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"node_modules/copy-webpack-plugin/node_modules/schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -8621,9 +8822,9 @@
}
},
"node_modules/core-js": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.9.1.tgz",
- "integrity": "sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg==",
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.11.2.tgz",
+ "integrity": "sha512-3tfrrO1JpJSYGKnd9LKTBPqgUES/UYiCzMKeqwR1+jF16q4kD1BY2NvqkfuzXwQ6+CIWm55V9cjD7PQd+hijdw==",
"dev": true,
"hasInstallScript": true,
"funding": {
@@ -8632,12 +8833,12 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.1.tgz",
- "integrity": "sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA==",
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.2.tgz",
+ "integrity": "sha512-gYhNwu7AJjecNtRrIfyoBabQ3ZG+llfPmg9BifIX8yxIpDyfNLRM73zIjINSm6z3dMdI1nwNC9C7uiy4pIC6cw==",
"dev": true,
"dependencies": {
- "browserslist": "^4.16.3",
+ "browserslist": "^4.16.6",
"semver": "7.0.0"
},
"funding": {
@@ -8655,9 +8856,9 @@
}
},
"node_modules/core-js-pure": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.9.1.tgz",
- "integrity": "sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A==",
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.11.2.tgz",
+ "integrity": "sha512-DQxdEKm+zFsnON7ZGOgUAQXBt1UJJ01tOzN/HgQ7cNf0oEHW1tcBLfCQQd1q6otdLu5gAdvKYxKHAoXGwE/kiQ==",
"dev": true,
"hasInstallScript": true,
"funding": {
@@ -8671,19 +8872,19 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"node_modules/cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
+ "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
"dev": true,
"dependencies": {
"@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
+ "import-fresh": "^3.2.1",
"parse-json": "^5.0.0",
"path-type": "^4.0.0",
- "yaml": "^1.7.2"
+ "yaml": "^1.10.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
"node_modules/country-data": {
@@ -8841,15 +9042,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/cpy/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/cpy/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -8950,43 +9142,27 @@
}
},
"node_modules/cross-fetch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.2.tgz",
- "integrity": "sha512-+JhD65rDNqLbGmB3Gzs3HrEKC0aQnD+XA3SY6RjgkF88jV2q5cTc5+CwxlS3sdmLk98gpPt5CF9XRnPdlxZe6w==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz",
+ "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==",
"dependencies": {
"node-fetch": "2.6.1"
}
},
"node_modules/cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
- "peer": true,
"dependencies": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/cross-spawn/node_modules/lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "node_modules/cross-spawn/node_modules/yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
- "dev": true,
- "peer": true
- },
"node_modules/crypto-browserify": {
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
@@ -9045,45 +9221,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/css-blank-pseudo/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/css-blank-pseudo/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/css-blank-pseudo/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/css-color-names": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
@@ -9106,45 +9243,6 @@
"node": ">4"
}
},
- "node_modules/css-declaration-sorter/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/css-declaration-sorter/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/css-declaration-sorter/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/css-has-pseudo": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz",
@@ -9173,24 +9271,6 @@
"node": ">=4"
}
},
- "node_modules/css-has-pseudo/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/css-has-pseudo/node_modules/postcss-selector-parser": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
@@ -9205,27 +9285,6 @@
"node": ">=4"
}
},
- "node_modules/css-has-pseudo/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/css-has-pseudo/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/css-loader": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
@@ -9257,51 +9316,12 @@
"webpack": "^4.0.0 || ^5.0.0"
}
},
- "node_modules/css-loader/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/css-loader/node_modules/postcss-value-parser": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
- "node_modules/css-loader/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/css-loader/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/css-prefers-color-scheme": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz",
@@ -9317,45 +9337,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/css-prefers-color-scheme/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/css-prefers-color-scheme/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/css-prefers-color-scheme/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/css-select": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
@@ -9437,13 +9418,13 @@
}
},
"node_modules/cssnano": {
- "version": "4.1.10",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
- "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz",
+ "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==",
"dev": true,
"dependencies": {
"cosmiconfig": "^5.0.0",
- "cssnano-preset-default": "^4.0.7",
+ "cssnano-preset-default": "^4.0.8",
"is-resolvable": "^1.0.0",
"postcss": "^7.0.0"
},
@@ -9452,9 +9433,9 @@
}
},
"node_modules/cssnano-preset-default": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
- "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz",
+ "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==",
"dev": true,
"dependencies": {
"css-declaration-sorter": "^4.0.1",
@@ -9485,52 +9466,13 @@
"postcss-ordered-values": "^4.1.2",
"postcss-reduce-initial": "^4.0.3",
"postcss-reduce-transforms": "^4.0.2",
- "postcss-svgo": "^4.0.2",
+ "postcss-svgo": "^4.0.3",
"postcss-unique-selectors": "^4.0.1"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/cssnano-preset-default/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/cssnano-preset-default/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cssnano-preset-default/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/cssnano-util-get-arguments": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
@@ -9561,45 +9503,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/cssnano-util-raw-cache/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/cssnano-util-raw-cache/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cssnano-util-raw-cache/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/cssnano-util-same-parent": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
@@ -9609,18 +9512,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/cssnano/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=",
- "dev": true,
- "dependencies": {
- "caller-callsite": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/cssnano/node_modules/cosmiconfig": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
@@ -9662,24 +9553,6 @@
"node": ">=4"
}
},
- "node_modules/cssnano/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/cssnano/node_modules/resolve-from": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
@@ -9689,27 +9562,6 @@
"node": ">=4"
}
},
- "node_modules/cssnano/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cssnano/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/csso": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
@@ -9723,9 +9575,9 @@
}
},
"node_modules/csso/node_modules/css-tree": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz",
- "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
"dev": true,
"dependencies": {
"mdn-data": "2.0.14",
@@ -9766,9 +9618,9 @@
}
},
"node_modules/csstype": {
- "version": "2.6.16",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.16.tgz",
- "integrity": "sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q==",
+ "version": "2.6.17",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz",
+ "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==",
"dev": true
},
"node_modules/currency-symbol-map": {
@@ -9928,9 +9780,9 @@
}
},
"node_modules/date-fns": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.19.0.tgz",
- "integrity": "sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg==",
+ "version": "2.21.1",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.21.1.tgz",
+ "integrity": "sha512-m1WR0xGiC6j6jNFAyW4Nvh4WxAi4JF4w9jRJwSI8nBmNcyZXPcP9VUQG+6gHQXAmqaGEKDKhOqAtENDC941UkA==",
"engines": {
"node": ">=0.11"
},
@@ -10044,6 +9896,15 @@
"integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==",
"dev": true
},
+ "node_modules/deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/default-gateway": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
@@ -10221,19 +10082,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/detect-indent": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
- "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "repeating": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/detect-newline": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
@@ -10432,21 +10280,22 @@
}
},
"node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
"dev": true,
"dependencies": {
- "esutils": "^2.0.2"
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/dom-align": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz",
- "integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA=="
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.1.tgz",
+ "integrity": "sha512-CdTD9EdA5WviP8oO3n+okOm0Xt7dSuWxRTLcJiW0memwUr3Tvz66JDDCh9cb50IZFHXvBmLoyX454uJU/EVg+g=="
},
"node_modules/dom-converter": {
"version": "0.2.0",
@@ -10458,18 +10307,18 @@
}
},
"node_modules/dom-helpers": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz",
- "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
"dependencies": {
"@babel/runtime": "^7.8.7",
"csstype": "^3.0.2"
}
},
"node_modules/dom-helpers/node_modules/csstype": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz",
- "integrity": "sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g=="
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
+ "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw=="
},
"node_modules/dom-serializer": {
"version": "0.2.2",
@@ -10481,9 +10330,9 @@
}
},
"node_modules/dom-serializer/node_modules/domelementtype": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
- "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
"funding": [
{
"type": "github",
@@ -10576,9 +10425,9 @@
}
},
"node_modules/dot-case/node_modules/tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
"dev": true
},
"node_modules/dot-prop": {
@@ -10639,15 +10488,15 @@
}
},
"node_modules/downshift": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.1.tgz",
- "integrity": "sha512-ch8Sh/j7gVqQd7Kcv3A5TkGfldmxmlQrRPZJYWEhzh24+h7WA4vXssuhcGNJrD8YPJlZYQGHcaX8BNhS0IcOvg==",
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.3.tgz",
+ "integrity": "sha512-RA1MuaNcTbt0j+sVLhSs8R2oZbBXYAtdQP/V+uHhT3DoDteZzJPjlC+LQVm9T07Wpvo84QXaZtUCePLDTDwGXg==",
"dev": true,
"dependencies": {
- "@babel/runtime": "^7.12.5",
+ "@babel/runtime": "^7.13.10",
"compute-scroll-into-view": "^1.0.17",
"prop-types": "^15.7.2",
- "react-is": "^17.0.1"
+ "react-is": "^17.0.2"
},
"peerDependencies": {
"react": ">=16.12.0"
@@ -10667,6 +10516,28 @@
"readable-stream": "^2.0.2"
}
},
+ "node_modules/duplexer2/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/duplexer2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/duplexify": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
@@ -10679,6 +10550,30 @@
"stream-shift": "^1.0.0"
}
},
+ "node_modules/duplexify/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/duplexify/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@@ -10696,24 +10591,19 @@
"dev": true
},
"node_modules/ejs": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
- "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==",
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
+ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
"dev": true,
- "dependencies": {
- "jake": "^10.6.1"
- },
- "bin": {
- "ejs": "bin/cli.js"
- },
+ "hasInstallScript": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/electron-to-chromium": {
- "version": "1.3.698",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.698.tgz",
- "integrity": "sha512-VEXDzYblnlT+g8Q3gedwzgKOso1evkeJzV8lih7lV8mL8eAnGVnKyC3KsFT6S+R5PQO4ffdr1PI16/ElibY/kQ=="
+ "version": "1.3.726",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.726.tgz",
+ "integrity": "sha512-dw7WmrSu/JwtACiBzth8cuKf62NKL1xVJuNvyOg0jvruN/n4NLtGYoTzciQquCPNaS2eR+BT5GrxHbslfc/w1w=="
},
"node_modules/element-resize-detector": {
"version": "1.2.2",
@@ -10811,9 +10701,9 @@
}
},
"node_modules/engine.io-client": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.1.2.tgz",
- "integrity": "sha512-1mwvwKYMa0AaCy+sPgvJ/SnKyO5MJZ1HEeXfA3Rm/KHkHGiYD5bQVq8QzvIrkI01FuVtOdZC5lWdRw1BGXB2NQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.1.3.tgz",
+ "integrity": "sha512-C3JYYyvna0FvSKOWGWpo0/EQ6MayO8uEKam1oedLZRpxLego9Fk6K3UH/Phieu1xPHauM7YqAygJ+6SraVc0Qg==",
"dependencies": {
"base64-arraybuffer": "0.1.4",
"component-emitter": "~1.3.0",
@@ -10828,9 +10718,9 @@
}
},
"node_modules/engine.io-client/node_modules/ws": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
- "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
+ "version": "7.4.5",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz",
+ "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==",
"engines": {
"node": ">=8.3.0"
},
@@ -10885,6 +10775,30 @@
"node": ">=4.3.0 <5.0.0 || >=5.10"
}
},
+ "node_modules/enhanced-resolve/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/enhanced-resolve/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/entities": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
@@ -11111,56 +11025,57 @@
}
},
"node_modules/eslint": {
- "version": "4.19.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
- "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
+ "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
"dev": true,
- "peer": true,
"dependencies": {
- "ajv": "^5.3.0",
- "babel-code-frame": "^6.22.0",
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.10.0",
"chalk": "^2.1.0",
- "concat-stream": "^1.6.0",
- "cross-spawn": "^5.1.0",
- "debug": "^3.1.0",
- "doctrine": "^2.1.0",
- "eslint-scope": "^3.7.1",
- "eslint-visitor-keys": "^1.0.0",
- "espree": "^3.5.4",
- "esquery": "^1.0.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^1.4.3",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.1.2",
+ "esquery": "^1.0.1",
"esutils": "^2.0.2",
- "file-entry-cache": "^2.0.0",
+ "file-entry-cache": "^5.0.1",
"functional-red-black-tree": "^1.0.1",
- "glob": "^7.1.2",
- "globals": "^11.0.1",
- "ignore": "^3.3.3",
+ "glob-parent": "^5.0.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
- "inquirer": "^3.0.6",
- "is-resolvable": "^1.0.0",
- "js-yaml": "^3.9.1",
+ "inquirer": "^7.0.0",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.3.0",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.2",
+ "lodash": "^4.17.14",
+ "minimatch": "^3.0.4",
"mkdirp": "^0.5.1",
"natural-compare": "^1.4.0",
- "optionator": "^0.8.2",
- "path-is-inside": "^1.0.2",
- "pluralize": "^7.0.0",
+ "optionator": "^0.8.3",
"progress": "^2.0.0",
- "regexpp": "^1.0.1",
- "require-uncached": "^1.0.3",
- "semver": "^5.3.0",
- "strip-ansi": "^4.0.0",
- "strip-json-comments": "~2.0.1",
- "table": "4.0.2",
- "text-table": "~0.2.0"
+ "regexpp": "^2.0.1",
+ "semver": "^6.1.2",
+ "strip-ansi": "^5.2.0",
+ "strip-json-comments": "^3.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
},
"bin": {
"eslint": "bin/eslint.js"
},
"engines": {
- "node": ">=4"
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint-config-airbnb": {
@@ -11197,6 +11112,26 @@
"eslint-plugin-import": "^2.7.0"
}
},
+ "node_modules/eslint-config-react-app": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz",
+ "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==",
+ "dev": true,
+ "dependencies": {
+ "confusing-browser-globals": "^1.0.9"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "2.x",
+ "@typescript-eslint/parser": "2.x",
+ "babel-eslint": "10.x",
+ "eslint": "6.x",
+ "eslint-plugin-flowtype": "3.x || 4.x",
+ "eslint-plugin-import": "2.x",
+ "eslint-plugin-jsx-a11y": "6.x",
+ "eslint-plugin-react": "7.x",
+ "eslint-plugin-react-hooks": "1.x || 2.x"
+ }
+ },
"node_modules/eslint-import-resolver-babel-module": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-babel-module/-/eslint-import-resolver-babel-module-4.0.0.tgz",
@@ -11239,6 +11174,59 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
+ "node_modules/eslint-loader": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz",
+ "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==",
+ "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin",
+ "dev": true,
+ "dependencies": {
+ "fs-extra": "^8.1.0",
+ "loader-fs-cache": "^1.0.2",
+ "loader-utils": "^1.2.3",
+ "object-hash": "^2.0.1",
+ "schema-utils": "^2.6.1"
+ },
+ "engines": {
+ "node": ">= 8.9.0"
+ },
+ "peerDependencies": {
+ "eslint": "^5.0.0 || ^6.0.0",
+ "webpack": "^4.0.0 || ^5.0.0"
+ }
+ },
+ "node_modules/eslint-loader/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==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/eslint-loader/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/eslint-loader/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==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
"node_modules/eslint-module-utils": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
@@ -11325,6 +11313,15 @@
"node": ">=4"
}
},
+ "node_modules/eslint-module-utils/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/eslint-module-utils/node_modules/pkg-dir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
@@ -11337,6 +11334,21 @@
"node": ">=4"
}
},
+ "node_modules/eslint-plugin-flowtype": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz",
+ "integrity": "sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.15"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": ">=6.1.0"
+ }
+ },
"node_modules/eslint-plugin-import": {
"version": "2.22.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz",
@@ -11373,17 +11385,29 @@
"ms": "2.0.0"
}
},
- "node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "node_modules/eslint-plugin-import/node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"dependencies": {
- "esutils": "^2.0.2",
- "isarray": "^1.0.0"
+ "locate-path": "^2.0.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/eslint-plugin-import/node_modules/ms": {
@@ -11392,6 +11416,96 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
+ "node_modules/eslint-plugin-import/node_modules/p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-import/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "dependencies": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/eslint-plugin-jsx-a11y": {
"version": "6.4.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz",
@@ -11418,9 +11532,9 @@
}
},
"node_modules/eslint-plugin-react": {
- "version": "7.23.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz",
- "integrity": "sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz",
+ "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==",
"dev": true,
"dependencies": {
"array-includes": "^3.1.3",
@@ -11455,6 +11569,18 @@
"eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
}
},
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/eslint-plugin-react/node_modules/resolve": {
"version": "2.0.0-next.3",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz",
@@ -11475,17 +11601,16 @@
"dev": true
},
"node_modules/eslint-scope": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
- "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
- "peer": true,
"dependencies": {
- "esrecurse": "^4.1.0",
+ "esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
},
"engines": {
- "node": ">=4.0.0"
+ "node": ">=8.0.0"
}
},
"node_modules/eslint-utils": {
@@ -11512,196 +11637,180 @@
"node": ">=4"
}
},
- "node_modules/eslint/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/eslint/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==",
"dev": true,
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint/node_modules/chardet": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
- "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
- "dev": true,
- "peer": true
- },
- "node_modules/eslint/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=",
- "dev": true,
- "peer": true,
"dependencies": {
- "restore-cursor": "^2.0.0"
+ "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"
+ "node": ">=4.8"
}
},
- "node_modules/eslint/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,
- "peer": true
- },
- "node_modules/eslint/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint/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,
- "peer": true,
- "dependencies": {
- "chardet": "^0.4.0",
- "iconv-lite": "^0.4.17",
- "tmp": "^0.0.33"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/eslint/node_modules/figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "escape-string-regexp": "^1.0.5"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint/node_modules/inquirer": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
- "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ansi-escapes": "^3.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/eslint/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=",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint/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,
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint/node_modules/mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
- "dev": true,
- "peer": true
- },
- "node_modules/eslint/node_modules/onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "mimic-fn": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint/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=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint/node_modules/semver": {
+ "node_modules/eslint/node_modules/cross-spawn/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true,
- "peer": true,
"bin": {
"semver": "bin/semver"
}
},
- "node_modules/eslint/node_modules/string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "node_modules/eslint/node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
- "peer": true,
"dependencies": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
+ "esutils": "^2.0.2"
},
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/eslint/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/eslint/node_modules/globals": {
+ "version": "12.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
+ "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/eslint/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true,
"engines": {
"node": ">=4"
}
},
- "node_modules/espree": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
- "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "node_modules/eslint/node_modules/regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.5.0"
+ }
+ },
+ "node_modules/eslint/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=",
"dev": true,
- "peer": true,
"dependencies": {
- "acorn": "^5.5.0",
- "acorn-jsx": "^3.0.0"
+ "shebang-regex": "^1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/eslint/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint/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==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/eslint/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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/espree": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
+ "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "acorn-jsx": "^5.2.0",
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -11858,6 +11967,15 @@
"node": ">=4.8"
}
},
+ "node_modules/execa/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/execa/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -11867,6 +11985,39 @@
"semver": "bin/semver"
}
},
+ "node_modules/execa/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=",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
"node_modules/exenv": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",
@@ -11931,6 +12082,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/expand-brackets/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=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/expand-brackets/node_modules/is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
@@ -11943,6 +12106,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/expand-brackets/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=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/expand-brackets/node_modules/is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@@ -11957,7 +12132,7 @@
"node": ">=0.10.0"
}
},
- "node_modules/expand-brackets/node_modules/is-descriptor/node_modules/kind-of": {
+ "node_modules/expand-brackets/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==",
@@ -12159,17 +12334,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/falafel/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/falafel/node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
@@ -12317,9 +12481,9 @@
"integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ=="
},
"node_modules/fecha": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz",
- "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
+ "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==",
"dev": true
},
"node_modules/figgy-pudding": {
@@ -12344,17 +12508,15 @@
}
},
"node_modules/file-entry-cache": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
- "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
"dev": true,
- "peer": true,
"dependencies": {
- "flat-cache": "^1.2.1",
- "object-assign": "^4.0.1"
+ "flat-cache": "^2.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
}
},
"node_modules/file-loader": {
@@ -12377,37 +12539,6 @@
"webpack": "^4.0.0 || ^5.0.0"
}
},
- "node_modules/file-loader/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/file-loader/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/file-loader/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"node_modules/file-loader/node_modules/loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
@@ -12479,15 +12610,6 @@
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"dev": true
},
- "node_modules/filelist": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz",
- "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==",
- "dev": true,
- "dependencies": {
- "minimatch": "^3.0.4"
- }
- },
"node_modules/filesize": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz",
@@ -12545,30 +12667,6 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
- "node_modules/find-babel-config": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz",
- "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "json5": "^0.5.1",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/find-babel-config/node_modules/json5": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
- "dev": true,
- "peer": true,
- "bin": {
- "json5": "lib/cli.js"
- }
- },
"node_modules/find-cache-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
@@ -12620,6 +12718,15 @@
"node": ">=6"
}
},
+ "node_modules/find-cache-dir/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/find-cache-dir/node_modules/pkg-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
@@ -12639,25 +12746,19 @@
"dev": true
},
"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==",
+ "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": "^5.0.0",
+ "locate-path": "^6.0.0",
"path-exists": "^4.0.0"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-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": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/findup-sync": {
@@ -12713,15 +12814,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/findup-sync/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/findup-sync/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -12747,19 +12839,17 @@
}
},
"node_modules/flat-cache": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
- "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
"dev": true,
- "peer": true,
"dependencies": {
- "circular-json": "^0.3.1",
- "graceful-fs": "^4.1.2",
- "rimraf": "~2.6.2",
- "write": "^0.2.1"
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
}
},
"node_modules/flat-cache/node_modules/rimraf": {
@@ -12767,7 +12857,6 @@
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
- "peer": true,
"dependencies": {
"glob": "^7.1.3"
},
@@ -12809,6 +12898,30 @@
"readable-stream": "^2.3.6"
}
},
+ "node_modules/flush-write-stream/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/flush-write-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/flux": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz",
@@ -12828,9 +12941,9 @@
"dev": true
},
"node_modules/follow-redirects": {
- "version": "1.13.3",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz",
- "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==",
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.0.tgz",
+ "integrity": "sha512-0vRwd7RKQBTt+mgu87mtYeofLFZpTas2S9zY+jIeuLJMNvudIgF52nr19q40HOwH5RrhWIPuj9puybzSJiRrVg==",
"dev": true,
"funding": [
{
@@ -12857,9 +12970,9 @@
}
},
"node_modules/for-own": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
- "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
"dev": true,
"dependencies": {
"for-in": "^1.0.1"
@@ -12883,104 +12996,149 @@
}
},
"node_modules/fork-ts-checker-webpack-plugin": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
- "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
+ "version": "6.2.6",
+ "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.6.tgz",
+ "integrity": "sha512-f/oF2BFFPKEWQ3wgfq4bWALSDm7+f21shVONplo1xHKs1IdMfdmDa/aREgEurkIyrsyMFed42W7NVp4mh4DXzg==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.5.5",
- "chalk": "^2.4.1",
- "micromatch": "^3.1.10",
+ "@babel/code-frame": "^7.8.3",
+ "@types/json-schema": "^7.0.5",
+ "chalk": "^4.1.0",
+ "chokidar": "^3.4.2",
+ "cosmiconfig": "^6.0.0",
+ "deepmerge": "^4.2.2",
+ "fs-extra": "^9.0.0",
+ "glob": "^7.1.6",
+ "memfs": "^3.1.2",
"minimatch": "^3.0.4",
- "semver": "^5.6.0",
- "tapable": "^1.0.0",
- "worker-rpc": "^0.1.0"
+ "schema-utils": "2.7.0",
+ "semver": "^7.3.2",
+ "tapable": "^1.0.0"
},
"engines": {
- "node": ">=6.11.5",
+ "node": ">=10",
"yarn": ">=1.0.0"
}
},
- "node_modules/fork-ts-checker-webpack-plugin/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==",
+ "node_modules/fork-ts-checker-webpack-plugin/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==",
"dev": true,
"dependencies": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.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/fork-ts-checker-webpack-plugin/node_modules/extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"dependencies": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
+ "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/fork-ts-checker-webpack-plugin/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==",
+ "node_modules/fork-ts-checker-webpack-plugin/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": {
- "is-plain-object": "^2.0.4"
+ "@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": ">=0.10.0"
+ "node": ">=8"
}
},
- "node_modules/fork-ts-checker-webpack-plugin/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==",
+ "node_modules/fork-ts-checker-webpack-plugin/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==",
"dev": true,
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "node_modules/fork-ts-checker-webpack-plugin/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": {
- "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"
+ "yallist": "^4.0.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
+ }
+ },
+ "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
+ "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.4",
+ "ajv": "^6.12.2",
+ "ajv-keywords": "^3.4.1"
+ },
+ "engines": {
+ "node": ">= 8.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
+ "node_modules/fork-ts-checker-webpack-plugin/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==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fork-ts-checker-webpack-plugin/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/form-data": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
@@ -13044,6 +13202,30 @@
"readable-stream": "^2.0.0"
}
},
+ "node_modules/from2/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/from2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/fs-extra": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
@@ -13071,6 +13253,12 @@
"node": ">= 8"
}
},
+ "node_modules/fs-monkey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
+ "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
+ "dev": true
+ },
"node_modules/fs-readdir-recursive": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
@@ -13171,15 +13359,6 @@
"wide-align": "^1.1.0"
}
},
- "node_modules/gauge/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/gauge/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",
@@ -13206,18 +13385,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/gauge/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=",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -13426,13 +13593,16 @@
"node": ">=6"
}
},
- "node_modules/global-prefix/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==",
+ "node_modules/global-prefix/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
}
},
"node_modules/globals": {
@@ -13562,32 +13732,10 @@
"node": ">=6"
}
},
- "node_modules/har-validator/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/har-validator/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"node_modules/harmony-reflect": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz",
- "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz",
+ "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==",
"dev": true
},
"node_modules/has": {
@@ -13772,6 +13920,15 @@
}
]
},
+ "node_modules/hash-base/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/hash.js": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
@@ -13825,9 +13982,9 @@
"dev": true
},
"node_modules/highlight.js": {
- "version": "10.7.1",
- "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.1.tgz",
- "integrity": "sha512-S6G97tHGqJ/U8DsXcEdnACbirtbx58Bx9CzIVeYli8OuswCfYI/LsXH2EiGcoGio1KAC3x4mmUwulOllJ2ZyRA==",
+ "version": "10.7.2",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.2.tgz",
+ "integrity": "sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg==",
"engines": {
"node": "*"
}
@@ -13869,20 +14026,6 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
- "node_modules/home-or-tmp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
- "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/homedir-polyfill": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
@@ -13905,9 +14048,9 @@
}
},
"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": "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/hpack.js": {
@@ -13922,6 +14065,30 @@
"wbuf": "^1.1.0"
}
},
+ "node_modules/hpack.js/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/hpack.js/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/hsl-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
@@ -13934,12 +14101,6 @@
"integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
"dev": true
},
- "node_modules/html-comment-regex": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
- "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
- "dev": true
- },
"node_modules/html-encoding-sniffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
@@ -14024,9 +14185,9 @@
}
},
"node_modules/html-minifier-terser/node_modules/tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
"dev": true
},
"node_modules/html-minifier/node_modules/commander": {
@@ -14121,27 +14282,6 @@
"resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
"integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY="
},
- "node_modules/htmlparser2/node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
- },
- "node_modules/htmlparser2/node_modules/readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "node_modules/htmlparser2/node_modules/string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- },
"node_modules/http-deceiver": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
@@ -14243,15 +14383,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/http-proxy-middleware/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/http-proxy-middleware/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -14321,45 +14452,6 @@
"node": ">= 6"
}
},
- "node_modules/icss-utils/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/icss-utils/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/icss-utils/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/identity-obj-proxy": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz",
@@ -14516,6 +14608,15 @@
"node": ">=6"
}
},
+ "node_modules/import-local/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/import-local/node_modules/pkg-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
@@ -14549,7 +14650,8 @@
"node_modules/indexes-of": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
},
"node_modules/infer-owner": {
"version": "1.0.4",
@@ -14635,9 +14737,9 @@
}
},
"node_modules/inquirer/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": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -14650,24 +14752,6 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/inquirer/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==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/inquirer/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==",
- "dev": true
- },
"node_modules/inquirer/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -14790,15 +14874,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-accessor-descriptor/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-alphabetical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
@@ -14924,9 +14999,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.3.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz",
+ "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==",
"dependencies": {
"has": "^1.0.3"
},
@@ -14946,15 +15021,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-data-descriptor/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-date-object": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
@@ -14990,15 +15056,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-descriptor/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==",
- "dev": true,
- "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",
@@ -15009,9 +15066,9 @@
}
},
"node_modules/is-docker": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
- "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true,
"bin": {
"is-docker": "cli.js"
@@ -15041,19 +15098,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-finite": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
- "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"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",
@@ -15145,6 +15189,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "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=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
@@ -15277,18 +15333,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-svg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
- "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
- "dev": true,
- "dependencies": {
- "html-comment-regex": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/is-symbol": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
@@ -15466,24 +15510,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/jake": {
- "version": "10.8.2",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
- "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
- "dev": true,
- "dependencies": {
- "async": "0.9.x",
- "chalk": "^2.4.2",
- "filelist": "^1.0.1",
- "minimatch": "^3.0.4"
- },
- "bin": {
- "jake": "bin/cli.js"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/jest": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz",
@@ -15604,6 +15630,15 @@
"node": ">=6"
}
},
+ "node_modules/jest-cli/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/jest-cli/node_modules/string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -15738,15 +15773,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/jest-config/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/jest-config/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -16027,15 +16053,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/jest-haste-map/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/jest-haste-map/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -16172,15 +16189,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/jest-message-util/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/jest-message-util/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -16403,6 +16411,15 @@
"node": ">=6"
}
},
+ "node_modules/jest-runtime/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/jest-runtime/node_modules/string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -16726,6 +16743,18 @@
"xml-name-validator": "^3.0.0"
}
},
+ "node_modules/jsdom/node_modules/acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+ "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/jsdom/node_modules/sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
@@ -16762,28 +16791,6 @@
"jshint": "bin/jshint"
}
},
- "node_modules/jshint/node_modules/shelljs": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
- "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=",
- "bin": {
- "shjs": "bin/shjs"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/jshint/node_modules/strip-json-comments": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
- "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
- "bin": {
- "strip-json-comments": "cli.js"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
"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",
@@ -16803,11 +16810,10 @@
"dev": true
},
"node_modules/json-schema-traverse": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
- "dev": true,
- "peer": true
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
},
"node_modules/json-stable-stringify": {
"version": "1.0.1",
@@ -16924,13 +16930,10 @@
"dev": true
},
"node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "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,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
"engines": {
"node": ">=0.10.0"
}
@@ -16953,6 +16956,15 @@
"node": ">=6"
}
},
+ "node_modules/klona": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz",
+ "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/koalas": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/koalas/-/koalas-1.0.2.tgz",
@@ -17211,15 +17223,18 @@
}
},
"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==",
+ "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": "^4.1.0"
+ "p-locate": "^5.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lodash": {
@@ -17493,14 +17508,10 @@
}
},
"node_modules/markdown-to-jsx": {
- "version": "6.11.4",
- "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz",
- "integrity": "sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.2.tgz",
+ "integrity": "sha512-O8DMCl32V34RrD+ZHxcAPc2+kYytuDIoQYjY36RVdsLK7uHjgNVvFec4yv0X6LgB4YEZgSvK5QtFi5YVqEpoMA==",
"dev": true,
- "dependencies": {
- "prop-types": "^15.6.2",
- "unquote": "^1.1.0"
- },
"engines": {
"node": ">= 4"
},
@@ -17508,12 +17519,6 @@
"react": ">= 0.14.0"
}
},
- "node_modules/material-colors": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz",
- "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==",
- "dev": true
- },
"node_modules/math-expression-evaluator": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.3.7.tgz",
@@ -17557,6 +17562,18 @@
"node": ">= 0.6"
}
},
+ "node_modules/memfs": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz",
+ "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==",
+ "dev": true,
+ "dependencies": {
+ "fs-monkey": "1.0.3"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
"node_modules/memoizerific": {
"version": "1.11.3",
"resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz",
@@ -17576,6 +17593,30 @@
"readable-stream": "^2.0.1"
}
},
+ "node_modules/memory-fs/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/memory-fs/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/merge-deep": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz",
@@ -17606,13 +17647,13 @@
"node": ">=0.10.0"
}
},
- "node_modules/merge-deep/node_modules/for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "node_modules/merge-deep/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
- "for-in": "^1.0.1"
+ "is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
@@ -17716,16 +17757,16 @@
"dev": true
},
"node_modules/micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
"dev": true,
"dependencies": {
"braces": "^3.0.1",
- "picomatch": "^2.0.5"
+ "picomatch": "^2.2.3"
},
"engines": {
- "node": ">=8"
+ "node": ">=8.6"
}
},
"node_modules/micromatch/node_modules/braces": {
@@ -17805,21 +17846,21 @@
}
},
"node_modules/mime-db": {
- "version": "1.46.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
- "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
+ "version": "1.47.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
+ "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==",
"dev": true,
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
- "version": "2.1.29",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
- "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
+ "version": "2.1.30",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
+ "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
"dev": true,
"dependencies": {
- "mime-db": "1.46.0"
+ "mime-db": "1.47.0"
},
"engines": {
"node": ">= 0.6"
@@ -17870,37 +17911,6 @@
"webpack": "^4.4.0"
}
},
- "node_modules/mini-css-extract-plugin/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"node_modules/mini-css-extract-plugin/node_modules/schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -17966,12 +17976,6 @@
"node": ">= 4"
}
},
- "node_modules/minio/node_modules/async": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
- "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
- "dev": true
- },
"node_modules/minipass": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
@@ -18066,6 +18070,30 @@
"node": ">=4.0.0"
}
},
+ "node_modules/mississippi/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/mississippi/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/mississippi/node_modules/through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -18136,9 +18164,9 @@
}
},
"node_modules/mobx": {
- "version": "6.1.8",
- "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.1.8.tgz",
- "integrity": "sha512-U4yCvUeh6yKXRwFxm2lyJjXPVekOEar/R8ZKWAXem/3fthJqYflViawfjDAUh7lZEvbKqljC3NT/pSaUKpE+gg==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.3.0.tgz",
+ "integrity": "sha512-Aa1+VXsg4WxqJMTQfWoYuJi5UD10VZhiobSmcs5kcmI3BIT0aVtn7DysvCeDADCzl7dnbX+0BTHUj/v7gLlZpQ==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mobx"
@@ -18311,15 +18339,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/nanomatch/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/native-url": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/native-url/-/native-url-0.2.6.tgz",
@@ -18471,6 +18490,59 @@
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true
},
+ "node_modules/node-libs-browser/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/node-libs-browser/node_modules/readable-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/node-libs-browser/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/node-libs-browser/node_modules/string_decoder/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/node-libs-browser/node_modules/url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
@@ -18527,6 +18599,18 @@
"semver": "bin/semver"
}
},
+ "node_modules/node-notifier/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
"node_modules/node-releases": {
"version": "1.1.71",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
@@ -18585,19 +18669,6 @@
"node": ">=4"
}
},
- "node_modules/normalize-url/node_modules/query-string": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
- "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
- "dev": true,
- "dependencies": {
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/normalize.css": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz",
@@ -18615,6 +18686,15 @@
"node": ">=4"
}
},
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/npmlog": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
@@ -18746,6 +18826,18 @@
"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=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object-hash": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.1.1.tgz",
@@ -18755,9 +18847,9 @@
}
},
"node_modules/object-inspect": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
- "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==",
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz",
+ "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -19064,16 +19156,6 @@
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true
},
- "node_modules/os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
@@ -19183,15 +19265,33 @@
}
},
"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==",
+ "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": "^2.2.0"
+ "p-limit": "^3.0.2"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate/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/p-map": {
@@ -19265,6 +19365,30 @@
"readable-stream": "^2.1.5"
}
},
+ "node_modules/parallel-transform/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/parallel-transform/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/param-case": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
@@ -19399,9 +19523,9 @@
}
},
"node_modules/pascal-case/node_modules/tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
"dev": true
},
"node_modules/pascalcase": {
@@ -19426,12 +19550,12 @@
"dev": true
},
"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": {
@@ -19449,12 +19573,12 @@
"dev": true
},
"node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/path-parse": {
@@ -19478,9 +19602,9 @@
}
},
"node_modules/pbkdf2": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
- "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
"dev": true,
"dependencies": {
"create-hash": "^1.1.2",
@@ -19499,9 +19623,9 @@
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"node_modules/picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
+ "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==",
"dev": true,
"engines": {
"node": ">=8.6"
@@ -19553,15 +19677,15 @@
}
},
"node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
+ "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
"dev": true,
"dependencies": {
- "find-up": "^4.0.0"
+ "find-up": "^5.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
"node_modules/pkg-up": {
@@ -19634,12 +19758,11 @@
"node": ">=4"
}
},
- "node_modules/pluralize": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
- "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "node_modules/pkg-up/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=",
"dev": true,
- "peer": true,
"engines": {
"node": ">=4"
}
@@ -19672,12 +19795,12 @@
}
},
"node_modules/polished": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/polished/-/polished-3.7.1.tgz",
- "integrity": "sha512-/QgHrNGYwIA4mwxJ/7FSvalUJsm7KNfnXiScVSEG2Xa5qxDeBn4nmdjN2pW00mkM2Tts64ktc47U8F7Ed1BRAA==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.2.tgz",
+ "integrity": "sha512-jq4t3PJUpVRcveC53nnbEX35VyQI05x3tniwp26WFdm1dwaNUBHAi5awa/roBlwQxx1uRhwNSYeAi/aMbfiJCQ==",
"dev": true,
"dependencies": {
- "@babel/runtime": "^7.12.5"
+ "@babel/runtime": "^7.13.17"
},
"engines": {
"node": ">=10"
@@ -19735,33 +19858,9 @@
}
},
"node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-attribute-case-insensitive": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz",
- "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==",
- "dev": true,
- "dependencies": {
- "postcss": "^7.0.2",
- "postcss-selector-parser": "^6.0.2"
- }
- },
- "node_modules/postcss-attribute-case-insensitive/node_modules/postcss": {
"version": "7.0.35",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
"integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
"dependencies": {
"chalk": "^2.4.2",
"source-map": "^0.6.1",
@@ -19775,25 +19874,14 @@
"url": "https://opencollective.com/postcss/"
}
},
- "node_modules/postcss-attribute-case-insensitive/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-attribute-case-insensitive/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "node_modules/postcss-attribute-case-insensitive": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz",
+ "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==",
"dev": true,
"dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^6.0.2"
}
},
"node_modules/postcss-browser-comments": {
@@ -19811,45 +19899,6 @@
"browserslist": "^4"
}
},
- "node_modules/postcss-browser-comments/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-browser-comments/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-browser-comments/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-calc": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz",
@@ -19861,51 +19910,12 @@
"postcss-value-parser": "^4.0.2"
}
},
- "node_modules/postcss-calc/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/postcss-calc/node_modules/postcss-value-parser": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
- "node_modules/postcss-calc/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-calc/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-color-functional-notation": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz",
@@ -19919,45 +19929,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-color-functional-notation/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-color-functional-notation/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-color-functional-notation/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-color-gray": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz",
@@ -19972,45 +19943,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-color-gray/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-color-gray/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-color-gray/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-color-hex-alpha": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz",
@@ -20024,45 +19956,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-color-hex-alpha/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-color-hex-alpha/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-color-hex-alpha/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-color-mod-function": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz",
@@ -20077,45 +19970,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-color-mod-function/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-color-mod-function/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-color-mod-function/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-color-rebeccapurple": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz",
@@ -20129,45 +19983,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-color-rebeccapurple/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-color-rebeccapurple/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-color-rebeccapurple/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-colormin": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
@@ -20184,45 +19999,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-colormin/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-colormin/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-colormin/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-convert-values": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
@@ -20236,45 +20012,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-convert-values/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-convert-values/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-convert-values/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-custom-media": {
"version": "7.0.8",
"resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz",
@@ -20287,45 +20024,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-custom-media/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-custom-media/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-custom-media/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-custom-properties": {
"version": "8.0.11",
"resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz",
@@ -20339,45 +20037,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-custom-properties/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-custom-properties/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-custom-properties/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-custom-selectors": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz",
@@ -20403,24 +20062,6 @@
"node": ">=4"
}
},
- "node_modules/postcss-custom-selectors/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
@@ -20435,27 +20076,6 @@
"node": ">=4"
}
},
- "node_modules/postcss-custom-selectors/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-custom-selectors/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-dir-pseudo-class": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz",
@@ -20481,24 +20101,6 @@
"node": ">=4"
}
},
- "node_modules/postcss-dir-pseudo-class/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
@@ -20513,27 +20115,6 @@
"node": ">=4"
}
},
- "node_modules/postcss-dir-pseudo-class/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-dir-pseudo-class/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-discard-comments": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
@@ -20546,45 +20127,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-discard-comments/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-discard-comments/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-discard-comments/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-discard-duplicates": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
@@ -20597,45 +20139,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-discard-duplicates/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-discard-duplicates/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-discard-duplicates/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-discard-empty": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
@@ -20648,45 +20151,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-discard-empty/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-discard-empty/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-discard-empty/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-discard-overridden": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
@@ -20699,45 +20163,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-discard-overridden/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-discard-overridden/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-discard-overridden/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-double-position-gradients": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz",
@@ -20751,45 +20176,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-double-position-gradients/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-double-position-gradients/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-double-position-gradients/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-env-function": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz",
@@ -20803,45 +20189,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-env-function/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-env-function/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-env-function/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-flexbugs-fixes": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz",
@@ -20851,45 +20198,6 @@
"postcss": "^7.0.26"
}
},
- "node_modules/postcss-flexbugs-fixes/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-flexbugs-fixes/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-flexbugs-fixes/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-focus-visible": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz",
@@ -20902,45 +20210,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-focus-visible/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-focus-visible/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-focus-visible/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-focus-within": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz",
@@ -20953,45 +20222,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-focus-within/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-focus-within/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-focus-within/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-font-variant": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz",
@@ -21001,45 +20231,6 @@
"postcss": "^7.0.2"
}
},
- "node_modules/postcss-font-variant/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-font-variant/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-font-variant/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-functions": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz",
@@ -21051,6 +20242,27 @@
"postcss-value-parser": "^3.3.0"
}
},
+ "node_modules/postcss-functions/node_modules/postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/postcss-functions/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/postcss-gap-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz",
@@ -21063,45 +20275,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-gap-properties/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-gap-properties/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-gap-properties/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-image-set-function": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz",
@@ -21115,45 +20288,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-image-set-function/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-image-set-function/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-image-set-function/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-import": {
"version": "12.0.1",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz",
@@ -21169,94 +20303,15 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-import/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-import/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-import/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-initial": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz",
- "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz",
+ "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==",
"dev": true,
"dependencies": {
- "lodash.template": "^4.5.0",
"postcss": "^7.0.2"
}
},
- "node_modules/postcss-initial/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-initial/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-initial/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-inline-svg": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/postcss-inline-svg/-/postcss-inline-svg-3.1.1.tgz",
@@ -21294,6 +20349,20 @@
"readable-stream": "^3.1.1"
}
},
+ "node_modules/postcss-inline-svg/node_modules/postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/postcss-inline-svg/node_modules/readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@@ -21308,6 +20377,44 @@
"node": ">= 6"
}
},
+ "node_modules/postcss-inline-svg/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/postcss-inline-svg/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-inline-svg/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/postcss-js": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-2.0.3.tgz",
@@ -21317,42 +20424,6 @@
"postcss": "^7.0.18"
}
},
- "node_modules/postcss-js/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-js/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-js/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-lab-function": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz",
@@ -21367,45 +20438,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-lab-function/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-lab-function/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-lab-function/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-load-config": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz",
@@ -21423,18 +20455,6 @@
"url": "https://opencollective.com/postcss/"
}
},
- "node_modules/postcss-load-config/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=",
- "dev": true,
- "dependencies": {
- "caller-callsite": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/postcss-load-config/node_modules/cosmiconfig": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
@@ -21500,55 +20520,6 @@
"node": ">= 6"
}
},
- "node_modules/postcss-loader/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/postcss-loader/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/postcss-loader/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/postcss-loader/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/postcss-loader/node_modules/schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -21563,27 +20534,6 @@
"node": ">= 4"
}
},
- "node_modules/postcss-loader/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-loader/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-logical": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz",
@@ -21596,45 +20546,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-logical/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-logical/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-logical/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-media-minmax": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz",
@@ -21647,45 +20558,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-media-minmax/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-media-minmax/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-media-minmax/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-merge-longhand": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
@@ -21701,45 +20573,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-merge-longhand/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-merge-longhand/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-merge-longhand/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-merge-rules": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
@@ -21757,24 +20590,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-merge-rules/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
@@ -21789,27 +20604,6 @@
"node": ">=8"
}
},
- "node_modules/postcss-merge-rules/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-merge-rules/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-minify-font-values": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
@@ -21823,45 +20617,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-minify-font-values/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-minify-font-values/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-minify-font-values/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-minify-gradients": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
@@ -21877,45 +20632,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-minify-gradients/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-minify-gradients/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-minify-gradients/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-minify-params": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
@@ -21933,45 +20649,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-minify-params/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-minify-params/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-minify-params/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-minify-selectors": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
@@ -21987,24 +20664,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-minify-selectors/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
@@ -22019,27 +20678,6 @@
"node": ">=8"
}
},
- "node_modules/postcss-minify-selectors/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-minify-selectors/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-mixins": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/postcss-mixins/-/postcss-mixins-6.2.3.tgz",
@@ -22157,15 +20795,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/postcss-mixins/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/postcss-mixins/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -22202,24 +20831,6 @@
"node": ">=4"
}
},
- "node_modules/postcss-mixins/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/postcss-mixins/node_modules/postcss-simple-vars": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-5.0.2.tgz",
@@ -22238,27 +20849,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/postcss-mixins/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-mixins/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-modules-extract-imports": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
@@ -22271,45 +20861,6 @@
"node": ">= 6"
}
},
- "node_modules/postcss-modules-extract-imports/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-modules-extract-imports/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-modules-extract-imports/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-modules-local-by-default": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz",
@@ -22325,51 +20876,12 @@
"node": ">= 6"
}
},
- "node_modules/postcss-modules-local-by-default/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/postcss-modules-local-by-default/node_modules/postcss-value-parser": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
- "node_modules/postcss-modules-local-by-default/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-modules-local-by-default/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-modules-scope": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
@@ -22383,45 +20895,6 @@
"node": ">= 6"
}
},
- "node_modules/postcss-modules-scope/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-modules-scope/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-modules-scope/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-modules-values": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
@@ -22432,45 +20905,6 @@
"postcss": "^7.0.6"
}
},
- "node_modules/postcss-modules-values/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-modules-values/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-modules-values/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-nested": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz",
@@ -22480,42 +20914,6 @@
"postcss-selector-parser": "^6.0.2"
}
},
- "node_modules/postcss-nested/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-nested/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-nested/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-nesting": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-4.2.1.tgz",
@@ -22528,6 +20926,29 @@
"node": ">=4.0.0"
}
},
+ "node_modules/postcss-nesting/node_modules/postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/postcss-nesting/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/postcss-normalize": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz",
@@ -22556,45 +20977,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-normalize-charset/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-normalize-charset/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-normalize-charset/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-normalize-display-values": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
@@ -22609,45 +20991,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-normalize-display-values/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-normalize-display-values/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-normalize-display-values/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-normalize-positions": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
@@ -22663,45 +21006,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-normalize-positions/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-normalize-positions/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-normalize-positions/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-normalize-repeat-style": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
@@ -22717,45 +21021,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-normalize-repeat-style/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-normalize-repeat-style/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-normalize-repeat-style/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-normalize-string": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
@@ -22770,45 +21035,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-normalize-string/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-normalize-string/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-normalize-string/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-normalize-timing-functions": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
@@ -22823,45 +21049,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-normalize-timing-functions/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-normalize-timing-functions/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-normalize-timing-functions/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-normalize-unicode": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
@@ -22876,45 +21063,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-normalize-unicode/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-normalize-unicode/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-normalize-unicode/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-normalize-url": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
@@ -22939,45 +21087,6 @@
"node": ">=6"
}
},
- "node_modules/postcss-normalize-url/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-normalize-url/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-normalize-url/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-normalize-whitespace": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
@@ -22991,84 +21100,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-normalize-whitespace/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-normalize-whitespace/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-normalize-whitespace/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/postcss-normalize/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-normalize/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-normalize/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-ordered-values": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
@@ -23083,45 +21114,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-ordered-values/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-ordered-values/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-ordered-values/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-overflow-shorthand": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz",
@@ -23134,45 +21126,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-overflow-shorthand/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-overflow-shorthand/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-overflow-shorthand/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-page-break": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz",
@@ -23182,45 +21135,6 @@
"postcss": "^7.0.2"
}
},
- "node_modules/postcss-page-break/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-page-break/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-page-break/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-place": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz",
@@ -23234,45 +21148,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-place/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-place/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-place/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-preset-env": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz",
@@ -23343,24 +21218,6 @@
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
}
},
- "node_modules/postcss-preset-env/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/postcss-preset-env/node_modules/postcss-nesting": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz",
@@ -23379,27 +21236,6 @@
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
- "node_modules/postcss-preset-env/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-preset-env/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-pseudo-class-any-link": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz",
@@ -23425,24 +21261,6 @@
"node": ">=4"
}
},
- "node_modules/postcss-pseudo-class-any-link/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
@@ -23457,27 +21275,6 @@
"node": ">=4"
}
},
- "node_modules/postcss-pseudo-class-any-link/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-pseudo-class-any-link/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-reduce-initial": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
@@ -23493,45 +21290,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-reduce-initial/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-reduce-initial/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-reduce-initial/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-reduce-transforms": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
@@ -23547,45 +21305,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-reduce-transforms/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-reduce-transforms/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-reduce-transforms/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-replace-overflow-wrap": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz",
@@ -23595,45 +21314,6 @@
"postcss": "^7.0.2"
}
},
- "node_modules/postcss-replace-overflow-wrap/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-replace-overflow-wrap/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-replace-overflow-wrap/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-safe-parser": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz",
@@ -23646,45 +21326,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/postcss-safe-parser/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-safe-parser/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-safe-parser/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-selector-matches": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz",
@@ -23695,45 +21336,6 @@
"postcss": "^7.0.2"
}
},
- "node_modules/postcss-selector-matches/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-selector-matches/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-selector-matches/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-selector-not": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz",
@@ -23744,53 +21346,12 @@
"postcss": "^7.0.2"
}
},
- "node_modules/postcss-selector-not/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-selector-not/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-selector-not/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-selector-parser": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz",
- "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz",
+ "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==",
"dependencies": {
"cssesc": "^3.0.0",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1",
"util-deprecate": "^1.0.2"
},
"engines": {
@@ -23806,40 +21367,21 @@
"postcss": "^6.0.9"
}
},
- "node_modules/postcss-svgo": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
- "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+ "node_modules/postcss-simple-vars/node_modules/postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
"dev": true,
"dependencies": {
- "is-svg": "^3.0.0",
- "postcss": "^7.0.0",
- "postcss-value-parser": "^3.0.0",
- "svgo": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/postcss-svgo/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
+ "chalk": "^2.4.1",
"source-map": "^0.6.1",
- "supports-color": "^6.1.0"
+ "supports-color": "^5.4.0"
},
"engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
+ "node": ">=4.0.0"
}
},
- "node_modules/postcss-svgo/node_modules/source-map": {
+ "node_modules/postcss-simple-vars/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
@@ -23848,16 +21390,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/postcss-svgo/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "node_modules/postcss-svgo": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz",
+ "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==",
"dev": true,
"dependencies": {
- "has-flag": "^3.0.0"
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=6.9.0"
}
},
"node_modules/postcss-unique-selectors": {
@@ -23874,45 +21418,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/postcss-unique-selectors/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-unique-selectors/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unique-selectors/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/postcss-value-parser": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
@@ -23940,6 +21445,17 @@
"node": ">=0.10.0"
}
},
+ "node_modules/postcss/node_modules/supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -24017,16 +21533,6 @@
"clipboard": "^2.0.0"
}
},
- "node_modules/private": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
- "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -24184,20 +21690,6 @@
"node": ">=4.0.0"
}
},
- "node_modules/prompt-choices/node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/prompt-choices/node_modules/define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
@@ -24220,27 +21712,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/prompt-choices/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/prompt-choices/node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/prompt-confirm": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/prompt-confirm/-/prompt-confirm-2.0.4.tgz",
@@ -24272,6 +21743,21 @@
"node": ">=4.0.0"
}
},
+ "node_modules/prompt-question/node_modules/clone-deep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-1.0.0.tgz",
+ "integrity": "sha512-hmJRX8x1QOJVV+GUjOBzi6iauhPqc9hIF6xitWRBbiPZOBb6vGo/mDRIK9P74RTKSQK7AE8B0DDWY/vpRrPmQw==",
+ "dev": true,
+ "dependencies": {
+ "for-own": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^5.0.0",
+ "shallow-clone": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/prompt-question/node_modules/debug": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
@@ -24281,6 +21767,18 @@
"ms": "^2.1.1"
}
},
+ "node_modules/prompt-question/node_modules/for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "dependencies": {
+ "for-in": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/prompt-question/node_modules/kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
@@ -24290,10 +21788,24 @@
"node": ">=0.10.0"
}
},
+ "node_modules/prompt-question/node_modules/shallow-clone": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
+ "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.1",
+ "kind-of": "^5.0.0",
+ "mixin-object": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/prompts": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
- "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz",
+ "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==",
"dev": true,
"dependencies": {
"kleur": "^3.0.3",
@@ -24350,13 +21862,6 @@
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
"dev": true
},
- "node_modules/pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
- "dev": true,
- "peer": true
- },
"node_modules/psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
@@ -24511,6 +22016,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/querystring": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
@@ -24568,6 +22086,28 @@
"quote-stream": "bin/cmd.js"
}
},
+ "node_modules/quote-stream/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/quote-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/quote-stream/node_modules/through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -24668,37 +22208,6 @@
"webpack": "^4.0.0 || ^5.0.0"
}
},
- "node_modules/raw-loader/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/raw-loader/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/raw-loader/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"node_modules/raw-loader/node_modules/loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
@@ -24871,11 +22380,11 @@
}
},
"node_modules/react-circular-progressbar": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/react-circular-progressbar/-/react-circular-progressbar-2.0.3.tgz",
- "integrity": "sha512-YKN+xAShXA3gYihevbQZbavfiJxo83Dt1cUxqg/cltj4VVsRQpDr7Fg1mvjDG3x1KHGtd9NmYKvJ2mMrPwbKyw==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/react-circular-progressbar/-/react-circular-progressbar-2.0.4.tgz",
+ "integrity": "sha512-OfX0ThSxRYEVGaQSt0DlXfyl5w4DbXHsXetyeivmoQrh9xA9bzVPHNf8aAhOIiwiaxX2WYWpLDB3gcpsDJ9oww==",
"peerDependencies": {
- "react": "^0.14.0 || ^15.0.0 || ^16.0.0"
+ "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
}
},
"node_modules/react-codemirror2": {
@@ -24887,22 +22396,14 @@
"react": ">=15.5 <=16.x"
}
},
- "node_modules/react-color": {
- "version": "2.19.3",
- "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz",
- "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==",
+ "node_modules/react-colorful": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.1.4.tgz",
+ "integrity": "sha512-WOEpRNz8Oo2SEU4eYQ279jEKFSjpFPa9Vi2U/K0DGwP9wOQ8wYkJcNSd5Qbv1L8OFvyKDCbWekjftXaU5mbmtg==",
"dev": true,
- "dependencies": {
- "@icons/material": "^0.2.4",
- "lodash": "^4.17.15",
- "lodash-es": "^4.17.15",
- "material-colors": "^1.2.1",
- "prop-types": "^15.5.10",
- "reactcss": "^1.2.0",
- "tinycolor2": "^1.4.1"
- },
"peerDependencies": {
- "react": "*"
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
}
},
"node_modules/react-confirm": {
@@ -25044,18 +22545,17 @@
"url": "https://tidelift.com/funding/github/npm/browserslist"
}
},
- "node_modules/react-dev-utils/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/react-dev-utils/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==",
"dev": true,
"dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
},
"engines": {
- "node": ">= 8"
+ "node": ">=0.10.0"
}
},
"node_modules/react-dev-utils/node_modules/dir-glob": {
@@ -25079,6 +22579,51 @@
"node": ">=8"
}
},
+ "node_modules/react-dev-utils/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dev-utils/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/react-dev-utils/node_modules/fork-ts-checker-webpack-plugin": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
+ "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.5.5",
+ "chalk": "^2.4.1",
+ "micromatch": "^3.1.10",
+ "minimatch": "^3.0.4",
+ "semver": "^5.6.0",
+ "tapable": "^1.0.0",
+ "worker-rpc": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6.11.5",
+ "yarn": ">=1.0.0"
+ }
+ },
"node_modules/react-dev-utils/node_modules/globby": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
@@ -25108,6 +22653,18 @@
"node": ">= 4"
}
},
+ "node_modules/react-dev-utils/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==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/react-dev-utils/node_modules/loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
@@ -25123,35 +22680,49 @@
}
},
"node_modules/react-dev-utils/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/react-dev-utils/node_modules/micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "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/react-dev-utils/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/react-dev-utils/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,
"engines": {
"node": ">=8"
}
@@ -25180,25 +22751,60 @@
"node": ">=6"
}
},
- "node_modules/react-dev-utils/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/react-dev-utils/node_modules/pkg-up/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==",
"dev": true,
"dependencies": {
- "shebang-regex": "^3.0.0"
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
- "node_modules/react-dev-utils/node_modules/shebang-regex": {
+ "node_modules/react-dev-utils/node_modules/pkg-up/node_modules/p-locate": {
"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/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/react-dev-utils/node_modules/pkg-up/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=",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=4"
+ }
+ },
+ "node_modules/react-dev-utils/node_modules/prompts": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
+ "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
+ "dev": true,
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/react-dev-utils/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
}
},
"node_modules/react-dev-utils/node_modules/slash": {
@@ -25222,21 +22828,6 @@
"node": ">=8"
}
},
- "node_modules/react-dev-utils/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": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/react-dnd": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-2.6.0.tgz",
@@ -25289,9 +22880,9 @@
}
},
"node_modules/react-docgen-typescript": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-1.21.0.tgz",
- "integrity": "sha512-E4y/OcXwHukgiVafCGlxwoNHr4BDmM70Ww7oimL/QkMo5dmGALhceewe/xmVjdMxxI7E5syOGOc9/tbHL742rg==",
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-1.22.0.tgz",
+ "integrity": "sha512-MPLbF8vzRwAG3GcjdL+OHQlhgtWsLTXs+7uJiHfEeT3Ur7IsZaNYqRTLQ9sj2nB6M6jylcPCeCmH7qbszJmecg==",
"dev": true,
"peerDependencies": {
"typescript": ">= 3.x"
@@ -25314,9 +22905,9 @@
}
},
"node_modules/react-docgen-typescript-plugin/node_modules/tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
"dev": true
},
"node_modules/react-docgen/node_modules/commander": {
@@ -25414,18 +23005,6 @@
"react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0"
}
},
- "node_modules/react-hotkeys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/react-hotkeys/-/react-hotkeys-2.0.0.tgz",
- "integrity": "sha512-3n3OU8vLX/pfcJrR3xJ1zlww6KS1kEJt0Whxc4FiGV+MJrQ1mYSYI3qS/11d2MJDFm8IhOXMTFQirfu6AVOF6Q==",
- "dev": true,
- "dependencies": {
- "prop-types": "^15.6.1"
- },
- "peerDependencies": {
- "react": ">= 0.14.0"
- }
- },
"node_modules/react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -25532,9 +23111,9 @@
}
},
"node_modules/react-popper-tooltip/node_modules/react-popper": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.4.tgz",
- "integrity": "sha512-NacOu4zWupdQjVXq02XpTD3yFPSfg5a7fex0wa3uGKVkFK7UN6LvVxgcb+xYr56UCuWiNPMH20tntdVdJRwYew==",
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz",
+ "integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==",
"dev": true,
"dependencies": {
"react-fast-compare": "^3.0.1",
@@ -25777,61 +23356,6 @@
"node": ">= 6"
}
},
- "node_modules/react-scripts/node_modules/@typescript-eslint/eslint-plugin": {
- "version": "2.34.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz",
- "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/experimental-utils": "2.34.0",
- "functional-red-black-tree": "^1.0.1",
- "regexpp": "^3.0.0",
- "tsutils": "^3.17.1"
- },
- "engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^2.0.0",
- "eslint": "^5.0.0 || ^6.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/react-scripts/node_modules/@typescript-eslint/parser": {
- "version": "2.34.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz",
- "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==",
- "dev": true,
- "dependencies": {
- "@types/eslint-visitor-keys": "^1.0.0",
- "@typescript-eslint/experimental-utils": "2.34.0",
- "@typescript-eslint/typescript-estree": "2.34.0",
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^5.0.0 || ^6.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
"node_modules/react-scripts/node_modules/@webassemblyjs/ast": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
@@ -26009,9 +23533,9 @@
}
},
"node_modules/react-scripts/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
+ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -26020,40 +23544,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/react-scripts/node_modules/acorn-jsx": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
- "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/react-scripts/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/react-scripts/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
"node_modules/react-scripts/node_modules/aria-query": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz",
@@ -26141,18 +23631,6 @@
"node": ">= 8"
}
},
- "node_modules/react-scripts/node_modules/cacache/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
"node_modules/react-scripts/node_modules/case-sensitive-paths-webpack-plugin": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz",
@@ -26193,6 +23671,18 @@
"node": ">=6"
}
},
+ "node_modules/react-scripts/node_modules/cliui/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==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/react-scripts/node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -26200,28 +23690,17 @@
"dev": true
},
"node_modules/react-scripts/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==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
+ "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
"dev": true,
"dependencies": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
},
"engines": {
- "node": ">=4.8"
- }
- },
- "node_modules/react-scripts/node_modules/cross-spawn/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
+ "node": ">= 8"
}
},
"node_modules/react-scripts/node_modules/css-loader": {
@@ -26313,116 +23792,6 @@
"node": ">=8"
}
},
- "node_modules/react-scripts/node_modules/eslint": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
- "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "ajv": "^6.10.0",
- "chalk": "^2.1.0",
- "cross-spawn": "^6.0.5",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "eslint-scope": "^5.0.0",
- "eslint-utils": "^1.4.3",
- "eslint-visitor-keys": "^1.1.0",
- "espree": "^6.1.2",
- "esquery": "^1.0.1",
- "esutils": "^2.0.2",
- "file-entry-cache": "^5.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.0.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "inquirer": "^7.0.0",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.14",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.3",
- "progress": "^2.0.0",
- "regexpp": "^2.0.1",
- "semver": "^6.1.2",
- "strip-ansi": "^5.2.0",
- "strip-json-comments": "^3.0.1",
- "table": "^5.2.3",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/react-scripts/node_modules/eslint-config-react-app": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz",
- "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==",
- "dev": true,
- "dependencies": {
- "confusing-browser-globals": "^1.0.9"
- },
- "peerDependencies": {
- "@typescript-eslint/eslint-plugin": "2.x",
- "@typescript-eslint/parser": "2.x",
- "babel-eslint": "10.x",
- "eslint": "6.x",
- "eslint-plugin-flowtype": "3.x || 4.x",
- "eslint-plugin-import": "2.x",
- "eslint-plugin-jsx-a11y": "6.x",
- "eslint-plugin-react": "7.x",
- "eslint-plugin-react-hooks": "1.x || 2.x"
- }
- },
- "node_modules/react-scripts/node_modules/eslint-loader": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz",
- "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==",
- "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin",
- "dev": true,
- "dependencies": {
- "fs-extra": "^8.1.0",
- "loader-fs-cache": "^1.0.2",
- "loader-utils": "^1.2.3",
- "object-hash": "^2.0.1",
- "schema-utils": "^2.6.1"
- },
- "engines": {
- "node": ">= 8.9.0"
- },
- "peerDependencies": {
- "eslint": "^5.0.0 || ^6.0.0",
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/react-scripts/node_modules/eslint-plugin-flowtype": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz",
- "integrity": "sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.15"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": ">=6.1.0"
- }
- },
"node_modules/react-scripts/node_modules/eslint-plugin-import": {
"version": "2.20.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz",
@@ -26458,19 +23827,6 @@
"ms": "2.0.0"
}
},
- "node_modules/react-scripts/node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2",
- "isarray": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/react-scripts/node_modules/eslint-plugin-import/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -26526,6 +23882,18 @@
"eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
}
},
+ "node_modules/react-scripts/node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/react-scripts/node_modules/eslint-plugin-react/node_modules/resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -26540,63 +23908,16 @@
}
},
"node_modules/react-scripts/node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
"dev": true,
"dependencies": {
- "esrecurse": "^4.3.0",
+ "esrecurse": "^4.1.0",
"estraverse": "^4.1.1"
},
"engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/react-scripts/node_modules/eslint-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
- "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/react-scripts/node_modules/eslint/node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/react-scripts/node_modules/eslint/node_modules/regexpp": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
- "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
- "dev": true,
- "engines": {
- "node": ">=6.5.0"
- }
- },
- "node_modules/react-scripts/node_modules/espree": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
- "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
- "dev": true,
- "dependencies": {
- "acorn": "^7.1.1",
- "acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
+ "node": ">=4.0.0"
}
},
"node_modules/react-scripts/node_modules/extend-shallow": {
@@ -26629,40 +23950,6 @@
"node": ">=4.0.0"
}
},
- "node_modules/react-scripts/node_modules/fast-glob/node_modules/glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "dependencies": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- }
- },
- "node_modules/react-scripts/node_modules/fast-glob/node_modules/glob-parent/node_modules/is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-scripts/node_modules/file-entry-cache": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
- "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
- "dev": true,
- "dependencies": {
- "flat-cache": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/react-scripts/node_modules/file-loader": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz",
@@ -26688,18 +23975,17 @@
"node": ">= 0.4.0"
}
},
- "node_modules/react-scripts/node_modules/flat-cache": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
- "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "node_modules/react-scripts/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": {
- "flatted": "^2.0.0",
- "rimraf": "2.6.3",
- "write": "1.0.3"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/react-scripts/node_modules/fork-ts-checker-webpack-plugin": {
@@ -26760,33 +24046,6 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/react-scripts/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/react-scripts/node_modules/globals": {
- "version": "12.4.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.8.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/react-scripts/node_modules/globby": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz",
@@ -26805,12 +24064,6 @@
"node": ">=4"
}
},
- "node_modules/react-scripts/node_modules/globby/node_modules/ignore": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
- "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
- "dev": true
- },
"node_modules/react-scripts/node_modules/globby/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
@@ -26820,6 +24073,15 @@
"node": ">=4"
}
},
+ "node_modules/react-scripts/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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/react-scripts/node_modules/html-webpack-plugin": {
"version": "4.0.0-beta.11",
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz",
@@ -26841,15 +24103,6 @@
"webpack": "^4.0.0"
}
},
- "node_modules/react-scripts/node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/react-scripts/node_modules/immer": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz",
@@ -26880,6 +24133,18 @@
"node": ">=6.0.0"
}
},
+ "node_modules/react-scripts/node_modules/inquirer/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==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/react-scripts/node_modules/is-absolute-url": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
@@ -26932,33 +24197,6 @@
"node": ">= 8.3"
}
},
- "node_modules/react-scripts/node_modules/jest-worker/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==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-scripts/node_modules/jest-worker/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==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-scripts/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"node_modules/react-scripts/node_modules/jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
@@ -26981,26 +24219,16 @@
"node": ">=4.0"
}
},
- "node_modules/react-scripts/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/react-scripts/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/react-scripts/node_modules/make-dir": {
@@ -27087,15 +24315,24 @@
}
},
"node_modules/react-scripts/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": ">=8"
+ }
+ },
+ "node_modules/react-scripts/node_modules/p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/react-scripts/node_modules/path-type": {
@@ -27128,6 +24365,18 @@
"node": ">=6"
}
},
+ "node_modules/react-scripts/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/react-scripts/node_modules/pkg-up": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
@@ -27152,22 +24401,38 @@
"node": ">=6"
}
},
- "node_modules/react-scripts/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "node_modules/react-scripts/node_modules/pkg-up/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==",
"dev": true,
"dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
},
"engines": {
- "node": ">=6.0.0"
+ "node": ">=6"
+ }
+ },
+ "node_modules/react-scripts/node_modules/pkg-up/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==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/react-scripts/node_modules/pkg-up/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/react-scripts/node_modules/postcss-flexbugs-fixes": {
@@ -27185,15 +24450,6 @@
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
- "node_modules/react-scripts/node_modules/postcss/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/react-scripts/node_modules/punycode": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
@@ -27244,20 +24500,6 @@
"node": ">=8"
}
},
- "node_modules/react-scripts/node_modules/react-dev-utils/node_modules/cross-spawn": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
- "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/react-scripts/node_modules/react-dev-utils/node_modules/json5": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
@@ -27284,27 +24526,6 @@
"node": ">=4.0.0"
}
},
- "node_modules/react-scripts/node_modules/react-dev-utils/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,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-scripts/node_modules/react-dev-utils/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/react-scripts/node_modules/react-dev-utils/node_modules/strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -27317,31 +24538,110 @@
"node": ">=8"
}
},
- "node_modules/react-scripts/node_modules/react-dev-utils/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/react-scripts/node_modules/read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
"dev": true,
"dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
},
"engines": {
- "node": ">= 8"
+ "node": ">=4"
}
},
- "node_modules/react-scripts/node_modules/regexpp": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
- "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
+ "node_modules/react-scripts/node_modules/read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/react-scripts/node_modules/read-pkg-up/node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/react-scripts/node_modules/read-pkg-up/node_modules/locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/react-scripts/node_modules/read-pkg-up/node_modules/p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/react-scripts/node_modules/read-pkg-up/node_modules/p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/react-scripts/node_modules/read-pkg-up/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=",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=4"
+ }
+ },
+ "node_modules/react-scripts/node_modules/read-pkg/node_modules/path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/react-scripts/node_modules/read-pkg/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
}
},
"node_modules/react-scripts/node_modules/resolve": {
@@ -27356,27 +24656,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/react-scripts/node_modules/rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/react-scripts/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": ">=8"
- }
- },
"node_modules/react-scripts/node_modules/slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -27386,20 +24665,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/react-scripts/node_modules/slice-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
- "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.0",
- "astral-regex": "^1.0.0",
- "is-fullwidth-code-point": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/react-scripts/node_modules/sockjs": {
"version": "0.3.20",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz",
@@ -27468,69 +24733,16 @@
"node": ">= 8"
}
},
- "node_modules/react-scripts/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==",
+ "node_modules/react-scripts/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==",
"dev": true,
"dependencies": {
- "ansi-regex": "^4.1.0"
+ "has-flag": "^4.0.0"
},
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/react-scripts/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==",
- "dev": true,
"engines": {
"node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-scripts/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/react-scripts/node_modules/table": {
- "version": "5.4.6",
- "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
- "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.10.2",
- "lodash": "^4.17.14",
- "slice-ansi": "^2.1.0",
- "string-width": "^3.0.0"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/react-scripts/node_modules/table/node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
}
},
"node_modules/react-scripts/node_modules/terser-webpack-plugin": {
@@ -27747,15 +24959,6 @@
}
}
},
- "node_modules/react-scripts/node_modules/webpack-dev-server/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/react-scripts/node_modules/webpack-dev-server/node_modules/chokidar": {
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
@@ -27798,26 +25001,13 @@
"node": ">= 4.0"
}
},
- "node_modules/react-scripts/node_modules/webpack-dev-server/node_modules/glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "node_modules/react-scripts/node_modules/webpack-dev-server/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true,
- "dependencies": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- }
- },
- "node_modules/react-scripts/node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.0"
- },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
}
},
"node_modules/react-scripts/node_modules/webpack-dev-server/node_modules/schema-utils": {
@@ -27834,28 +25024,16 @@
"node": ">= 4"
}
},
- "node_modules/react-scripts/node_modules/webpack-dev-server/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/react-scripts/node_modules/webpack-dev-server/node_modules/supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"dev": true,
"dependencies": {
- "ansi-regex": "^2.0.0"
+ "has-flag": "^3.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-scripts/node_modules/webpack/node_modules/acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
+ "node": ">=6"
}
},
"node_modules/react-scripts/node_modules/webpack/node_modules/cacache": {
@@ -27881,19 +25059,6 @@
"y18n": "^4.0.0"
}
},
- "node_modules/react-scripts/node_modules/webpack/node_modules/eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
"node_modules/react-scripts/node_modules/webpack/node_modules/schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -27918,9 +25083,9 @@
}
},
"node_modules/react-scripts/node_modules/webpack/node_modules/ssri": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
- "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
+ "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
"dev": true,
"dependencies": {
"figgy-pudding": "^3.5.1"
@@ -27989,16 +25154,16 @@
"node": ">=6"
}
},
- "node_modules/react-scripts/node_modules/write": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
- "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+ "node_modules/react-scripts/node_modules/wrap-ansi/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==",
"dev": true,
"dependencies": {
- "mkdirp": "^0.5.1"
+ "ansi-regex": "^4.1.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=6"
}
},
"node_modules/react-scripts/node_modules/ws": {
@@ -28050,6 +25215,40 @@
"node": ">=6"
}
},
+ "node_modules/react-scripts/node_modules/yargs/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==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/react-scripts/node_modules/yargs/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==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/react-scripts/node_modules/yargs/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/react-scripts/node_modules/yargs/node_modules/string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -28064,20 +25263,32 @@
"node": ">=6"
}
},
- "node_modules/react-sizeme": {
- "version": "2.6.12",
- "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-2.6.12.tgz",
- "integrity": "sha512-tL4sCgfmvapYRZ1FO2VmBmjPVzzqgHA7kI8lSJ6JS6L78jXFNRdOZFpXyK6P1NBZvKPPCZxReNgzZNUajAerZw==",
+ "node_modules/react-scripts/node_modules/yargs/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==",
"dev": true,
"dependencies": {
- "element-resize-detector": "^1.2.1",
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/react-sizeme": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.1.tgz",
+ "integrity": "sha512-9Hf1NLgSbny1bha77l9HwvwwxQUJxFUqi44Ih+y3evA+PezBpGdCGlnvye6avss2cIgs9PgdYgMnfuzJWn/RUw==",
+ "dev": true,
+ "dependencies": {
+ "element-resize-detector": "^1.2.2",
"invariant": "^2.2.4",
"shallowequal": "^1.1.0",
- "throttle-debounce": "^2.1.0"
+ "throttle-debounce": "^3.0.1"
},
"peerDependencies": {
- "react": "^0.14.0 || ^15.0.0-0 || ^16.0.0",
- "react-dom": "^0.14.0 || ^15.0.0-0 || ^16.0.0"
+ "react": "^0.14.0 || ^15.0.0-0 || ^16.0.0 || ^17.0.0",
+ "react-dom": "^0.14.0 || ^15.0.0-0 || ^16.0.0 || ^17.0.0"
}
},
"node_modules/react-smooth": {
@@ -28197,15 +25408,6 @@
"react-dom": "^15.3.0 || ^16.0.0-alpha"
}
},
- "node_modules/reactcss": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz",
- "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.0.1"
- }
- },
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -28225,125 +25427,99 @@
}
},
"node_modules/read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
"dev": true,
"dependencies": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
+ "@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": ">=4"
+ "node": ">=8"
}
},
"node_modules/read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "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": "^2.0.0",
- "read-pkg": "^2.0.0"
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/read-pkg-up/node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "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": "^2.0.0"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/read-pkg-up/node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "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": "^2.0.0",
- "path-exists": "^3.0.0"
+ "p-locate": "^4.1.0"
},
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/read-pkg-up/node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/read-pkg-up/node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "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": "^1.1.0"
+ "p-limit": "^2.2.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
- "node_modules/read-pkg-up/node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "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": ">=4"
- }
- },
- "node_modules/read-pkg/node_modules/path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "dependencies": {
- "pify": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/read-pkg/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
"node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"dependencies": {
"core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
}
},
+ "node_modules/readable-stream/node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
"node_modules/readdirp": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
@@ -28396,15 +25572,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/readdirp/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/readdirp/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -28429,6 +25596,30 @@
"node": ">=0.10.0"
}
},
+ "node_modules/readdirp/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readdirp/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/readline-ui": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/readline-ui/-/readline-ui-2.2.3.tgz",
@@ -28444,6 +25635,15 @@
"node": ">=4.0"
}
},
+ "node_modules/readline-ui/node_modules/ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/readline-ui/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -28481,6 +25681,18 @@
"node": ">=4"
}
},
+ "node_modules/readline-ui/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/readline-utils": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/readline-utils/-/readline-utils-2.2.3.tgz",
@@ -28542,9 +25754,9 @@
}
},
"node_modules/recharts-scale": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.4.tgz",
- "integrity": "sha512-e7MCnuD1+gtY9N7TYxzB+QXvi4s30kvNqVbI1p5m4rf47GusEQaEHxi8zvlZkdOOZ90UhpGHcnkYlyYkUJ2JoQ==",
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
+ "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
"dependencies": {
"decimal.js-light": "^2.4.1"
}
@@ -28553,21 +25765,9 @@
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
- "deprecated": "core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.",
+ "deprecated": "core-js@<3.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. Please, upgrade your dependencies to the actual version of core-js.",
"hasInstallScript": true
},
- "node_modules/rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
- "dev": true,
- "dependencies": {
- "resolve": "^1.1.6"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/recursive-readdir": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
@@ -28604,12 +25804,11 @@
}
},
"node_modules/redux": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
- "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz",
+ "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==",
"dependencies": {
- "loose-envify": "^1.4.0",
- "symbol-observable": "^1.2.0"
+ "@babel/runtime": "^7.9.2"
}
},
"node_modules/redux-immutable": {
@@ -28732,13 +25931,15 @@
}
},
"node_modules/regexpp": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
- "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
+ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
"dev": true,
- "peer": true,
"engines": {
- "node": ">=4.0.0"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
}
},
"node_modules/regexpu-core": {
@@ -28813,15 +26014,6 @@
"strip-ansi": "^3.0.0"
}
},
- "node_modules/renderkid/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/renderkid/node_modules/css-select": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
@@ -28884,22 +26076,39 @@
"node": ">= 6"
}
},
- "node_modules/renderkid/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/renderkid/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/renderkid/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": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "safe-buffer": "~5.2.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==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -28914,19 +26123,6 @@
"node": ">=0.10"
}
},
- "node_modules/repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "is-finite": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -29030,43 +26226,12 @@
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
},
- "node_modules/require-uncached": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
- "dev": true,
- "peer": true,
- "dependencies": {
- "caller-path": "^0.1.0",
- "resolve-from": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-uncached/node_modules/resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
"dev": true
},
- "node_modules/reselect": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz",
- "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=",
- "dev": true,
- "peer": true
- },
"node_modules/resize-observer-polyfill": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
@@ -29148,6 +26313,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/resolve-dir/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
"node_modules/resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
@@ -29412,27 +26589,10 @@
"resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
"integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
},
- "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,
- "peer": 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,
- "peer": true,
- "dependencies": {
- "rx-lite": "*"
- }
- },
"node_modules/rxjs": {
- "version": "6.6.6",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz",
- "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==",
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
"dev": true,
"dependencies": {
"tslib": "^1.9.0"
@@ -29522,15 +26682,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/sane/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/sane/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -29598,41 +26749,6 @@
}
}
},
- "node_modules/sass-loader/node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/sass-loader/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sass-loader/node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/sax": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
@@ -29678,37 +26794,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/schema-utils/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/schema-utils/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/schema-utils/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"node_modules/select": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
@@ -29977,26 +27062,15 @@
}
},
"node_modules/shallow-clone": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
- "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
"dependencies": {
- "is-extendable": "^0.1.1",
- "kind-of": "^5.0.0",
- "mixin-object": "^2.0.1"
+ "kind-of": "^6.0.2"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/shallow-clone/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
"node_modules/shallow-copy": {
@@ -30038,24 +27112,24 @@
}
},
"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=",
+ "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": "^1.0.0"
+ "shebang-regex": "^3.0.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
"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=",
+ "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": ">=0.10.0"
+ "node": ">=8"
}
},
"node_modules/shell-quote": {
@@ -30065,29 +27139,14 @@
"dev": true
},
"node_modules/shelljs": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz",
- "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==",
- "dev": true,
- "dependencies": {
- "glob": "^7.0.0",
- "interpret": "^1.0.0",
- "rechoir": "^0.6.2"
- },
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
+ "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=",
"bin": {
"shjs": "bin/shjs"
},
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/shelljs/node_modules/interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "dev": true,
- "engines": {
- "node": ">= 0.10"
+ "node": ">=0.8.0"
}
},
"node_modules/shellwords": {
@@ -30145,16 +27204,17 @@
}
},
"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==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
"dev": true,
- "peer": true,
"dependencies": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
"is-fullwidth-code-point": "^2.0.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=6"
}
},
"node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
@@ -30162,7 +27222,6 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true,
- "peer": true,
"engines": {
"node": ">=4"
}
@@ -30212,6 +27271,18 @@
"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=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/snapdragon/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -30245,6 +27316,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/snapdragon/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=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/snapdragon/node_modules/is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
@@ -30257,6 +27340,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/snapdragon/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=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/snapdragon/node_modules/is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@@ -30271,7 +27366,7 @@
"node": ">=0.10.0"
}
},
- "node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of": {
+ "node_modules/snapdragon/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==",
@@ -30337,9 +27432,9 @@
}
},
"node_modules/sockjs-client": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.0.tgz",
- "integrity": "sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz",
+ "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==",
"dev": true,
"dependencies": {
"debug": "^3.2.6",
@@ -30347,7 +27442,7 @@
"faye-websocket": "^0.11.3",
"inherits": "^2.0.4",
"json3": "^3.3.3",
- "url-parse": "^1.4.7"
+ "url-parse": "^1.5.1"
}
},
"node_modules/sockjs-client/node_modules/debug": {
@@ -30518,6 +27613,35 @@
"node": ">= 6"
}
},
+ "node_modules/spdy-transport/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/spdy-transport/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/split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
@@ -30582,9 +27706,9 @@
}
},
"node_modules/ssri": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
- "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
+ "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
"dev": true,
"dependencies": {
"figgy-pudding": "^3.5.1"
@@ -30606,9 +27730,9 @@
}
},
"node_modules/stack-utils": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.4.tgz",
- "integrity": "sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz",
+ "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==",
"dev": true,
"dependencies": {
"escape-string-regexp": "^2.0.0"
@@ -30677,6 +27801,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/static-extend/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=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/static-extend/node_modules/is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
@@ -30689,6 +27825,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/static-extend/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=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/static-extend/node_modules/is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@@ -30703,7 +27851,7 @@
"node": ">=0.10.0"
}
},
- "node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of": {
+ "node_modules/static-extend/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==",
@@ -30771,6 +27919,20 @@
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz",
"integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw=="
},
+ "node_modules/static-module/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
"node_modules/static-module/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -30780,6 +27942,14 @@
"node": ">=0.10.0"
}
},
+ "node_modules/static-module/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/static-module/node_modules/through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -30823,6 +27993,30 @@
"readable-stream": "^2.0.2"
}
},
+ "node_modules/stream-browserify/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/stream-browserify/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/stream-each": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
@@ -30846,6 +28040,30 @@
"xtend": "^4.0.0"
}
},
+ "node_modules/stream-http/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/stream-http/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/stream-shift": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
@@ -30862,12 +28080,9 @@
}
},
"node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
},
"node_modules/string-length": {
"version": "2.0.0",
@@ -30882,6 +28097,27 @@
"node": ">=4"
}
},
+ "node_modules/string-length/node_modules/ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/string-length/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/string-width": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
@@ -31016,24 +28252,24 @@
}
},
"node_modules/strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"dependencies": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "^2.0.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=0.10.0"
}
},
"node_modules/strip-ansi/node_modules/ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"dev": true,
"engines": {
- "node": ">=4"
+ "node": ">=0.10.0"
}
},
"node_modules/strip-bom": {
@@ -31089,13 +28325,14 @@
}
},
"node_modules/strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "dev": true,
- "peer": true,
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
+ "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
+ "bin": {
+ "strip-json-comments": "cli.js"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=0.8.0"
}
},
"node_modules/style-loader": {
@@ -31111,37 +28348,6 @@
"node": ">= 0.12.0"
}
},
- "node_modules/style-loader/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/style-loader/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/style-loader/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"node_modules/style-loader/node_modules/schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -31170,24 +28376,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/stylehacks/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/stylehacks/node_modules/postcss-selector-parser": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
@@ -31202,27 +28390,6 @@
"node": ">=8"
}
},
- "node_modules/stylehacks/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/stylehacks/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/success-symbol": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz",
@@ -31241,45 +28408,6 @@
"postcss": "^7.0.2"
}
},
- "node_modules/sugarss/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/sugarss/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sugarss/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -31402,42 +28530,59 @@
"integrity": "sha512-KHDsGQ4UcP+wSMaqH7wjH4DHxeHKRlmEO5jlSVCS+0x9xA4ZhdKYg/ameGF7RXaFDUcsti6Zj5s5W1Z4/YsbHA=="
},
"node_modules/table": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
- "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
"dev": true,
- "peer": true,
"dependencies": {
- "ajv": "^5.2.3",
- "ajv-keywords": "^2.1.0",
- "chalk": "^2.1.0",
- "lodash": "^4.17.4",
- "slice-ansi": "1.0.0",
- "string-width": "^2.1.1"
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
+ "node_modules/table/node_modules/emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
"node_modules/table/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=",
"dev": true,
- "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/table/node_modules/string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
- "peer": true,
"dependencies": {
+ "emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
+ "strip-ansi": "^5.1.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=6"
+ }
+ },
+ "node_modules/table/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==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/tailwindcss": {
@@ -31512,9 +28657,9 @@
}
},
"node_modules/tailwindcss/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": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -31526,22 +28671,6 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/tailwindcss/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==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/tailwindcss/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/tailwindcss/node_modules/fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
@@ -31555,6 +28684,14 @@
"node": ">=6 <7 || >=8"
}
},
+ "node_modules/tailwindcss/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==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/tailwindcss/node_modules/jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
@@ -31563,87 +28700,11 @@
"graceful-fs": "^4.1.6"
}
},
- "node_modules/tailwindcss/node_modules/postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
"node_modules/tailwindcss/node_modules/postcss-value-parser": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
},
- "node_modules/tailwindcss/node_modules/postcss/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/tailwindcss/node_modules/postcss/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/tailwindcss/node_modules/postcss/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/tailwindcss/node_modules/postcss/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/tailwindcss/node_modules/postcss/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/tailwindcss/node_modules/postcss/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/tailwindcss/node_modules/reduce-css-calc": {
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
@@ -31658,14 +28719,6 @@
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
"integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
},
- "node_modules/tailwindcss/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/tailwindcss/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -31677,14 +28730,6 @@
"node": ">=8"
}
},
- "node_modules/tailwindcss/node_modules/supports-color/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==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/tailwindcss/node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -31747,18 +28792,18 @@
"dev": true
},
"node_modules/telejson": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.1.0.tgz",
- "integrity": "sha512-Yy0N2OV0mosmr1SCZEm3Ezhu/oi5Dbao5RqauZu4+VI5I/XtVBHXajRk0txuqbFYtKdzzWGDZFGSif9ovVLjEA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.1.1.tgz",
+ "integrity": "sha512-aU7x+nwodmODJPXhU9sC/REOcX/dx1tNbyeOFV1PCTh6e9Mj+bnyfQ7sr13zfJYya9BtpGwnUNn9Fd76Ybj2eg==",
"dev": true,
"dependencies": {
"@types/is-function": "^1.0.0",
"global": "^4.4.0",
"is-function": "^1.0.2",
- "is-regex": "^1.1.1",
+ "is-regex": "^1.1.2",
"is-symbol": "^1.0.3",
"isobject": "^4.0.0",
- "lodash": "^4.17.20",
+ "lodash": "^4.17.21",
"memoizerific": "^1.11.3"
}
},
@@ -31910,6 +28955,19 @@
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
+ "node_modules/terser-webpack-plugin/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/terser-webpack-plugin/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -31933,6 +28991,18 @@
"node": ">= 10.13.0"
}
},
+ "node_modules/terser-webpack-plugin/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/terser-webpack-plugin/node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -31987,6 +29057,33 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/terser-webpack-plugin/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/terser-webpack-plugin/node_modules/p-locate/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==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/terser-webpack-plugin/node_modules/p-map": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
@@ -32002,6 +29099,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/terser-webpack-plugin/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/terser-webpack-plugin/node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -32151,6 +29260,15 @@
"node": ">=4"
}
},
+ "node_modules/test-exclude/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/test-exclude/node_modules/path-type": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
@@ -32209,12 +29327,12 @@
"dev": true
},
"node_modules/throttle-debounce": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
- "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz",
+ "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
"node_modules/through": {
@@ -32233,6 +29351,49 @@
"readable-stream": "2 || 3"
}
},
+ "node_modules/through2/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/through2/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/through2/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/thunky": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
@@ -32283,15 +29444,6 @@
"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
},
- "node_modules/tinycolor2": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz",
- "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
"node_modules/tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -32337,6 +29489,18 @@
"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=",
+ "dev": true,
+ "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",
@@ -32478,16 +29642,6 @@
"punycode": "^2.1.0"
}
},
- "node_modules/trim-right": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
- "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/triple-beam": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
@@ -32501,9 +29655,9 @@
"dev": true
},
"node_modules/ts-dedent": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.1.0.tgz",
- "integrity": "sha512-HbmrG+lCgk5W8LQTALxBxQRBDeAhQKRzdqVhHLUkVd5nYT+b6zDzbRMjiA8wqrWDa33X09WdnW4zEsdwQArTaw==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.1.1.tgz",
+ "integrity": "sha512-riHuwnzAUCfdIeTBNUq7+Yj+ANnrMXo/7+Z74dIdudS7ys2k8aSGMzpJRMFDF7CLwUTbtvi1ZZff/Wl+XxmqIA==",
"dev": true,
"engines": {
"node": ">=6.10"
@@ -32644,24 +29798,10 @@
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
- "node_modules/typescript": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==",
- "dev": true,
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
"node_modules/ua-parser-js": {
- "version": "0.7.25",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.25.tgz",
- "integrity": "sha512-8NFExdfI24Ny8R3Vc6+uUytP/I7dpqk3JERlvxPWlrtx5YboqCgxAXYKPAifbPLV2zKbgmmPL53ufW7mUC/VOQ==",
+ "version": "0.7.28",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
+ "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==",
"funding": [
{
"type": "opencollective",
@@ -32708,21 +29848,24 @@
}
},
"node_modules/unbox-primitive": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz",
- "integrity": "sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
+ "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1",
- "has-bigints": "^1.0.0",
- "has-symbols": "^1.0.0",
- "which-boxed-primitive": "^1.0.1"
+ "has-bigints": "^1.0.1",
+ "has-symbols": "^1.0.2",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/underscore": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz",
- "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==",
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
+ "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==",
"dev": true
},
"node_modules/unfetch": {
@@ -32804,7 +29947,8 @@
"node_modules/uniq": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
},
"node_modules/uniqs": {
"version": "2.0.0",
@@ -32971,37 +30115,6 @@
}
}
},
- "node_modules/url-loader/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/url-loader/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/url-loader/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"node_modules/url-loader/node_modules/loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
@@ -33422,18 +30535,6 @@
"node": ">= 6.14.4"
}
},
- "node_modules/webpack-bundle-analyzer/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
@@ -33449,16 +30550,6 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true
},
- "node_modules/webpack-bundle-analyzer/node_modules/ejs": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
- "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
- "dev": true,
- "hasInstallScript": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/webpack-bundle-analyzer/node_modules/filesize": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
@@ -33593,6 +30684,24 @@
"node": ">=6"
}
},
+ "node_modules/webpack-cli/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/webpack-cli/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -33602,6 +30711,27 @@
"semver": "bin/semver"
}
},
+ "node_modules/webpack-cli/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=",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/webpack-cli/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/webpack-cli/node_modules/string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -33640,6 +30770,18 @@
"node": ">=6"
}
},
+ "node_modules/webpack-cli/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
"node_modules/webpack-cli/node_modules/wrap-ansi": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
@@ -33768,40 +30910,6 @@
}
}
},
- "node_modules/webpack-dev-server/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/webpack-dev-server/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/webpack-dev-server/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/webpack-dev-server/node_modules/chokidar": {
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
@@ -33836,15 +30944,6 @@
"wrap-ansi": "^5.1.0"
}
},
- "node_modules/webpack-dev-server/node_modules/cliui/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==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -33912,12 +31011,6 @@
"node": ">=4"
}
},
- "node_modules/webpack-dev-server/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"node_modules/webpack-dev-server/node_modules/locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
@@ -33943,6 +31036,15 @@
"node": ">=6"
}
},
+ "node_modules/webpack-dev-server/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=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/webpack-dev-server/node_modules/punycode": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
@@ -33977,15 +31079,6 @@
"node": ">=6"
}
},
- "node_modules/webpack-dev-server/node_modules/string-width/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==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -33998,18 +31091,6 @@
"node": ">=6"
}
},
- "node_modules/webpack-dev-server/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=",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/webpack-dev-server/node_modules/supports-color": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
@@ -34046,15 +31127,6 @@
"node": ">=6"
}
},
- "node_modules/webpack-dev-server/node_modules/wrap-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==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -34128,27 +31200,6 @@
"strip-ansi": "^3.0.0"
}
},
- "node_modules/webpack-hot-middleware/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack-hot-middleware/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=",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/webpack-log": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
@@ -34270,31 +31321,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/webpack/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/webpack/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
"node_modules/webpack/node_modules/define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
@@ -34355,21 +31381,6 @@
"node": ">=4"
}
},
- "node_modules/webpack/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/webpack/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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/webpack/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -34496,15 +31507,18 @@
}
},
"node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
- "which": "bin/which"
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
"node_modules/which-boxed-primitive": {
@@ -34538,6 +31552,15 @@
"string-width": "^1.0.2 || 2"
}
},
+ "node_modules/wide-align/node_modules/ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/wide-align/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",
@@ -34560,6 +31583,18 @@
"node": ">=4"
}
},
+ "node_modules/wide-align/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/widest-line": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
@@ -34621,11 +31656,29 @@
"node": ">= 6.4.0"
}
},
- "node_modules/winston/node_modules/async": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
- "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
- "dev": true
+ "node_modules/winston-transport/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/winston-transport/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
},
"node_modules/winston/node_modules/is-stream": {
"version": "2.0.0",
@@ -34650,6 +31703,35 @@
"node": ">= 6"
}
},
+ "node_modules/winston/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/winston/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/word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
@@ -34928,24 +32010,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/wrap-ansi/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==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/wrap-ansi/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==",
- "dev": true
- },
"node_modules/wrap-ansi/node_modules/strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -34964,16 +32028,15 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"node_modules/write": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
- "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
"dev": true,
- "peer": true,
"dependencies": {
"mkdirp": "^0.5.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
}
},
"node_modules/write-file-atomic": {
@@ -35059,9 +32122,9 @@
}
},
"node_modules/y18n": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
- "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
"dev": true
},
"node_modules/yallist": {
@@ -35107,9 +32170,9 @@
}
},
"node_modules/yargs/node_modules/y18n": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
- "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
+ "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"
@@ -35135,9 +32198,9 @@
},
"dependencies": {
"@babel/cli": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.13.10.tgz",
- "integrity": "sha512-lYSBC7B4B9hJ7sv0Ojx1BrGhuzCoOIYfLjd+Xpd4rOzdS+a47yi8voV8vFkfjlZR1N5qZO7ixOCbobUdT304PQ==",
+ "version": "7.13.16",
+ "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.13.16.tgz",
+ "integrity": "sha512-cL9tllhqvsQ6r1+d9Invf7nNXg/3BlfL1vvvL/AdH9fZ2l5j0CeBcoq6UjsqHpvyN1v5nXSZgqJZoGeK+ZOAbw==",
"dev": true,
"requires": {
"@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents",
@@ -35146,7 +32209,6 @@
"convert-source-map": "^1.1.0",
"fs-readdir-recursive": "^1.1.0",
"glob": "^7.0.0",
- "lodash": "^4.17.19",
"make-dir": "^2.1.0",
"slash": "^2.0.0",
"source-map": "^0.5.0"
@@ -35170,31 +32232,30 @@
}
},
"@babel/compat-data": {
- "version": "7.13.12",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz",
- "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz",
+ "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==",
"dev": true
},
"@babel/core": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz",
- "integrity": "sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz",
+ "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
- "@babel/generator": "^7.13.9",
- "@babel/helper-compilation-targets": "^7.13.10",
- "@babel/helper-module-transforms": "^7.13.0",
- "@babel/helpers": "^7.13.10",
- "@babel/parser": "^7.13.10",
+ "@babel/generator": "^7.14.0",
+ "@babel/helper-compilation-targets": "^7.13.16",
+ "@babel/helper-module-transforms": "^7.14.0",
+ "@babel/helpers": "^7.14.0",
+ "@babel/parser": "^7.14.0",
"@babel/template": "^7.12.13",
- "@babel/traverse": "^7.13.0",
- "@babel/types": "^7.13.0",
+ "@babel/traverse": "^7.14.0",
+ "@babel/types": "^7.14.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.1.2",
- "lodash": "^4.17.19",
"semver": "^6.3.0",
"source-map": "^0.5.0"
},
@@ -35208,12 +32269,12 @@
}
},
"@babel/generator": {
- "version": "7.13.9",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz",
- "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz",
+ "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.13.0",
+ "@babel/types": "^7.14.1",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
},
@@ -35246,27 +32307,28 @@
}
},
"@babel/helper-compilation-targets": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz",
- "integrity": "sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA==",
+ "version": "7.13.16",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz",
+ "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.13.8",
+ "@babel/compat-data": "^7.13.15",
"@babel/helper-validator-option": "^7.12.17",
"browserslist": "^4.14.5",
"semver": "^6.3.0"
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.13.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz",
- "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.1.tgz",
+ "integrity": "sha512-r8rsUahG4ywm0QpGcCrLaUSOuNAISR3IZCg4Fx05Ozq31aCUrQsTLH6KPxy0N5ULoQ4Sn9qjNdGNtbPWAC6hYg==",
"dev": true,
"requires": {
+ "@babel/helper-annotate-as-pure": "^7.12.13",
"@babel/helper-function-name": "^7.12.13",
- "@babel/helper-member-expression-to-functions": "^7.13.0",
+ "@babel/helper-member-expression-to-functions": "^7.13.12",
"@babel/helper-optimise-call-expression": "^7.12.13",
- "@babel/helper-replace-supers": "^7.13.0",
+ "@babel/helper-replace-supers": "^7.13.12",
"@babel/helper-split-export-declaration": "^7.12.13"
}
},
@@ -35281,9 +32343,9 @@
}
},
"@babel/helper-define-polyfill-provider": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
- "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz",
+ "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==",
"dev": true,
"requires": {
"@babel/helper-compilation-targets": "^7.13.0",
@@ -35326,13 +32388,13 @@
}
},
"@babel/helper-hoist-variables": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz",
- "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==",
+ "version": "7.13.16",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz",
+ "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==",
"dev": true,
"requires": {
- "@babel/traverse": "^7.13.0",
- "@babel/types": "^7.13.0"
+ "@babel/traverse": "^7.13.15",
+ "@babel/types": "^7.13.16"
}
},
"@babel/helper-member-expression-to-functions": {
@@ -35354,19 +32416,19 @@
}
},
"@babel/helper-module-transforms": {
- "version": "7.13.12",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz",
- "integrity": "sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz",
+ "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.13.12",
"@babel/helper-replace-supers": "^7.13.12",
"@babel/helper-simple-access": "^7.13.12",
"@babel/helper-split-export-declaration": "^7.12.13",
- "@babel/helper-validator-identifier": "^7.12.11",
+ "@babel/helper-validator-identifier": "^7.14.0",
"@babel/template": "^7.12.13",
- "@babel/traverse": "^7.13.0",
- "@babel/types": "^7.13.12"
+ "@babel/traverse": "^7.14.0",
+ "@babel/types": "^7.14.0"
}
},
"@babel/helper-optimise-call-expression": {
@@ -35435,9 +32497,9 @@
}
},
"@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.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz",
+ "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==",
"dev": true
},
"@babel/helper-validator-option": {
@@ -35459,31 +32521,31 @@
}
},
"@babel/helpers": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz",
- "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz",
+ "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==",
"dev": true,
"requires": {
"@babel/template": "^7.12.13",
- "@babel/traverse": "^7.13.0",
- "@babel/types": "^7.13.0"
+ "@babel/traverse": "^7.14.0",
+ "@babel/types": "^7.14.0"
}
},
"@babel/highlight": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
- "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz",
+ "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.12.11",
+ "@babel/helper-validator-identifier": "^7.14.0",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.13.12",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz",
- "integrity": "sha512-4T7Pb244rxH24yR116LAuJ+adxXXnHhZaLJjegJVKSdoNCe4x1eDBaud5YIcQFcqzsaD5BHvJw5BQ0AZapdCRw==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz",
+ "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==",
"dev": true
},
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
@@ -35498,9 +32560,9 @@
}
},
"@babel/plugin-proposal-async-generator-functions": {
- "version": "7.13.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz",
- "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==",
+ "version": "7.13.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz",
+ "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0",
@@ -35518,13 +32580,23 @@
"@babel/helper-plugin-utils": "^7.13.0"
}
},
- "@babel/plugin-proposal-decorators": {
- "version": "7.13.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.5.tgz",
- "integrity": "sha512-i0GDfVNuoapwiheevUOuSW67mInqJ8qw7uWfpjNVeHMn143kXblEy/bmL9AdZ/0yf/4BMQeWXezK0tQIvNPqag==",
+ "@babel/plugin-proposal-class-static-block": {
+ "version": "7.13.11",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz",
+ "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==",
"dev": true,
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.13.0",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/plugin-syntax-class-static-block": "^7.12.13"
+ }
+ },
+ "@babel/plugin-proposal-decorators": {
+ "version": "7.13.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.15.tgz",
+ "integrity": "sha512-ibAMAqUm97yzi+LPgdr5Nqb9CMkeieGHvwPg1ywSGjZrZHQEGqE01HmOio8kxRpA/+VtOHouIVy2FMpBbtltjA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.13.11",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-decorators": "^7.12.13"
}
@@ -35643,6 +32715,18 @@
"@babel/helper-plugin-utils": "^7.13.0"
}
},
+ "@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz",
+ "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.12.13",
+ "@babel/helper-create-class-features-plugin": "^7.14.0",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.0"
+ }
+ },
"@babel/plugin-proposal-unicode-property-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz",
@@ -35680,6 +32764,15 @@
"@babel/helper-plugin-utils": "^7.12.13"
}
},
+ "@babel/plugin-syntax-class-static-block": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz",
+ "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ }
+ },
"@babel/plugin-syntax-decorators": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz",
@@ -35797,6 +32890,15 @@
"@babel/helper-plugin-utils": "^7.8.0"
}
},
+ "@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz",
+ "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.13.0"
+ }
+ },
"@babel/plugin-syntax-top-level-await": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz",
@@ -35845,12 +32947,12 @@
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz",
- "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.1.tgz",
+ "integrity": "sha512-2mQXd0zBrwfp0O1moWIhPpEeTKDvxyHcnma3JATVP1l+CctWBuot6OJG8LQ4DnBj4ZZPSmlb/fm4mu47EOAnVA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.12.13"
+ "@babel/helper-plugin-utils": "^7.13.0"
}
},
"@babel/plugin-transform-classes": {
@@ -35878,9 +32980,9 @@
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz",
- "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==",
+ "version": "7.13.17",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz",
+ "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0"
@@ -35963,25 +33065,25 @@
}
},
"@babel/plugin-transform-modules-amd": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz",
- "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz",
+ "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.13.0",
+ "@babel/helper-module-transforms": "^7.14.0",
"@babel/helper-plugin-utils": "^7.13.0",
"babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.13.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz",
- "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz",
+ "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.13.0",
+ "@babel/helper-module-transforms": "^7.14.0",
"@babel/helper-plugin-utils": "^7.13.0",
- "@babel/helper-simple-access": "^7.12.13",
+ "@babel/helper-simple-access": "^7.13.12",
"babel-plugin-dynamic-import-node": "^2.3.3"
}
},
@@ -35999,12 +33101,12 @@
}
},
"@babel/plugin-transform-modules-umd": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz",
- "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz",
+ "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.13.0",
+ "@babel/helper-module-transforms": "^7.14.0",
"@babel/helper-plugin-utils": "^7.13.0"
}
},
@@ -36055,9 +33157,9 @@
}
},
"@babel/plugin-transform-react-constant-elements": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.10.tgz",
- "integrity": "sha512-E+aCW9j7mLq01tOuGV08YzLBt+vSyr4bOPT75B6WrAlrUfmOYOZ/yWk847EH0dv0xXiCihWLEmlX//O30YhpIw==",
+ "version": "7.13.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz",
+ "integrity": "sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0"
@@ -36123,9 +33225,9 @@
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz",
- "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==",
+ "version": "7.13.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz",
+ "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==",
"dev": true,
"requires": {
"regenerator-transform": "^0.14.2"
@@ -36237,18 +33339,19 @@
}
},
"@babel/preset-env": {
- "version": "7.13.12",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz",
- "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.1.tgz",
+ "integrity": "sha512-0M4yL1l7V4l+j/UHvxcdvNfLB9pPtIooHTbEhgD/6UGyh8Hy3Bm1Mj0buzjDXATCSz3JFibVdnoJZCrlUCanrQ==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.13.12",
- "@babel/helper-compilation-targets": "^7.13.10",
+ "@babel/compat-data": "^7.14.0",
+ "@babel/helper-compilation-targets": "^7.13.16",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-validator-option": "^7.12.17",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12",
- "@babel/plugin-proposal-async-generator-functions": "^7.13.8",
+ "@babel/plugin-proposal-async-generator-functions": "^7.13.15",
"@babel/plugin-proposal-class-properties": "^7.13.0",
+ "@babel/plugin-proposal-class-static-block": "^7.13.11",
"@babel/plugin-proposal-dynamic-import": "^7.13.8",
"@babel/plugin-proposal-export-namespace-from": "^7.12.13",
"@babel/plugin-proposal-json-strings": "^7.13.8",
@@ -36259,9 +33362,11 @@
"@babel/plugin-proposal-optional-catch-binding": "^7.13.8",
"@babel/plugin-proposal-optional-chaining": "^7.13.12",
"@babel/plugin-proposal-private-methods": "^7.13.0",
+ "@babel/plugin-proposal-private-property-in-object": "^7.14.0",
"@babel/plugin-proposal-unicode-property-regex": "^7.12.13",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.12.13",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
"@babel/plugin-syntax-json-strings": "^7.8.3",
@@ -36271,14 +33376,15 @@
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.0",
"@babel/plugin-syntax-top-level-await": "^7.12.13",
"@babel/plugin-transform-arrow-functions": "^7.13.0",
"@babel/plugin-transform-async-to-generator": "^7.13.0",
"@babel/plugin-transform-block-scoped-functions": "^7.12.13",
- "@babel/plugin-transform-block-scoping": "^7.12.13",
+ "@babel/plugin-transform-block-scoping": "^7.14.1",
"@babel/plugin-transform-classes": "^7.13.0",
"@babel/plugin-transform-computed-properties": "^7.13.0",
- "@babel/plugin-transform-destructuring": "^7.13.0",
+ "@babel/plugin-transform-destructuring": "^7.13.17",
"@babel/plugin-transform-dotall-regex": "^7.12.13",
"@babel/plugin-transform-duplicate-keys": "^7.12.13",
"@babel/plugin-transform-exponentiation-operator": "^7.12.13",
@@ -36286,16 +33392,16 @@
"@babel/plugin-transform-function-name": "^7.12.13",
"@babel/plugin-transform-literals": "^7.12.13",
"@babel/plugin-transform-member-expression-literals": "^7.12.13",
- "@babel/plugin-transform-modules-amd": "^7.13.0",
- "@babel/plugin-transform-modules-commonjs": "^7.13.8",
+ "@babel/plugin-transform-modules-amd": "^7.14.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.14.0",
"@babel/plugin-transform-modules-systemjs": "^7.13.8",
- "@babel/plugin-transform-modules-umd": "^7.13.0",
+ "@babel/plugin-transform-modules-umd": "^7.14.0",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13",
"@babel/plugin-transform-new-target": "^7.12.13",
"@babel/plugin-transform-object-super": "^7.12.13",
"@babel/plugin-transform-parameters": "^7.13.0",
"@babel/plugin-transform-property-literals": "^7.12.13",
- "@babel/plugin-transform-regenerator": "^7.12.13",
+ "@babel/plugin-transform-regenerator": "^7.13.15",
"@babel/plugin-transform-reserved-words": "^7.12.13",
"@babel/plugin-transform-shorthand-properties": "^7.12.13",
"@babel/plugin-transform-spread": "^7.13.0",
@@ -36305,22 +33411,23 @@
"@babel/plugin-transform-unicode-escapes": "^7.12.13",
"@babel/plugin-transform-unicode-regex": "^7.12.13",
"@babel/preset-modules": "^0.1.4",
- "@babel/types": "^7.13.12",
- "babel-plugin-polyfill-corejs2": "^0.1.4",
- "babel-plugin-polyfill-corejs3": "^0.1.3",
- "babel-plugin-polyfill-regenerator": "^0.1.2",
+ "@babel/types": "^7.14.1",
+ "babel-plugin-polyfill-corejs2": "^0.2.0",
+ "babel-plugin-polyfill-corejs3": "^0.2.0",
+ "babel-plugin-polyfill-regenerator": "^0.2.0",
"core-js-compat": "^3.9.0",
"semver": "^6.3.0"
}
},
"@babel/preset-flow": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.12.13.tgz",
- "integrity": "sha512-gcEjiwcGHa3bo9idURBp5fmJPcyFPOszPQjztXrOjUE2wWVqc6fIVJPgWPIQksaQ5XZ2HWiRsf2s1fRGVjUtVw==",
+ "version": "7.13.13",
+ "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.13.13.tgz",
+ "integrity": "sha512-MDtwtamMifqq3R2mC7l3A3uFalUb3NH5TIBQWjN/epEPlZktcLq4se3J+ivckKrLMGsR7H9LW8+pYuIUN9tsKg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.12.13",
- "@babel/plugin-transform-flow-strip-types": "^7.12.13"
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/helper-validator-option": "^7.12.17",
+ "@babel/plugin-transform-flow-strip-types": "^7.13.0"
}
},
"@babel/preset-modules": {
@@ -36337,15 +33444,16 @@
}
},
"@babel/preset-react": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.13.tgz",
- "integrity": "sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA==",
+ "version": "7.13.13",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz",
+ "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.12.13",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/helper-validator-option": "^7.12.17",
"@babel/plugin-transform-react-display-name": "^7.12.13",
- "@babel/plugin-transform-react-jsx": "^7.12.13",
- "@babel/plugin-transform-react-jsx-development": "^7.12.12",
+ "@babel/plugin-transform-react-jsx": "^7.13.12",
+ "@babel/plugin-transform-react-jsx-development": "^7.12.17",
"@babel/plugin-transform-react-pure-annotations": "^7.12.1"
}
},
@@ -36361,30 +33469,30 @@
}
},
"@babel/register": {
- "version": "7.13.8",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.8.tgz",
- "integrity": "sha512-yCVtABcmvQjRsX2elcZFUV5Q5kDDpHdtXKKku22hNDma60lYuhKmtp1ykZ/okRCPLT2bR5S+cA1kvtBdAFlDTQ==",
+ "version": "7.13.16",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz",
+ "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==",
"dev": true,
"requires": {
+ "clone-deep": "^4.0.1",
"find-cache-dir": "^2.0.0",
- "lodash": "^4.17.19",
"make-dir": "^2.1.0",
"pirates": "^4.0.0",
"source-map-support": "^0.5.16"
}
},
"@babel/runtime": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
- "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz",
+ "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
},
"@babel/runtime-corejs3": {
- "version": "7.13.10",
- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz",
- "integrity": "sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz",
+ "integrity": "sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg==",
"dev": true,
"requires": {
"core-js-pure": "^3.0.0",
@@ -36403,30 +33511,28 @@
}
},
"@babel/traverse": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz",
- "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz",
+ "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
- "@babel/generator": "^7.13.0",
+ "@babel/generator": "^7.14.0",
"@babel/helper-function-name": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13",
- "@babel/parser": "^7.13.0",
- "@babel/types": "^7.13.0",
+ "@babel/parser": "^7.14.0",
+ "@babel/types": "^7.14.0",
"debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.19"
+ "globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.13.12",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz",
- "integrity": "sha512-K4nY2xFN4QMvQwkQ+zmBDp6ANMbVNw6BbxWmYA4qNjhR9W+Lj/8ky5MEY2Me5r+B2c6/v6F53oMndG+f9s3IiA==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz",
+ "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.12.11",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.14.0",
"to-fast-properties": "^2.0.0"
}
},
@@ -36668,13 +33774,6 @@
"warning": "^4.0.3"
}
},
- "@icons/material": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz",
- "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==",
- "dev": true,
- "requires": {}
- },
"@jest/console": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
@@ -36757,12 +33856,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -36950,12 +34043,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -37104,9 +34191,9 @@
}
},
"@popperjs/core": {
- "version": "2.9.1",
- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.1.tgz",
- "integrity": "sha512-DvJbbn3dUgMxDnJLH+RZQPnXak1h4ZVYQ7CWiFWjQwBFkVajT4rfw2PdpHLTSTwxrYfnoEXkuBiwkDm6tPMQeA==",
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.2.tgz",
+ "integrity": "sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q==",
"dev": true
},
"@reach/router": {
@@ -37188,157 +34275,67 @@
}
},
"@storybook/addons": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.1.21.tgz",
- "integrity": "sha512-xo5TGu9EZVCqgh3D1veVnfuGzyKDWWsvOMo18phVqRxj21G3/+hScVyfIYwNTv7Ys5/Ahp9JxJUMXL3V3ny+tw==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.2.9.tgz",
+ "integrity": "sha512-GnmEKbJwiN1jncN9NSA8CuR1i2XAlasPcl/Zn0jkfV9WitQeczVcJCPw86SGH84AD+tTBCyF2i9UC0KaOV1YBQ==",
"dev": true,
"requires": {
- "@storybook/api": "6.1.21",
- "@storybook/channels": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/core-events": "6.1.21",
- "@storybook/router": "6.1.21",
- "@storybook/theming": "6.1.21",
- "core-js": "^3.0.1",
- "global": "^4.3.2",
+ "@storybook/api": "6.2.9",
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "@storybook/router": "6.2.9",
+ "@storybook/theming": "6.2.9",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
"regenerator-runtime": "^0.13.7"
}
},
"@storybook/api": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.1.21.tgz",
- "integrity": "sha512-QjZk70VSXMw/wPPoWdMp5Bl9VmkfmGhIz8PALrFLLEZHjzptpfZE2qkGEEJHG0NAksFUv6NxGki2/632dzR7Ug==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.2.9.tgz",
+ "integrity": "sha512-okkA3HAScE9tGnYBrjTOcgzT+L1lRHNoEh3ZfGgh1u/XNEyHGNkj4grvkd6nX7BzRcYQ/l2VkcKCqmOjUnSkVQ==",
"dev": true,
"requires": {
- "@reach/router": "^1.3.3",
- "@storybook/channels": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/core-events": "6.1.21",
+ "@reach/router": "^1.3.4",
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/core-events": "6.2.9",
"@storybook/csf": "0.0.1",
- "@storybook/router": "6.1.21",
+ "@storybook/router": "6.2.9",
"@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.1.21",
+ "@storybook/theming": "6.2.9",
"@types/reach__router": "^1.3.7",
- "core-js": "^3.0.1",
- "fast-deep-equal": "^3.1.1",
- "global": "^4.3.2",
- "lodash": "^4.17.15",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
"memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
"regenerator-runtime": "^0.13.7",
- "store2": "^2.7.1",
- "telejson": "^5.0.2",
+ "store2": "^2.12.0",
+ "telejson": "^5.1.0",
"ts-dedent": "^2.0.0",
"util-deprecate": "^1.0.2"
}
},
- "@storybook/channel-postmessage": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.1.21.tgz",
- "integrity": "sha512-SuI/ffqcPT02VNda32k8V0D4XpLm5bIy8CLIs0OAnQg+zt5KjGBpQBngk3q4EaAiOoAhbMWAQiUzRUXfrgkgXg==",
+ "@storybook/builder-webpack4": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.2.9.tgz",
+ "integrity": "sha512-swECic1huVdj+B+iRJIQ8ds59HuPVE4fmhI+j/nhw0CQCsgAEKqDlOQVYEimW6nZX8GO4WxNm6tiiRzxixejbw==",
"dev": true,
"requires": {
- "@storybook/channels": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/core-events": "6.1.21",
- "core-js": "^3.0.1",
- "global": "^4.3.2",
- "qs": "^6.6.0",
- "telejson": "^5.0.2"
- }
- },
- "@storybook/channels": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.1.21.tgz",
- "integrity": "sha512-7WoizMjyHqCyvcWncLexSg9FLPIErWAZL4NvluEthwsHSO2sDybn9mh1pzsFHdYMuTP6ml06Zt9ayWMtIveHDg==",
- "dev": true,
- "requires": {
- "core-js": "^3.0.1",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "@storybook/client-api": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.1.21.tgz",
- "integrity": "sha512-uLFXQ5z1LLWYnw1w+YUJPzIPRVlwCCvM2Si37aHDZn1F3fnbMg+huEhEqIQ1TTTw3wiJoTeGuShYvqyaiNwq/w==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.1.21",
- "@storybook/channel-postmessage": "6.1.21",
- "@storybook/channels": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/core-events": "6.1.21",
- "@storybook/csf": "0.0.1",
- "@types/qs": "^6.9.0",
- "@types/webpack-env": "^1.15.3",
- "core-js": "^3.0.1",
- "global": "^4.3.2",
- "lodash": "^4.17.15",
- "memoizerific": "^1.11.3",
- "qs": "^6.6.0",
- "regenerator-runtime": "^0.13.7",
- "stable": "^0.1.8",
- "store2": "^2.7.1",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "@storybook/client-logger": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.1.21.tgz",
- "integrity": "sha512-QJV+gnVM2fQ4M7lSkRLCXkOw/RU+aEtUefo9TAnXxPHK3UGG+DyvLmha6fHGaz9GAcFxyWtgqCyVOhMe03Q35g==",
- "dev": true,
- "requires": {
- "core-js": "^3.0.1",
- "global": "^4.3.2"
- }
- },
- "@storybook/components": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.1.21.tgz",
- "integrity": "sha512-2NjkyS1yeYXlRY7azt88woqd6eqJA00oloIxgMAFLVpRmvFxoHalY61wNrvxl2QSu9cNofp984AbGc8gPbizBA==",
- "dev": true,
- "requires": {
- "@popperjs/core": "^2.5.4",
- "@storybook/client-logger": "6.1.21",
- "@storybook/csf": "0.0.1",
- "@storybook/theming": "6.1.21",
- "@types/overlayscrollbars": "^1.9.0",
- "@types/react-color": "^3.0.1",
- "@types/react-syntax-highlighter": "11.0.4",
- "core-js": "^3.0.1",
- "fast-deep-equal": "^3.1.1",
- "global": "^4.3.2",
- "lodash": "^4.17.15",
- "markdown-to-jsx": "^6.11.4",
- "memoizerific": "^1.11.3",
- "overlayscrollbars": "^1.10.2",
- "polished": "^3.4.4",
- "react-color": "^2.17.0",
- "react-popper-tooltip": "^3.1.1",
- "react-syntax-highlighter": "^13.5.0",
- "react-textarea-autosize": "^8.1.1",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
- }
- },
- "@storybook/core": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.1.21.tgz",
- "integrity": "sha512-ITqSid3VVL5/fkx7Wwu7QfD2Y5xjl3V6p7yUpLSzP8GpBnCHKDvJ4pFJUdJlGQ0mnGz6ACa0qVnSc+V0hiy1sA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.3",
+ "@babel/core": "^7.12.10",
"@babel/plugin-proposal-class-properties": "^7.12.1",
- "@babel/plugin-proposal-decorators": "^7.12.1",
+ "@babel/plugin-proposal-decorators": "^7.12.12",
"@babel/plugin-proposal-export-default-from": "^7.12.1",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
- "@babel/plugin-proposal-optional-chaining": "^7.12.1",
+ "@babel/plugin-proposal-optional-chaining": "^7.12.7",
"@babel/plugin-proposal-private-methods": "^7.12.1",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-transform-arrow-functions": "^7.12.1",
- "@babel/plugin-transform-block-scoping": "^7.12.1",
+ "@babel/plugin-transform-block-scoping": "^7.12.12",
"@babel/plugin-transform-classes": "^7.12.1",
"@babel/plugin-transform-destructuring": "^7.12.1",
"@babel/plugin-transform-for-of": "^7.12.1",
@@ -37346,98 +34343,74 @@
"@babel/plugin-transform-shorthand-properties": "^7.12.1",
"@babel/plugin-transform-spread": "^7.12.1",
"@babel/plugin-transform-template-literals": "^7.12.1",
- "@babel/preset-env": "^7.12.1",
- "@babel/preset-react": "^7.12.1",
- "@babel/preset-typescript": "^7.12.1",
- "@babel/register": "^7.12.1",
- "@storybook/addons": "6.1.21",
- "@storybook/api": "6.1.21",
- "@storybook/channel-postmessage": "6.1.21",
- "@storybook/channels": "6.1.21",
- "@storybook/client-api": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/components": "6.1.21",
- "@storybook/core-events": "6.1.21",
- "@storybook/csf": "0.0.1",
- "@storybook/node-logger": "6.1.21",
- "@storybook/router": "6.1.21",
+ "@babel/preset-env": "^7.12.11",
+ "@babel/preset-react": "^7.12.10",
+ "@babel/preset-typescript": "^7.12.7",
+ "@storybook/addons": "6.2.9",
+ "@storybook/api": "6.2.9",
+ "@storybook/channel-postmessage": "6.2.9",
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-api": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/components": "6.2.9",
+ "@storybook/core-common": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "@storybook/node-logger": "6.2.9",
+ "@storybook/router": "6.2.9",
"@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.1.21",
- "@storybook/ui": "6.1.21",
- "@types/glob-base": "^0.3.0",
- "@types/micromatch": "^4.0.1",
- "@types/node-fetch": "^2.5.4",
- "airbnb-js-shims": "^2.2.1",
- "ansi-to-html": "^0.6.11",
- "autoprefixer": "^9.7.2",
- "babel-loader": "^8.0.6",
- "babel-plugin-emotion": "^10.0.20",
+ "@storybook/theming": "6.2.9",
+ "@storybook/ui": "6.2.9",
+ "@types/node": "^14.0.10",
+ "@types/webpack": "^4.41.26",
+ "autoprefixer": "^9.8.6",
+ "babel-loader": "^8.2.2",
"babel-plugin-macros": "^2.8.0",
- "babel-preset-minify": "^0.5.0 || 0.6.0-alpha.5",
- "better-opn": "^2.0.0",
- "boxen": "^4.1.0",
- "case-sensitive-paths-webpack-plugin": "^2.2.0",
- "chalk": "^4.0.0",
- "cli-table3": "0.6.0",
- "commander": "^5.0.0",
- "core-js": "^3.0.1",
- "cpy": "^8.1.1",
- "css-loader": "^3.5.3",
- "detect-port": "^1.3.0",
- "dotenv-webpack": "^1.7.0",
- "ejs": "^3.1.2",
- "express": "^4.17.0",
- "file-loader": "^6.0.0",
- "file-system-cache": "^1.0.5",
- "find-up": "^4.1.0",
- "fork-ts-checker-webpack-plugin": "^4.1.4",
- "fs-extra": "^9.0.0",
+ "babel-plugin-polyfill-corejs3": "^0.1.0",
+ "case-sensitive-paths-webpack-plugin": "^2.3.0",
+ "core-js": "^3.8.2",
+ "css-loader": "^3.6.0",
+ "dotenv-webpack": "^1.8.0",
+ "file-loader": "^6.2.0",
+ "find-up": "^5.0.0",
+ "fork-ts-checker-webpack-plugin": "^4.1.6",
+ "fs-extra": "^9.0.1",
"glob": "^7.1.6",
- "glob-base": "^0.3.0",
"glob-promise": "^3.4.0",
- "global": "^4.3.2",
- "html-webpack-plugin": "^4.2.1",
- "inquirer": "^7.0.0",
- "interpret": "^2.0.0",
- "ip": "^1.1.5",
- "json5": "^2.1.1",
- "lazy-universal-dotenv": "^3.0.1",
- "micromatch": "^4.0.2",
- "node-fetch": "^2.6.0",
- "pkg-dir": "^4.2.0",
+ "global": "^4.4.0",
+ "html-webpack-plugin": "^4.0.0",
"pnp-webpack-plugin": "1.6.4",
- "postcss-flexbugs-fixes": "^4.1.0",
- "postcss-loader": "^3.0.0",
- "pretty-hrtime": "^1.0.3",
- "qs": "^6.6.0",
- "raw-loader": "^4.0.1",
+ "postcss": "^7.0.35",
+ "postcss-flexbugs-fixes": "^4.2.1",
+ "postcss-loader": "^4.2.0",
+ "raw-loader": "^4.0.2",
"react-dev-utils": "^11.0.3",
- "regenerator-runtime": "^0.13.7",
- "resolve-from": "^5.0.0",
- "serve-favicon": "^2.5.0",
- "shelljs": "^0.8.4",
"stable": "^0.1.8",
- "style-loader": "^1.2.1",
- "telejson": "^5.0.2",
- "terser-webpack-plugin": "^3.0.0",
+ "style-loader": "^1.3.0",
+ "terser-webpack-plugin": "^3.1.0",
"ts-dedent": "^2.0.0",
- "unfetch": "^4.1.0",
- "url-loader": "^4.0.0",
+ "url-loader": "^4.1.1",
"util-deprecate": "^1.0.2",
- "webpack": "^4.44.2",
- "webpack-dev-middleware": "^3.7.0",
+ "webpack": "4",
+ "webpack-dev-middleware": "^3.7.3",
"webpack-filter-warnings-plugin": "^1.2.1",
"webpack-hot-middleware": "^2.25.0",
"webpack-virtual-modules": "^0.2.2"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
+ "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
"dev": true,
"requires": {
- "color-convert": "^2.0.1"
+ "@babel/helper-compilation-targets": "^7.13.0",
+ "@babel/helper-module-imports": "^7.12.13",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/traverse": "^7.13.0",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
}
},
"autoprefixer": {
@@ -37455,36 +34428,84 @@
"postcss-value-parser": "^4.1.0"
}
},
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "babel-plugin-macros": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
+ "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
"dev": true,
"requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "@babel/runtime": "^7.7.2",
+ "cosmiconfig": "^6.0.0",
+ "resolve": "^1.12.0"
+ },
+ "dependencies": {
+ "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": {
+ "@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"
+ }
+ }
}
},
- "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==",
+ "babel-plugin-polyfill-corejs3": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
+ "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "@babel/helper-define-polyfill-provider": "^0.1.5",
+ "core-js-compat": "^3.8.1"
}
},
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
},
- "commander": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
- "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
- "dev": true
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "fork-ts-checker-webpack-plugin": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
+ "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "chalk": "^2.4.1",
+ "micromatch": "^3.1.10",
+ "minimatch": "^3.0.4",
+ "semver": "^5.6.0",
+ "tapable": "^1.0.0",
+ "worker-rpc": "^0.1.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
},
"html-webpack-plugin": {
"version": "4.5.2",
@@ -37503,70 +34524,87 @@
"util.promisify": "1.0.0"
}
},
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "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==",
"dev": true,
"requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "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,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "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"
+ }
+ },
+ "postcss-loader": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.2.0.tgz",
+ "integrity": "sha512-mqgScxHqbiz1yxbnNcPdKYo/6aVt+XExURmEbQlviFVWogDbM4AJ0A/B+ZBpYsJrTRxKw7HyRazg9x0Q9SWwLA==",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^7.0.0",
+ "klona": "^2.0.4",
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^3.0.0",
+ "semver": "^7.3.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==",
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
}
},
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "dependencies": {
- "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"
- }
- }
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
}
},
- "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==",
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
+ "lru-cache": "^6.0.0"
}
}
}
@@ -37577,11 +34615,400 @@
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "style-loader": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz",
+ "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^2.7.0"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ }
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
+ }
+ }
+ },
+ "@storybook/channel-postmessage": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.2.9.tgz",
+ "integrity": "sha512-OqV+gLeeCHR0KExsIz0B7gD17Cjd9D+I75qnBsLWM9inWO5kc/WZ5svw8Bvjlcm6snWpvxUaT8L+svuqcPSmww==",
+ "dev": true,
+ "requires": {
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "qs": "^6.10.0",
+ "telejson": "^5.1.0"
+ }
+ },
+ "@storybook/channels": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.2.9.tgz",
+ "integrity": "sha512-6dC8Fb2ipNyOQXnUZMDeEUaJGH5DMLzyHlGLhVyDtrO5WR6bO8mQdkzf4+5dSKXgCBNX0BSkssXth4pDjn18rg==",
+ "dev": true,
+ "requires": {
+ "core-js": "^3.8.2",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "@storybook/client-api": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.2.9.tgz",
+ "integrity": "sha512-aLvEUVkbvv6Qo/2mF4rFCecdqi2CGOUDdsV1a6EFIVS/9gXFdpirsOwKHo9qNjacGdWPlBYGCUcbrw+DvNaSFA==",
+ "dev": true,
+ "requires": {
+ "@storybook/addons": "6.2.9",
+ "@storybook/channel-postmessage": "6.2.9",
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "@storybook/csf": "0.0.1",
+ "@types/qs": "^6.9.5",
+ "@types/webpack-env": "^1.16.0",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "regenerator-runtime": "^0.13.7",
+ "stable": "^0.1.8",
+ "store2": "^2.12.0",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "@storybook/client-logger": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.2.9.tgz",
+ "integrity": "sha512-IfOQZuvpjh66qBInQCJOb9S0dTGpzZ/Cxlcvokp+PYt95KztaWN3mPm+HaDQCeRsrWNe0Bpm1zuickcJ6dBOXg==",
+ "dev": true,
+ "requires": {
+ "core-js": "^3.8.2",
+ "global": "^4.4.0"
+ }
+ },
+ "@storybook/components": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.2.9.tgz",
+ "integrity": "sha512-hnV1MI2aB2g1sJ7NJphpxi7TwrMZQ/tpCJeHnkjmzyC6ez1MXqcBXGrEEdSXzRfAxjQTOEpu6H1mnns0xMP0Ag==",
+ "dev": true,
+ "requires": {
+ "@popperjs/core": "^2.6.0",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/csf": "0.0.1",
+ "@storybook/theming": "6.2.9",
+ "@types/color-convert": "^2.0.0",
+ "@types/overlayscrollbars": "^1.12.0",
+ "@types/react-syntax-highlighter": "11.0.5",
+ "color-convert": "^2.0.1",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
+ "markdown-to-jsx": "^7.1.0",
+ "memoizerific": "^1.11.3",
+ "overlayscrollbars": "^1.13.1",
+ "polished": "^4.0.5",
+ "prop-types": "^15.7.2",
+ "react-colorful": "^5.0.1",
+ "react-popper-tooltip": "^3.1.1",
+ "react-syntax-highlighter": "^13.5.3",
+ "react-textarea-autosize": "^8.3.0",
+ "regenerator-runtime": "^0.13.7",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "@storybook/core": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.2.9.tgz",
+ "integrity": "sha512-pzbyjWvj0t8m0kR2pC9GQne4sZn7Y/zfcbm6/31CL+yhzOQjfJEj3n4ZFUlxikXqQJPg1aWfypfyaeaLL0QyuA==",
+ "dev": true,
+ "requires": {
+ "@storybook/core-client": "6.2.9",
+ "@storybook/core-server": "6.2.9"
+ }
+ },
+ "@storybook/core-client": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.2.9.tgz",
+ "integrity": "sha512-jW841J5lCe1Ub5ZMtzYPgCy/OUddFxxVYeHLZyuNxlH5RoiQQxbDpuFlzuZMYGuIzD6eZw+ANE4w5vW/y5oBfA==",
+ "dev": true,
+ "requires": {
+ "@storybook/addons": "6.2.9",
+ "@storybook/channel-postmessage": "6.2.9",
+ "@storybook/client-api": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "@storybook/csf": "0.0.1",
+ "@storybook/ui": "6.2.9",
+ "ansi-to-html": "^0.6.11",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
+ "qs": "^6.10.0",
+ "regenerator-runtime": "^0.13.7",
+ "ts-dedent": "^2.0.0",
+ "unfetch": "^4.2.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "@storybook/core-common": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.2.9.tgz",
+ "integrity": "sha512-ve0Qb4EMit8jGibfZBprmaU2i4LtpB4vSMIzD9nB1YeBmw2cGhHubtmayZ0TwcV3fPQhtYH9wwRWuWyzzHyQyw==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.12.10",
+ "@babel/plugin-proposal-class-properties": "^7.12.1",
+ "@babel/plugin-proposal-decorators": "^7.12.12",
+ "@babel/plugin-proposal-export-default-from": "^7.12.1",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
+ "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
+ "@babel/plugin-proposal-optional-chaining": "^7.12.7",
+ "@babel/plugin-proposal-private-methods": "^7.12.1",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-transform-arrow-functions": "^7.12.1",
+ "@babel/plugin-transform-block-scoping": "^7.12.12",
+ "@babel/plugin-transform-classes": "^7.12.1",
+ "@babel/plugin-transform-destructuring": "^7.12.1",
+ "@babel/plugin-transform-for-of": "^7.12.1",
+ "@babel/plugin-transform-parameters": "^7.12.1",
+ "@babel/plugin-transform-shorthand-properties": "^7.12.1",
+ "@babel/plugin-transform-spread": "^7.12.1",
+ "@babel/preset-env": "^7.12.11",
+ "@babel/preset-react": "^7.12.10",
+ "@babel/preset-typescript": "^7.12.7",
+ "@babel/register": "^7.12.1",
+ "@storybook/node-logger": "6.2.9",
+ "@storybook/semver": "^7.3.2",
+ "@types/glob-base": "^0.3.0",
+ "@types/micromatch": "^4.0.1",
+ "@types/node": "^14.0.10",
+ "@types/pretty-hrtime": "^1.0.0",
+ "babel-loader": "^8.2.2",
+ "babel-plugin-macros": "^3.0.1",
+ "babel-plugin-polyfill-corejs3": "^0.1.0",
+ "chalk": "^4.1.0",
+ "core-js": "^3.8.2",
+ "express": "^4.17.1",
+ "file-system-cache": "^1.0.5",
+ "find-up": "^5.0.0",
+ "fork-ts-checker-webpack-plugin": "^6.0.4",
+ "glob": "^7.1.6",
+ "glob-base": "^0.3.0",
+ "interpret": "^2.2.0",
+ "json5": "^2.1.3",
+ "lazy-universal-dotenv": "^3.0.1",
+ "micromatch": "^4.0.2",
+ "pkg-dir": "^5.0.0",
+ "pretty-hrtime": "^1.0.3",
+ "resolve-from": "^5.0.0",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2",
+ "webpack": "4"
+ },
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
+ "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.13.0",
+ "@babel/helper-module-imports": "^7.12.13",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/traverse": "^7.13.0",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
+ }
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "babel-plugin-polyfill-corejs3": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
+ "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.1.5",
+ "core-js-compat": "^3.8.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@storybook/core-events": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.2.9.tgz",
+ "integrity": "sha512-xQmbX/oYQK1QsAGN8hriXX5SUKOoTUe3L4dVaVHxJqy7MReRWJpprJmCpbAPJzWS6WCbDFfCM5kVEexHLOzJlQ==",
+ "dev": true,
+ "requires": {
+ "core-js": "^3.8.2"
+ }
+ },
+ "@storybook/core-server": {
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.2.9.tgz",
+ "integrity": "sha512-DzihO73pj1Ro0Y4tq9hjw2mLMUYeSRPrx7CndCOBxcTHCKQ8Kd7Dee3wJ49t5/19V7TW1+4lYR59GAy73FeOAQ==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.12.10",
+ "@babel/plugin-transform-template-literals": "^7.12.1",
+ "@babel/preset-react": "^7.12.10",
+ "@storybook/addons": "6.2.9",
+ "@storybook/builder-webpack4": "6.2.9",
+ "@storybook/core-client": "6.2.9",
+ "@storybook/core-common": "6.2.9",
+ "@storybook/node-logger": "6.2.9",
+ "@storybook/semver": "^7.3.2",
+ "@storybook/theming": "6.2.9",
+ "@storybook/ui": "6.2.9",
+ "@types/node": "^14.0.10",
+ "@types/node-fetch": "^2.5.7",
+ "@types/pretty-hrtime": "^1.0.0",
+ "@types/webpack": "^4.41.26",
+ "airbnb-js-shims": "^2.2.1",
+ "babel-loader": "^8.2.2",
+ "better-opn": "^2.1.1",
+ "boxen": "^4.2.0",
+ "case-sensitive-paths-webpack-plugin": "^2.3.0",
+ "chalk": "^4.1.0",
+ "cli-table3": "0.6.0",
+ "commander": "^6.2.1",
+ "core-js": "^3.8.2",
+ "cpy": "^8.1.1",
+ "css-loader": "^3.6.0",
+ "detect-port": "^1.3.0",
+ "dotenv-webpack": "^1.8.0",
+ "express": "^4.17.1",
+ "file-loader": "^6.2.0",
+ "file-system-cache": "^1.0.5",
+ "find-up": "^5.0.0",
+ "fs-extra": "^9.0.1",
+ "global": "^4.4.0",
+ "html-webpack-plugin": "^4.0.0",
+ "ip": "^1.1.5",
+ "node-fetch": "^2.6.1",
+ "pnp-webpack-plugin": "1.6.4",
+ "pretty-hrtime": "^1.0.3",
+ "prompts": "^2.4.0",
+ "read-pkg-up": "^7.0.1",
+ "regenerator-runtime": "^0.13.7",
+ "resolve-from": "^5.0.0",
+ "serve-favicon": "^2.5.0",
+ "style-loader": "^1.3.0",
+ "telejson": "^5.1.0",
+ "terser-webpack-plugin": "^3.1.0",
+ "ts-dedent": "^2.0.0",
+ "url-loader": "^4.1.1",
+ "util-deprecate": "^1.0.2",
+ "webpack": "4",
+ "webpack-dev-middleware": "^3.7.3",
+ "webpack-virtual-modules": "^0.2.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "html-webpack-plugin": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz",
+ "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==",
+ "dev": true,
+ "requires": {
+ "@types/html-minifier-terser": "^5.0.0",
+ "@types/tapable": "^1.0.5",
+ "@types/webpack": "^4.41.8",
+ "html-minifier-terser": "^5.0.1",
+ "loader-utils": "^1.2.3",
+ "lodash": "^4.17.20",
+ "pretty-error": "^2.1.1",
+ "tapable": "^1.1.3",
+ "util.promisify": "1.0.0"
+ }
},
"style-loader": {
"version": "1.3.0",
@@ -37613,27 +35040,10 @@
"dev": true,
"requires": {
"has-flag": "^4.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- }
}
}
}
},
- "@storybook/core-events": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.1.21.tgz",
- "integrity": "sha512-KWqnh1C7M1pT//WfQb3AD60yTR8jL48AfaeLGto2gO9VK7VVgj/EGsrXZP/GTL90ygyExbbBI5gkr7EBTu/HYw==",
- "dev": true,
- "requires": {
- "core-js": "^3.0.1"
- }
- },
"@storybook/csf": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz",
@@ -37644,14 +35054,14 @@
}
},
"@storybook/node-logger": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.1.21.tgz",
- "integrity": "sha512-wQZZw4n1PG3kGOsczWCBC6+8RagYkrGYDqsVOpUcs5shGbPg5beCXDuzP4nxz2IlsoP9ZtTSaX741H791OIOjA==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.2.9.tgz",
+ "integrity": "sha512-ryRBChWZf1A5hOVONErJZosS25IdMweoMVFAUAcj91iC0ynoSA6YL2jmoE71jQchxEXEgkDeRkX9lR/GlqFGZQ==",
"dev": true,
"requires": {
"@types/npmlog": "^4.1.2",
- "chalk": "^4.0.0",
- "core-js": "^3.0.1",
+ "chalk": "^4.1.0",
+ "core-js": "^3.8.2",
"npmlog": "^4.1.2",
"pretty-hrtime": "^1.0.3"
},
@@ -37666,30 +35076,15 @@
}
},
"chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -37708,46 +35103,52 @@
}
},
"@storybook/react": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.1.21.tgz",
- "integrity": "sha512-j3gq/ssWxRCCH5iCHbP3ihXSGS7lVWh1HpmBmGbbhHGHgdmSPsRjwDXiQGE81EmE7bzbC8NECBhU3zHJ6h1TvA==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.2.9.tgz",
+ "integrity": "sha512-glvw+o/Vek2oapYIXCYDK6gm3cuSnx0XdOpiJVcXk3KLb8JfLbdzGYYp6dcWUbyOBqGcGFRpXIgMmkcwgn+fvQ==",
"dev": true,
"requires": {
"@babel/preset-flow": "^7.12.1",
- "@babel/preset-react": "^7.12.1",
- "@pmmmwh/react-refresh-webpack-plugin": "^0.4.2",
- "@storybook/addons": "6.1.21",
- "@storybook/core": "6.1.21",
- "@storybook/node-logger": "6.1.21",
+ "@babel/preset-react": "^7.12.10",
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
+ "@storybook/addons": "6.2.9",
+ "@storybook/core": "6.2.9",
+ "@storybook/core-common": "6.2.9",
+ "@storybook/node-logger": "6.2.9",
"@storybook/semver": "^7.3.2",
- "@types/webpack-env": "^1.15.3",
+ "@types/webpack-env": "^1.16.0",
"babel-plugin-add-react-displayname": "^0.0.5",
"babel-plugin-named-asset-import": "^0.3.1",
"babel-plugin-react-docgen": "^4.2.1",
- "core-js": "^3.0.1",
- "global": "^4.3.2",
- "lodash": "^4.17.15",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
"prop-types": "^15.7.2",
"react-dev-utils": "^11.0.3",
"react-docgen-typescript-plugin": "^0.6.2",
"react-refresh": "^0.8.3",
+ "read-pkg-up": "^7.0.1",
"regenerator-runtime": "^0.13.7",
"ts-dedent": "^2.0.0",
- "webpack": "^4.44.2"
+ "webpack": "4"
}
},
"@storybook/router": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.1.21.tgz",
- "integrity": "sha512-m75WvUhoCBWDVekICAdbkidji/w5hCjHo+M8L13UghpwXWEnyr4/QqvkOb/PcSC8aZzxeMqSCpRQ1o6LWULneg==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.2.9.tgz",
+ "integrity": "sha512-7Bn1OFoItCl8whXRT8N1qp1Lky7kzXJ3aslWp5E8HcM8rxh4OYXfbaeiyJEJxBTGC5zxgY+tAEXHFjsAviFROg==",
"dev": true,
"requires": {
- "@reach/router": "^1.3.3",
+ "@reach/router": "^1.3.4",
+ "@storybook/client-logger": "6.2.9",
"@types/reach__router": "^1.3.7",
- "core-js": "^3.0.1",
- "global": "^4.3.2",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
"memoizerific": "^1.11.3",
- "qs": "^6.6.0"
+ "qs": "^6.10.0",
+ "ts-dedent": "^2.0.0"
}
},
"@storybook/semver": {
@@ -37758,64 +35159,105 @@
"requires": {
"core-js": "^3.6.5",
"find-up": "^4.1.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==",
+ "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"
+ }
+ },
+ "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"
+ }
+ }
}
},
"@storybook/theming": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.1.21.tgz",
- "integrity": "sha512-yq7+/mpdljRdSRJYw/In/9tnDGXIUDe//mhyMftFfrB2mq6zi1yAZpowCerWhiDE2ipGkrfzIYx/Sn7bcaXgqg==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.2.9.tgz",
+ "integrity": "sha512-183oJW7AD7Fhqg5NT4ct3GJntwteAb9jZnQ6yhf9JSdY+fk8OhxRbPf7ov0au2gYACcGrWDd9K5pYQsvWlP5gA==",
"dev": true,
"requires": {
"@emotion/core": "^10.1.1",
"@emotion/is-prop-valid": "^0.8.6",
- "@emotion/styled": "^10.0.23",
- "@storybook/client-logger": "6.1.21",
- "core-js": "^3.0.1",
+ "@emotion/styled": "^10.0.27",
+ "@storybook/client-logger": "6.2.9",
+ "core-js": "^3.8.2",
"deep-object-diff": "^1.1.0",
- "emotion-theming": "^10.0.19",
- "global": "^4.3.2",
+ "emotion-theming": "^10.0.27",
+ "global": "^4.4.0",
"memoizerific": "^1.11.3",
- "polished": "^3.4.4",
+ "polished": "^4.0.5",
"resolve-from": "^5.0.0",
"ts-dedent": "^2.0.0"
}
},
"@storybook/ui": {
- "version": "6.1.21",
- "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.1.21.tgz",
- "integrity": "sha512-2nRb5egnSBKbosuR7g5PsuM4XnRLXZUf7TBjwT6eRlomnE2wrWM5DtTLpFeUpDob0SI5hPlOV1xCpPz3XmeyyA==",
+ "version": "6.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.2.9.tgz",
+ "integrity": "sha512-jq2xmw3reIqik/6ibUSbNKGR+Xvr9wkAEwexiOl+5WQ5BeYJpw4dmDmsFQf+SQuWaSEUUPolbzkakRQM778Kdg==",
"dev": true,
"requires": {
"@emotion/core": "^10.1.1",
- "@storybook/addons": "6.1.21",
- "@storybook/api": "6.1.21",
- "@storybook/channels": "6.1.21",
- "@storybook/client-logger": "6.1.21",
- "@storybook/components": "6.1.21",
- "@storybook/core-events": "6.1.21",
- "@storybook/router": "6.1.21",
+ "@storybook/addons": "6.2.9",
+ "@storybook/api": "6.2.9",
+ "@storybook/channels": "6.2.9",
+ "@storybook/client-logger": "6.2.9",
+ "@storybook/components": "6.2.9",
+ "@storybook/core-events": "6.2.9",
+ "@storybook/router": "6.2.9",
"@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.1.21",
- "@types/markdown-to-jsx": "^6.11.0",
- "copy-to-clipboard": "^3.0.8",
- "core-js": "^3.0.1",
- "core-js-pure": "^3.0.1",
- "downshift": "^6.0.6",
- "emotion-theming": "^10.0.19",
+ "@storybook/theming": "6.2.9",
+ "@types/markdown-to-jsx": "^6.11.3",
+ "copy-to-clipboard": "^3.3.1",
+ "core-js": "^3.8.2",
+ "core-js-pure": "^3.8.2",
+ "downshift": "^6.0.15",
+ "emotion-theming": "^10.0.27",
"fuse.js": "^3.6.1",
- "global": "^4.3.2",
- "lodash": "^4.17.15",
+ "global": "^4.4.0",
+ "lodash": "^4.17.20",
"markdown-to-jsx": "^6.11.4",
"memoizerific": "^1.11.3",
- "polished": "^3.4.4",
- "qs": "^6.6.0",
- "react-draggable": "^4.0.3",
- "react-helmet-async": "^1.0.2",
- "react-hotkeys": "2.0.0",
- "react-sizeme": "^2.6.7",
+ "polished": "^4.0.5",
+ "qs": "^6.10.0",
+ "react-draggable": "^4.4.3",
+ "react-helmet-async": "^1.0.7",
+ "react-sizeme": "^3.0.1",
"regenerator-runtime": "^0.13.7",
"resolve-from": "^5.0.0",
- "store2": "^2.7.1"
+ "store2": "^2.12.0"
+ },
+ "dependencies": {
+ "markdown-to-jsx": {
+ "version": "6.11.4",
+ "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz",
+ "integrity": "sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==",
+ "dev": true,
+ "requires": {
+ "prop-types": "^15.6.2",
+ "unquote": "^1.1.0"
+ }
+ }
}
},
"@svgr/babel-plugin-add-jsx-attribute": {
@@ -37893,15 +35335,6 @@
"cosmiconfig": "^5.2.1"
},
"dependencies": {
- "caller-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
- "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
- "dev": true,
- "requires": {
- "caller-callsite": "^2.0.0"
- }
- },
"cosmiconfig": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
@@ -37974,15 +35407,6 @@
"svgo": "^1.2.2"
},
"dependencies": {
- "caller-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
- "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
- "dev": true,
- "requires": {
- "caller-callsite": "^2.0.0"
- }
- },
"cosmiconfig": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
@@ -38092,6 +35516,21 @@
"integrity": "sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw==",
"dev": true
},
+ "@types/color-convert": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz",
+ "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==",
+ "dev": true,
+ "requires": {
+ "@types/color-name": "*"
+ }
+ },
+ "@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
+ "dev": true
+ },
"@types/component-emitter": {
"version": "1.2.10",
"resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz",
@@ -38201,27 +35640,33 @@
}
},
"@types/minimatch": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
- "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==",
"dev": true
},
"@types/node": {
- "version": "14.14.35",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.35.tgz",
- "integrity": "sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==",
+ "version": "14.14.43",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.43.tgz",
+ "integrity": "sha512-3pwDJjp1PWacPTpH0LcfhgjvurQvrZFBrC6xxjaUEZ7ifUtT32jtjPxEMMblpqd2Mvx+k8haqQJLQxolyGN/cQ==",
"dev": true
},
"@types/node-fetch": {
- "version": "2.5.8",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.8.tgz",
- "integrity": "sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw==",
+ "version": "2.5.10",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz",
+ "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==",
"dev": true,
"requires": {
"@types/node": "*",
"form-data": "^3.0.0"
}
},
+ "@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
+ },
"@types/npmlog": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.2.tgz",
@@ -38240,6 +35685,12 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
+ "@types/pretty-hrtime": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.0.tgz",
+ "integrity": "sha512-xl+5r2rcrxdLViAYkkiLMYsoUs3qEyrAnHFyEzYysgRxdVp3WbhysxIvJIxZp9FvZ2CYezh0TaHZorivH+voOQ==",
+ "dev": true
+ },
"@types/prop-types": {
"version": "15.7.3",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
@@ -38268,9 +35719,9 @@
}
},
"@types/react": {
- "version": "17.0.3",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz",
- "integrity": "sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==",
+ "version": "17.0.4",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.4.tgz",
+ "integrity": "sha512-onz2BqScSFMoTRdJUZUDD/7xrusM8hBA2Fktk2qgaTYPCgPvWnDEgkrOs8hhPUf2jfcIXkJ5yK6VfYormJS3Jw==",
"dev": true,
"requires": {
"@types/prop-types": "*",
@@ -38279,36 +35730,17 @@
},
"dependencies": {
"csstype": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz",
- "integrity": "sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g==",
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
+ "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==",
"dev": true
}
}
},
- "@types/react-color": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.4.tgz",
- "integrity": "sha512-EswbYJDF1kkrx93/YU+BbBtb46CCtDMvTiGmcOa/c5PETnwTiSWoseJ1oSWeRl/4rUXkhME9bVURvvPg0W5YQw==",
- "dev": true,
- "requires": {
- "@types/react": "*",
- "@types/reactcss": "*"
- }
- },
"@types/react-syntax-highlighter": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.4.tgz",
- "integrity": "sha512-9GfTo3a0PHwQeTVoqs0g5bS28KkSY48pp5659wA+Dp4MqceDEa8EHBqrllJvvtyusszyJhViUEap0FDvlk/9Zg==",
- "dev": true,
- "requires": {
- "@types/react": "*"
- }
- },
- "@types/reactcss": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.3.tgz",
- "integrity": "sha512-d2gQQ0IL6hXLnoRfVYZukQNWHuVsE75DzFTLPUuyyEhJS8G2VvlE+qfQQ91SJjaMqlURRCNIsX7Jcsw6cEuJlA==",
+ "version": "11.0.5",
+ "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz",
+ "integrity": "sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==",
"dev": true,
"requires": {
"@types/react": "*"
@@ -38333,9 +35765,9 @@
"dev": true
},
"@types/tapable": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz",
- "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.7.tgz",
+ "integrity": "sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ==",
"dev": true
},
"@types/uglify-js": {
@@ -38362,14 +35794,14 @@
"dev": true
},
"@types/webpack": {
- "version": "4.41.26",
- "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.26.tgz",
- "integrity": "sha512-7ZyTfxjCRwexh+EJFwRUM+CDB2XvgHl4vfuqf1ZKrgGvcS5BrNvPQqJh3tsZ0P6h6Aa1qClVHaJZszLPzpqHeA==",
+ "version": "4.41.27",
+ "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.27.tgz",
+ "integrity": "sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA==",
"dev": true,
"requires": {
"@types/anymatch": "*",
"@types/node": "*",
- "@types/tapable": "*",
+ "@types/tapable": "^1",
"@types/uglify-js": "*",
"@types/webpack-sources": "*",
"source-map": "^0.6.0"
@@ -38415,6 +35847,18 @@
"integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==",
"dev": true
},
+ "@typescript-eslint/eslint-plugin": {
+ "version": "2.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz",
+ "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/experimental-utils": "2.34.0",
+ "functional-red-black-tree": "^1.0.1",
+ "regexpp": "^3.0.0",
+ "tsutils": "^3.17.1"
+ }
+ },
"@typescript-eslint/experimental-utils": {
"version": "2.34.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz",
@@ -38425,18 +35869,18 @@
"@typescript-eslint/typescript-estree": "2.34.0",
"eslint-scope": "^5.0.0",
"eslint-utils": "^2.0.0"
- },
- "dependencies": {
- "eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- }
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "2.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz",
+ "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==",
+ "dev": true,
+ "requires": {
+ "@types/eslint-visitor-keys": "^1.0.0",
+ "@typescript-eslint/experimental-utils": "2.34.0",
+ "@typescript-eslint/typescript-estree": "2.34.0",
+ "eslint-visitor-keys": "^1.1.0"
}
},
"@typescript-eslint/typescript-estree": {
@@ -38684,10 +36128,9 @@
}
},
"acorn": {
- "version": "5.7.4",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
- "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
- "dev": true
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
},
"acorn-globals": {
"version": "4.3.4",
@@ -38708,23 +36151,10 @@
}
},
"acorn-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
- "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
- "dev": true,
- "peer": true,
- "requires": {
- "acorn": "^3.0.4"
- },
- "dependencies": {
- "acorn": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
- "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
- "dev": true,
- "peer": true
- }
- }
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
+ "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
+ "dev": true
},
"acorn-node": {
"version": "1.8.2",
@@ -38736,11 +36166,6 @@
"xtend": "^4.0.2"
},
"dependencies": {
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
- },
"acorn-walk": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
@@ -38827,41 +36252,28 @@
}
},
"ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
- "peer": true,
"requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
+ "fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
- },
- "dependencies": {
- "fast-deep-equal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
- "dev": true,
- "peer": true
- }
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
}
},
"ajv-errors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"ajv-keywords": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
- "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
- "dev": true,
- "peer": true,
- "requires": {}
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true
},
"alphanum-sort": {
"version": "1.0.2",
@@ -39065,18 +36477,18 @@
}
},
"ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
"requires": {
- "type-fest": "^0.11.0"
+ "type-fest": "^0.21.3"
},
"dependencies": {
"type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
+ "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==",
"dev": true
}
}
@@ -39189,6 +36601,21 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"requires": {
"color-convert": "^1.9.0"
+ },
+ "dependencies": {
+ "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="
+ }
}
},
"ansi-to-html": {
@@ -39272,12 +36699,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -39330,6 +36751,32 @@
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"argparse": {
@@ -39555,9 +37002,9 @@
},
"dependencies": {
"tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
"dev": true
}
}
@@ -39575,9 +37022,9 @@
"dev": true
},
"async": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
- "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
+ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
"dev": true
},
"async-each": {
@@ -39633,13 +37080,30 @@
"caniuse-lite": "^1.0.30000792",
"electron-to-chromium": "^1.3.30"
}
+ },
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
}
}
},
"aws-sdk": {
- "version": "2.870.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.870.0.tgz",
- "integrity": "sha512-pbNO+RuEx45aaEZind0Tl9NADxncLJf0mRAwof0szyYMB+FZm165yz7FCxFLumU4R9qw8vOG5YFACBaNoQkJdg==",
+ "version": "2.899.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.899.0.tgz",
+ "integrity": "sha512-k8jSANDQGvTyyj1f/7Hj4SWaV61/gjj/BopRmavAr6n1ayjXtUeVrV8G29+ABD3V82pHXDqLq47bqNmZ9m86xQ==",
"dev": true,
"requires": {
"buffer": "4.9.2",
@@ -39666,9 +37130,9 @@
"dev": true
},
"axe-core": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.3.tgz",
- "integrity": "sha512-vwPpH4Aj4122EW38mxO/fxhGKtwWTMLDIJfZ1He0Edbtjcfna/R3YB67yVhezUMzqc3Jr3+Ii50KRntlENL4xQ==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.0.tgz",
+ "integrity": "sha512-1uIESzroqpaTzt9uX48HO+6gfnKu3RwvWdCcWSrX4csMInJfCo1yvKPNXCwXFRpJqRW25tiASb6No0YH57PXqg==",
"dev": true
},
"axobject-query": {
@@ -39688,12 +37152,6 @@
"js-tokens": "^3.0.2"
},
"dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
@@ -39719,15 +37177,6 @@
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
},
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
@@ -39736,74 +37185,6 @@
}
}
},
- "babel-core": {
- "version": "6.26.3",
- "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
- "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
- "dev": true,
- "peer": true,
- "requires": {
- "babel-code-frame": "^6.26.0",
- "babel-generator": "^6.26.0",
- "babel-helpers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-register": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "convert-source-map": "^1.5.1",
- "debug": "^2.6.9",
- "json5": "^0.5.1",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.4",
- "path-is-absolute": "^1.0.1",
- "private": "^0.1.8",
- "slash": "^1.0.0",
- "source-map": "^0.5.7"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "peer": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "json5": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
- "dev": true,
- "peer": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true,
- "peer": true
- },
- "slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
- "dev": true,
- "peer": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "peer": true
- }
- }
- },
"babel-eslint": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
@@ -39827,92 +37208,6 @@
"babylon": "^6.18.0"
}
},
- "babel-generator": {
- "version": "6.26.1",
- "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
- "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
- "dev": true,
- "peer": true,
- "requires": {
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "detect-indent": "^4.0.0",
- "jsesc": "^1.3.0",
- "lodash": "^4.17.4",
- "source-map": "^0.5.7",
- "trim-right": "^1.0.1"
- },
- "dependencies": {
- "jsesc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
- "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
- "dev": true,
- "peer": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "peer": true
- }
- }
- },
- "babel-helper-evaluate-path": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz",
- "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==",
- "dev": true
- },
- "babel-helper-flip-expressions": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz",
- "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=",
- "dev": true
- },
- "babel-helper-is-nodes-equiv": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz",
- "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=",
- "dev": true
- },
- "babel-helper-is-void-0": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz",
- "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=",
- "dev": true
- },
- "babel-helper-mark-eval-scopes": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz",
- "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=",
- "dev": true
- },
- "babel-helper-remove-or-void": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz",
- "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=",
- "dev": true
- },
- "babel-helper-to-multiple-sequence-expressions": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz",
- "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==",
- "dev": true
- },
- "babel-helpers": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
- "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
- "dev": true,
- "peer": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
"babel-jest": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz",
@@ -39951,6 +37246,25 @@
"pkg-dir": "^4.1.0"
}
},
+ "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"
+ }
+ },
"make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -39959,19 +37273,27 @@
"requires": {
"semver": "^6.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==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
}
}
},
- "babel-messages": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
- "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
- "dev": true,
- "peer": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
"babel-plugin-add-react-displayname": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz",
@@ -40005,6 +37327,30 @@
"source-map": "^0.5.7"
},
"dependencies": {
+ "babel-plugin-macros": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
+ "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "cosmiconfig": "^6.0.0",
+ "resolve": "^1.12.0"
+ }
+ },
+ "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": {
+ "@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"
+ }
+ },
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -40052,6 +37398,12 @@
"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": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
}
}
},
@@ -40065,159 +37417,50 @@
}
},
"babel-plugin-macros": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
- "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.0.1.tgz",
+ "integrity": "sha512-CKt4+Oy9k2wiN+hT1uZzOw7d8zb1anbQpf7KLwaaXRCi/4pzKdFKHf7v5mvoPmjkmxshh7eKZQuRop06r5WP4w==",
"dev": true,
"requires": {
- "@babel/runtime": "^7.7.2",
- "cosmiconfig": "^6.0.0",
- "resolve": "^1.12.0"
- }
- },
- "babel-plugin-minify-builtins": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz",
- "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==",
- "dev": true
- },
- "babel-plugin-minify-constant-folding": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz",
- "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==",
- "dev": true,
- "requires": {
- "babel-helper-evaluate-path": "^0.5.0"
- }
- },
- "babel-plugin-minify-dead-code-elimination": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz",
- "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==",
- "dev": true,
- "requires": {
- "babel-helper-evaluate-path": "^0.5.0",
- "babel-helper-mark-eval-scopes": "^0.4.3",
- "babel-helper-remove-or-void": "^0.4.3",
- "lodash": "^4.17.11"
- }
- },
- "babel-plugin-minify-flip-comparisons": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz",
- "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=",
- "dev": true,
- "requires": {
- "babel-helper-is-void-0": "^0.4.3"
- }
- },
- "babel-plugin-minify-guarded-expressions": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz",
- "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==",
- "dev": true,
- "requires": {
- "babel-helper-evaluate-path": "^0.5.0",
- "babel-helper-flip-expressions": "^0.4.3"
- }
- },
- "babel-plugin-minify-infinity": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz",
- "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=",
- "dev": true
- },
- "babel-plugin-minify-mangle-names": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz",
- "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==",
- "dev": true,
- "requires": {
- "babel-helper-mark-eval-scopes": "^0.4.3"
- }
- },
- "babel-plugin-minify-numeric-literals": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz",
- "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=",
- "dev": true
- },
- "babel-plugin-minify-replace": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz",
- "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==",
- "dev": true
- },
- "babel-plugin-minify-simplify": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz",
- "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==",
- "dev": true,
- "requires": {
- "babel-helper-evaluate-path": "^0.5.0",
- "babel-helper-flip-expressions": "^0.4.3",
- "babel-helper-is-nodes-equiv": "^0.0.1",
- "babel-helper-to-multiple-sequence-expressions": "^0.5.0"
- }
- },
- "babel-plugin-minify-type-constructors": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz",
- "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=",
- "dev": true,
- "requires": {
- "babel-helper-is-void-0": "^0.4.3"
- }
- },
- "babel-plugin-module-resolver": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz",
- "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==",
- "dev": true,
- "peer": true,
- "requires": {
- "find-babel-config": "^1.1.0",
- "glob": "^7.1.2",
- "pkg-up": "^2.0.0",
- "reselect": "^3.0.1",
- "resolve": "^1.4.0"
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
}
},
"babel-plugin-named-asset-import": {
"version": "0.3.7",
"resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz",
"integrity": "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"babel-plugin-polyfill-corejs2": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz",
- "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz",
+ "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.13.0",
- "@babel/helper-define-polyfill-provider": "^0.1.5",
+ "@babel/compat-data": "^7.13.11",
+ "@babel/helper-define-polyfill-provider": "^0.2.0",
"semver": "^6.1.1"
}
},
"babel-plugin-polyfill-corejs3": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
- "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz",
+ "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==",
"dev": true,
"requires": {
- "@babel/helper-define-polyfill-provider": "^0.1.5",
- "core-js-compat": "^3.8.1"
+ "@babel/helper-define-polyfill-provider": "^0.2.0",
+ "core-js-compat": "^3.9.1"
}
},
"babel-plugin-polyfill-regenerator": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz",
- "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz",
+ "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==",
"dev": true,
"requires": {
- "@babel/helper-define-polyfill-provider": "^0.1.5"
+ "@babel/helper-define-polyfill-provider": "^0.2.0"
}
},
"babel-plugin-react-docgen": {
@@ -40254,30 +37497,6 @@
"integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
"dev": true
},
- "babel-plugin-transform-inline-consecutive-adds": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz",
- "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=",
- "dev": true
- },
- "babel-plugin-transform-member-expression-literals": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz",
- "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=",
- "dev": true
- },
- "babel-plugin-transform-merge-sibling-variables": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz",
- "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=",
- "dev": true
- },
- "babel-plugin-transform-minify-booleans": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz",
- "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=",
- "dev": true
- },
"babel-plugin-transform-object-rest-spread": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
@@ -40288,60 +37507,12 @@
"babel-runtime": "^6.26.0"
}
},
- "babel-plugin-transform-property-literals": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz",
- "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
"babel-plugin-transform-react-remove-prop-types": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz",
"integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==",
"dev": true
},
- "babel-plugin-transform-regexp-constructors": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz",
- "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=",
- "dev": true
- },
- "babel-plugin-transform-remove-console": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz",
- "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=",
- "dev": true
- },
- "babel-plugin-transform-remove-debugger": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz",
- "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=",
- "dev": true
- },
- "babel-plugin-transform-remove-undefined": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz",
- "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==",
- "dev": true,
- "requires": {
- "babel-helper-evaluate-path": "^0.5.0"
- }
- },
- "babel-plugin-transform-simplify-comparison-operators": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz",
- "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=",
- "dev": true
- },
- "babel-plugin-transform-undefined-to-void": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz",
- "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=",
- "dev": true
- },
"babel-preset-jest": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz",
@@ -40352,37 +37523,6 @@
"babel-plugin-jest-hoist": "^24.9.0"
}
},
- "babel-preset-minify": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz",
- "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==",
- "dev": true,
- "requires": {
- "babel-plugin-minify-builtins": "^0.5.0",
- "babel-plugin-minify-constant-folding": "^0.5.0",
- "babel-plugin-minify-dead-code-elimination": "^0.5.1",
- "babel-plugin-minify-flip-comparisons": "^0.4.3",
- "babel-plugin-minify-guarded-expressions": "^0.4.4",
- "babel-plugin-minify-infinity": "^0.4.3",
- "babel-plugin-minify-mangle-names": "^0.5.0",
- "babel-plugin-minify-numeric-literals": "^0.4.3",
- "babel-plugin-minify-replace": "^0.5.0",
- "babel-plugin-minify-simplify": "^0.5.1",
- "babel-plugin-minify-type-constructors": "^0.4.3",
- "babel-plugin-transform-inline-consecutive-adds": "^0.4.3",
- "babel-plugin-transform-member-expression-literals": "^6.9.4",
- "babel-plugin-transform-merge-sibling-variables": "^6.9.4",
- "babel-plugin-transform-minify-booleans": "^6.9.4",
- "babel-plugin-transform-property-literals": "^6.9.4",
- "babel-plugin-transform-regexp-constructors": "^0.4.3",
- "babel-plugin-transform-remove-console": "^6.9.4",
- "babel-plugin-transform-remove-debugger": "^6.9.4",
- "babel-plugin-transform-remove-undefined": "^0.5.0",
- "babel-plugin-transform-simplify-comparison-operators": "^6.9.4",
- "babel-plugin-transform-undefined-to-void": "^6.9.4",
- "lodash": "^4.17.11"
- }
- },
"babel-preset-react-app": {
"version": "9.1.2",
"resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.1.2.tgz",
@@ -40601,6 +37741,30 @@
"regenerator-runtime": "^0.13.4"
}
},
+ "babel-plugin-macros": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
+ "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "cosmiconfig": "^6.0.0",
+ "resolve": "^1.12.0"
+ }
+ },
+ "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": {
+ "@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"
+ }
+ },
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -40615,48 +37779,6 @@
}
}
},
- "babel-register": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
- "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
- "dev": true,
- "peer": true,
- "requires": {
- "babel-core": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "home-or-tmp": "^2.0.0",
- "lodash": "^4.17.4",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.4.15"
- },
- "dependencies": {
- "core-js": {
- "version": "2.6.12",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
- "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
- "dev": true,
- "peer": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "peer": true
- },
- "source-map-support": {
- "version": "0.4.18",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
- "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
- "dev": true,
- "peer": true,
- "requires": {
- "source-map": "^0.5.6"
- }
- }
- }
- },
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
@@ -40678,86 +37800,6 @@
}
}
},
- "babel-template": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
- "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
- "dev": true,
- "peer": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-traverse": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
- "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
- "dev": true,
- "peer": true,
- "requires": {
- "babel-code-frame": "^6.26.0",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "debug": "^2.6.8",
- "globals": "^9.18.0",
- "invariant": "^2.2.2",
- "lodash": "^4.17.4"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "peer": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "globals": {
- "version": "9.18.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
- "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
- "dev": true,
- "peer": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true,
- "peer": true
- }
- }
- },
- "babel-types": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
- "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
- "dev": true,
- "peer": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "esutils": "^2.0.2",
- "lodash": "^4.17.4",
- "to-fast-properties": "^1.0.3"
- },
- "dependencies": {
- "to-fast-properties": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
- "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
- "dev": true,
- "peer": true
- }
- }
- },
"babylon": {
"version": "6.18.0",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
@@ -40770,9 +37812,9 @@
"integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
},
"balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"base": {
"version": "0.11.2",
@@ -40887,6 +37929,21 @@
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
+ },
+ "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
+ },
+ "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"
+ }
}
}
},
@@ -41006,21 +38063,6 @@
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -41076,6 +38118,28 @@
"through2": "^2.0.0"
},
"dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -41196,6 +38260,15 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
+ },
+ "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"
+ }
}
}
},
@@ -41209,15 +38282,15 @@
}
},
"browserslist": {
- "version": "4.16.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
- "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
+ "version": "4.16.6",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
+ "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
"requires": {
- "caniuse-lite": "^1.0.30001181",
- "colorette": "^1.2.1",
- "electron-to-chromium": "^1.3.649",
+ "caniuse-lite": "^1.0.30001219",
+ "colorette": "^1.2.2",
+ "electron-to-chromium": "^1.3.723",
"escalade": "^3.1.1",
- "node-releases": "^1.1.70"
+ "node-releases": "^1.1.71"
}
},
"bser": {
@@ -41365,22 +38438,12 @@
}
},
"caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
"dev": true,
- "peer": true,
"requires": {
- "callsites": "^0.2.0"
- },
- "dependencies": {
- "callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
- "dev": true,
- "peer": true
- }
+ "caller-callsite": "^2.0.0"
}
},
"callsites": {
@@ -41423,9 +38486,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001204",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz",
- "integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ=="
+ "version": "1.0.30001221",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001221.tgz",
+ "integrity": "sha512-b9TOZfND3uGSLjMOrLh8XxSQ41x8mX+9MLJYDM4AAHLfaZHttrLNPrScWjVnBITRZbY5sPpCt7X85n7VSLZ+/g=="
},
"capture-exit": {
"version": "2.0.0",
@@ -41533,9 +38596,9 @@
},
"dependencies": {
"anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
@@ -41617,13 +38680,10 @@
"dev": true
},
"chrome-trace-event": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
- "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
- "dev": true,
- "requires": {
- "tslib": "^1.9.0"
- }
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "dev": true
},
"ci-info": {
"version": "2.0.0",
@@ -41645,15 +38705,7 @@
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz",
"integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==",
- "dev": true,
- "requires": {}
- },
- "circular-json": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
- "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
- "dev": true,
- "peer": true
+ "dev": true
},
"class-utils": {
"version": "0.3.6",
@@ -41683,6 +38735,17 @@
"dev": true,
"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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-data-descriptor": {
@@ -41692,6 +38755,17 @@
"dev": true,
"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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-descriptor": {
@@ -41703,22 +38777,20 @@
"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==",
- "dev": true
- }
}
+ },
+ "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==",
+ "dev": true
}
}
},
"classnames": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
- "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
+ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
},
"clean-css": {
"version": "4.2.3",
@@ -41825,23 +38897,14 @@
}
},
"clone-deep": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-1.0.0.tgz",
- "integrity": "sha512-hmJRX8x1QOJVV+GUjOBzi6iauhPqc9hIF6xitWRBbiPZOBb6vGo/mDRIK9P74RTKSQK7AE8B0DDWY/vpRrPmQw==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
"requires": {
- "for-own": "^1.0.0",
"is-plain-object": "^2.0.4",
- "kind-of": "^5.0.0",
- "shallow-clone": "^1.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==",
- "dev": true
- }
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
}
},
"clsx": {
@@ -41873,9 +38936,9 @@
"dev": true
},
"codemirror": {
- "version": "5.60.0",
- "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.60.0.tgz",
- "integrity": "sha512-AEL7LhFOlxPlCL8IdTcJDblJm8yrAGib7I+DErJPdZd4l6imx8IMgKK3RblVgBQqz3TZJR4oknQ03bz+uNjBYA=="
+ "version": "5.61.0",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.61.0.tgz",
+ "integrity": "sha512-D3wYH90tYY1BsKlUe0oNj2JAhQ9TepkD51auk3N7q+4uz7A/cgJ5JsWHreT0PqieW1QhOuqxQ2reCXV1YXzecg=="
},
"collection-visit": {
"version": "1.0.0",
@@ -41894,20 +38957,35 @@
"requires": {
"color-convert": "^1.9.1",
"color-string": "^1.5.4"
+ },
+ "dependencies": {
+ "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="
+ }
}
},
"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==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"requires": {
- "color-name": "1.1.3"
+ "color-name": "~1.1.4"
}
},
"color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"color-string": {
"version": "1.5.5",
@@ -41948,6 +39026,21 @@
"color-convert": "^1.9.1",
"color-string": "^1.5.2"
}
+ },
+ "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
}
}
},
@@ -42078,6 +39171,30 @@
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"confusing-browser-globals": {
@@ -42201,31 +39318,6 @@
"webpack-log": "^2.0.0"
},
"dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -42240,18 +39332,18 @@
}
},
"core-js": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.9.1.tgz",
- "integrity": "sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg==",
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.11.2.tgz",
+ "integrity": "sha512-3tfrrO1JpJSYGKnd9LKTBPqgUES/UYiCzMKeqwR1+jF16q4kD1BY2NvqkfuzXwQ6+CIWm55V9cjD7PQd+hijdw==",
"dev": true
},
"core-js-compat": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.1.tgz",
- "integrity": "sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA==",
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.2.tgz",
+ "integrity": "sha512-gYhNwu7AJjecNtRrIfyoBabQ3ZG+llfPmg9BifIX8yxIpDyfNLRM73zIjINSm6z3dMdI1nwNC9C7uiy4pIC6cw==",
"dev": true,
"requires": {
- "browserslist": "^4.16.3",
+ "browserslist": "^4.16.6",
"semver": "7.0.0"
},
"dependencies": {
@@ -42264,9 +39356,9 @@
}
},
"core-js-pure": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.9.1.tgz",
- "integrity": "sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A==",
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.11.2.tgz",
+ "integrity": "sha512-DQxdEKm+zFsnON7ZGOgUAQXBt1UJJ01tOzN/HgQ7cNf0oEHW1tcBLfCQQd1q6otdLu5gAdvKYxKHAoXGwE/kiQ==",
"dev": true
},
"core-util-is": {
@@ -42275,16 +39367,16 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
+ "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
"dev": true,
"requires": {
"@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
+ "import-fresh": "^3.2.1",
"parse-json": "^5.0.0",
"path-type": "^4.0.0",
- "yaml": "^1.7.2"
+ "yaml": "^1.10.0"
}
},
"country-data": {
@@ -42408,12 +39500,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -42508,43 +39594,22 @@
}
},
"cross-fetch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.2.tgz",
- "integrity": "sha512-+JhD65rDNqLbGmB3Gzs3HrEKC0aQnD+XA3SY6RjgkF88jV2q5cTc5+CwxlS3sdmLk98gpPt5CF9XRnPdlxZe6w==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz",
+ "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==",
"requires": {
"node-fetch": "2.6.1"
}
},
"cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
- "peer": true,
"requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "dev": true,
- "peer": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
- "dev": true,
- "peer": true
- }
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
}
},
"crypto-browserify": {
@@ -42602,34 +39667,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.5"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"css-color-names": {
@@ -42646,34 +39683,6 @@
"requires": {
"postcss": "^7.0.1",
"timsort": "^0.3.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"css-has-pseudo": {
@@ -42692,17 +39701,6 @@
"integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
"dev": true
},
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-selector-parser": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
@@ -42713,21 +39711,6 @@
"indexes-of": "^1.0.1",
"uniq": "^1.0.1"
}
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -42752,37 +39735,11 @@
"semver": "^6.3.0"
},
"dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-value-parser": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -42793,34 +39750,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.5"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"css-select": {
@@ -42882,26 +39811,17 @@
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
},
"cssnano": {
- "version": "4.1.10",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
- "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz",
+ "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==",
"dev": true,
"requires": {
"cosmiconfig": "^5.0.0",
- "cssnano-preset-default": "^4.0.7",
+ "cssnano-preset-default": "^4.0.8",
"is-resolvable": "^1.0.0",
"postcss": "^7.0.0"
},
"dependencies": {
- "caller-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
- "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
- "dev": true,
- "requires": {
- "caller-callsite": "^2.0.0"
- }
- },
"cosmiconfig": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
@@ -42934,44 +39854,18 @@
"json-parse-better-errors": "^1.0.1"
}
},
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"resolve-from": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
"dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
"cssnano-preset-default": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
- "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz",
+ "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==",
"dev": true,
"requires": {
"css-declaration-sorter": "^4.0.1",
@@ -43002,36 +39896,8 @@
"postcss-ordered-values": "^4.1.2",
"postcss-reduce-initial": "^4.0.3",
"postcss-reduce-transforms": "^4.0.2",
- "postcss-svgo": "^4.0.2",
+ "postcss-svgo": "^4.0.3",
"postcss-unique-selectors": "^4.0.1"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"cssnano-util-get-arguments": {
@@ -43053,34 +39919,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"cssnano-util-same-parent": {
@@ -43099,9 +39937,9 @@
},
"dependencies": {
"css-tree": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz",
- "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
"dev": true,
"requires": {
"mdn-data": "2.0.14",
@@ -43138,9 +39976,9 @@
}
},
"csstype": {
- "version": "2.6.16",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.16.tgz",
- "integrity": "sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q==",
+ "version": "2.6.17",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz",
+ "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==",
"dev": true
},
"currency-symbol-map": {
@@ -43299,9 +40137,9 @@
}
},
"date-fns": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.19.0.tgz",
- "integrity": "sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg=="
+ "version": "2.21.1",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.21.1.tgz",
+ "integrity": "sha512-m1WR0xGiC6j6jNFAyW4Nvh4WxAi4JF4w9jRJwSI8nBmNcyZXPcP9VUQG+6gHQXAmqaGEKDKhOqAtENDC941UkA=="
},
"date-now": {
"version": "0.1.4",
@@ -43387,6 +40225,12 @@
"integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==",
"dev": true
},
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true
+ },
"default-gateway": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
@@ -43532,16 +40376,6 @@
"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
"dev": true
},
- "detect-indent": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
- "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
- "dev": true,
- "peer": true,
- "requires": {
- "repeating": "^2.0.0"
- }
- },
"detect-newline": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
@@ -43718,18 +40552,19 @@
}
},
"doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
"dev": true,
"requires": {
- "esutils": "^2.0.2"
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
}
},
"dom-align": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz",
- "integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA=="
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.1.tgz",
+ "integrity": "sha512-CdTD9EdA5WviP8oO3n+okOm0Xt7dSuWxRTLcJiW0memwUr3Tvz66JDDCh9cb50IZFHXvBmLoyX454uJU/EVg+g=="
},
"dom-converter": {
"version": "0.2.0",
@@ -43741,18 +40576,18 @@
}
},
"dom-helpers": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz",
- "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
"requires": {
"@babel/runtime": "^7.8.7",
"csstype": "^3.0.2"
},
"dependencies": {
"csstype": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz",
- "integrity": "sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g=="
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
+ "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw=="
}
}
},
@@ -43766,9 +40601,9 @@
},
"dependencies": {
"domelementtype": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
- "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w=="
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
},
"entities": {
"version": "2.2.0",
@@ -43850,9 +40685,9 @@
}
},
"tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
"dev": true
}
}
@@ -43905,15 +40740,15 @@
}
},
"downshift": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.1.tgz",
- "integrity": "sha512-ch8Sh/j7gVqQd7Kcv3A5TkGfldmxmlQrRPZJYWEhzh24+h7WA4vXssuhcGNJrD8YPJlZYQGHcaX8BNhS0IcOvg==",
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.3.tgz",
+ "integrity": "sha512-RA1MuaNcTbt0j+sVLhSs8R2oZbBXYAtdQP/V+uHhT3DoDteZzJPjlC+LQVm9T07Wpvo84QXaZtUCePLDTDwGXg==",
"dev": true,
"requires": {
- "@babel/runtime": "^7.12.5",
+ "@babel/runtime": "^7.13.10",
"compute-scroll-into-view": "^1.0.17",
"prop-types": "^15.7.2",
- "react-is": "^17.0.1"
+ "react-is": "^17.0.2"
}
},
"duplexer": {
@@ -43928,6 +40763,30 @@
"integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
"requires": {
"readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"duplexify": {
@@ -43940,6 +40799,32 @@
"inherits": "^2.0.1",
"readable-stream": "^2.0.0",
"stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"ecc-jsbn": {
@@ -43959,18 +40844,15 @@
"dev": true
},
"ejs": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
- "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==",
- "dev": true,
- "requires": {
- "jake": "^10.6.1"
- }
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
+ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
+ "dev": true
},
"electron-to-chromium": {
- "version": "1.3.698",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.698.tgz",
- "integrity": "sha512-VEXDzYblnlT+g8Q3gedwzgKOso1evkeJzV8lih7lV8mL8eAnGVnKyC3KsFT6S+R5PQO4ffdr1PI16/ElibY/kQ=="
+ "version": "1.3.726",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.726.tgz",
+ "integrity": "sha512-dw7WmrSu/JwtACiBzth8cuKf62NKL1xVJuNvyOg0jvruN/n4NLtGYoTzciQquCPNaS2eR+BT5GrxHbslfc/w1w=="
},
"element-resize-detector": {
"version": "1.2.2",
@@ -44060,9 +40942,9 @@
}
},
"engine.io-client": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.1.2.tgz",
- "integrity": "sha512-1mwvwKYMa0AaCy+sPgvJ/SnKyO5MJZ1HEeXfA3Rm/KHkHGiYD5bQVq8QzvIrkI01FuVtOdZC5lWdRw1BGXB2NQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.1.3.tgz",
+ "integrity": "sha512-C3JYYyvna0FvSKOWGWpo0/EQ6MayO8uEKam1oedLZRpxLego9Fk6K3UH/Phieu1xPHauM7YqAygJ+6SraVc0Qg==",
"requires": {
"base64-arraybuffer": "0.1.4",
"component-emitter": "~1.3.0",
@@ -44077,10 +40959,9 @@
},
"dependencies": {
"ws": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
- "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
- "requires": {}
+ "version": "7.4.5",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz",
+ "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g=="
}
}
},
@@ -44112,6 +40993,30 @@
"errno": "^0.1.3",
"readable-stream": "^2.0.1"
}
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
}
}
},
@@ -44303,196 +41208,162 @@
}
},
"eslint": {
- "version": "4.19.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
- "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
+ "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
"dev": true,
- "peer": true,
"requires": {
- "ajv": "^5.3.0",
- "babel-code-frame": "^6.22.0",
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.10.0",
"chalk": "^2.1.0",
- "concat-stream": "^1.6.0",
- "cross-spawn": "^5.1.0",
- "debug": "^3.1.0",
- "doctrine": "^2.1.0",
- "eslint-scope": "^3.7.1",
- "eslint-visitor-keys": "^1.0.0",
- "espree": "^3.5.4",
- "esquery": "^1.0.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^1.4.3",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.1.2",
+ "esquery": "^1.0.1",
"esutils": "^2.0.2",
- "file-entry-cache": "^2.0.0",
+ "file-entry-cache": "^5.0.1",
"functional-red-black-tree": "^1.0.1",
- "glob": "^7.1.2",
- "globals": "^11.0.1",
- "ignore": "^3.3.3",
+ "glob-parent": "^5.0.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
- "inquirer": "^3.0.6",
- "is-resolvable": "^1.0.0",
- "js-yaml": "^3.9.1",
+ "inquirer": "^7.0.0",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.3.0",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.2",
+ "lodash": "^4.17.14",
+ "minimatch": "^3.0.4",
"mkdirp": "^0.5.1",
"natural-compare": "^1.4.0",
- "optionator": "^0.8.2",
- "path-is-inside": "^1.0.2",
- "pluralize": "^7.0.0",
+ "optionator": "^0.8.3",
"progress": "^2.0.0",
- "regexpp": "^1.0.1",
- "require-uncached": "^1.0.3",
- "semver": "^5.3.0",
- "strip-ansi": "^4.0.0",
- "strip-json-comments": "~2.0.1",
- "table": "4.0.2",
- "text-table": "~0.2.0"
+ "regexpp": "^2.0.1",
+ "semver": "^6.1.2",
+ "strip-ansi": "^5.2.0",
+ "strip-json-comments": "^3.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
},
"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==",
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
- "peer": true
- },
- "chardet": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
- "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
- "dev": true,
- "peer": true
- },
- "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=",
- "dev": true,
- "peer": true,
"requires": {
- "restore-cursor": "^2.0.0"
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
}
},
- "cli-width": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
- "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
- "peer": true
- },
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "peer": true,
"requires": {
- "ms": "^2.1.1"
+ "esutils": "^2.0.2"
}
},
- "external-editor": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
- "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "eslint-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
"dev": true,
- "peer": true,
"requires": {
- "chardet": "^0.4.0",
- "iconv-lite": "^0.4.17",
- "tmp": "^0.0.33"
+ "eslint-visitor-keys": "^1.1.0"
}
},
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
- "peer": true,
"requires": {
- "escape-string-regexp": "^1.0.5"
+ "is-glob": "^4.0.1"
}
},
- "inquirer": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
- "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "globals": {
+ "version": "12.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
+ "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
"dev": true,
- "peer": true,
"requires": {
- "ansi-escapes": "^3.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"
+ "type-fest": "^0.8.1"
}
},
- "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=",
- "dev": true,
- "peer": true
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "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,
- "peer": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
- "dev": true,
- "peer": true
- },
- "onetime": {
+ "path-key": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
- "peer": true,
"requires": {
- "mimic-fn": "^1.0.0"
+ "shebang-regex": "^1.0.0"
}
},
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
- "peer": true,
"requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
+ "ansi-regex": "^4.1.0"
}
},
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "peer": true
+ "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==",
+ "dev": true
},
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
- "peer": true,
"requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
+ "isexe": "^2.0.0"
}
}
}
@@ -44515,6 +41386,15 @@
"eslint-restricted-globals": "^0.1.1"
}
},
+ "eslint-config-react-app": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz",
+ "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==",
+ "dev": true,
+ "requires": {
+ "confusing-browser-globals": "^1.0.9"
+ }
+ },
"eslint-import-resolver-babel-module": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-babel-module/-/eslint-import-resolver-babel-module-4.0.0.tgz",
@@ -44552,6 +41432,47 @@
}
}
},
+ "eslint-loader": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz",
+ "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==",
+ "dev": true,
+ "requires": {
+ "fs-extra": "^8.1.0",
+ "loader-fs-cache": "^1.0.2",
+ "loader-utils": "^1.2.3",
+ "object-hash": "^2.0.1",
+ "schema-utils": "^2.6.1"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ }
+ }
+ },
"eslint-module-utils": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
@@ -44620,6 +41541,12 @@
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
"dev": true
},
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
"pkg-dir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
@@ -44631,6 +41558,15 @@
}
}
},
+ "eslint-plugin-flowtype": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz",
+ "integrity": "sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.15"
+ }
+ },
"eslint-plugin-import": {
"version": "2.22.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz",
@@ -44661,14 +41597,23 @@
"ms": "2.0.0"
}
},
- "doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "isarray": "^1.0.0"
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
}
},
"ms": {
@@ -44676,6 +41621,72 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ }
}
}
},
@@ -44699,9 +41710,9 @@
}
},
"eslint-plugin-react": {
- "version": "7.23.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz",
- "integrity": "sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz",
+ "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==",
"dev": true,
"requires": {
"array-includes": "^3.1.3",
@@ -44718,6 +41729,15 @@
"string.prototype.matchall": "^4.0.4"
},
"dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
"resolve": {
"version": "2.0.0-next.3",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz",
@@ -44734,8 +41754,7 @@
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz",
"integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"eslint-restricted-globals": {
"version": "0.1.1",
@@ -44744,13 +41763,12 @@
"dev": true
},
"eslint-scope": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
- "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
- "peer": true,
"requires": {
- "esrecurse": "^4.1.0",
+ "esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
}
},
@@ -44770,14 +41788,14 @@
"dev": true
},
"espree": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
- "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
+ "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
"dev": true,
- "peer": true,
"requires": {
- "acorn": "^5.5.0",
- "acorn-jsx": "^3.0.0"
+ "acorn": "^7.1.1",
+ "acorn-jsx": "^5.2.0",
+ "eslint-visitor-keys": "^1.1.0"
}
},
"esprima": {
@@ -44900,11 +41918,41 @@
"which": "^1.2.9"
}
},
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
}
}
},
@@ -44958,6 +42006,17 @@
"dev": true,
"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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-data-descriptor": {
@@ -44967,6 +42026,17 @@
"dev": true,
"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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-descriptor": {
@@ -44978,16 +42048,14 @@
"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==",
- "dev": true
- }
}
},
+ "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==",
+ "dev": true
+ },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -45160,11 +42228,6 @@
"object-keys": "^1.0.6"
},
"dependencies": {
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
- },
"isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
@@ -45296,9 +42359,9 @@
"integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ=="
},
"fecha": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz",
- "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
+ "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==",
"dev": true
},
"figgy-pudding": {
@@ -45317,14 +42380,12 @@
}
},
"file-entry-cache": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
- "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
"dev": true,
- "peer": true,
"requires": {
- "flat-cache": "^1.2.1",
- "object-assign": "^4.0.1"
+ "flat-cache": "^2.0.1"
}
},
"file-loader": {
@@ -45337,31 +42398,6 @@
"schema-utils": "^3.0.0"
},
"dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
@@ -45427,15 +42463,6 @@
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"dev": true
},
- "filelist": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz",
- "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==",
- "dev": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
"filesize": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz",
@@ -45486,26 +42513,6 @@
}
}
},
- "find-babel-config": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz",
- "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==",
- "dev": true,
- "peer": true,
- "requires": {
- "json5": "^0.5.1",
- "path-exists": "^3.0.0"
- },
- "dependencies": {
- "json5": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
- "dev": true,
- "peer": true
- }
- }
- },
"find-cache-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
@@ -45545,6 +42552,12 @@
"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": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
"pkg-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
@@ -45563,21 +42576,13 @@
"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==",
+ "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"
- },
- "dependencies": {
- "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
- }
}
},
"findup-sync": {
@@ -45621,12 +42626,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -45651,16 +42650,14 @@
}
},
"flat-cache": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
- "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
"dev": true,
- "peer": true,
"requires": {
- "circular-json": "^0.3.1",
- "graceful-fs": "^4.1.2",
- "rimraf": "~2.6.2",
- "write": "^0.2.1"
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
},
"dependencies": {
"rimraf": {
@@ -45668,7 +42665,6 @@
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
- "peer": true,
"requires": {
"glob": "^7.1.3"
}
@@ -45701,6 +42697,32 @@
"requires": {
"inherits": "^2.0.3",
"readable-stream": "^2.3.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"flux": {
@@ -45719,9 +42741,9 @@
"dev": true
},
"follow-redirects": {
- "version": "1.13.3",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz",
- "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==",
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.0.tgz",
+ "integrity": "sha512-0vRwd7RKQBTt+mgu87mtYeofLFZpTas2S9zY+jIeuLJMNvudIgF52nr19q40HOwH5RrhWIPuj9puybzSJiRrVg==",
"dev": true
},
"for-in": {
@@ -45731,9 +42753,9 @@
"dev": true
},
"for-own": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
- "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
"dev": true,
"requires": {
"for-in": "^1.0.1"
@@ -45751,80 +42773,106 @@
"dev": true
},
"fork-ts-checker-webpack-plugin": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
- "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
+ "version": "6.2.6",
+ "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.6.tgz",
+ "integrity": "sha512-f/oF2BFFPKEWQ3wgfq4bWALSDm7+f21shVONplo1xHKs1IdMfdmDa/aREgEurkIyrsyMFed42W7NVp4mh4DXzg==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.5.5",
- "chalk": "^2.4.1",
- "micromatch": "^3.1.10",
+ "@babel/code-frame": "^7.8.3",
+ "@types/json-schema": "^7.0.5",
+ "chalk": "^4.1.0",
+ "chokidar": "^3.4.2",
+ "cosmiconfig": "^6.0.0",
+ "deepmerge": "^4.2.2",
+ "fs-extra": "^9.0.0",
+ "glob": "^7.1.6",
+ "memfs": "^3.1.2",
"minimatch": "^3.0.4",
- "semver": "^5.6.0",
- "tapable": "^1.0.0",
- "worker-rpc": "^0.1.0"
+ "schema-utils": "2.7.0",
+ "semver": "^7.3.2",
+ "tapable": "^1.0.0"
},
"dependencies": {
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
+ "color-convert": "^2.0.1"
}
},
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "chalk": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
}
},
- "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==",
+ "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": {
- "is-plain-object": "^2.0.4"
+ "@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"
}
},
- "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==",
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "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,
"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"
+ "yallist": "^4.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
+ "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.4",
+ "ajv": "^6.12.2",
+ "ajv-keywords": "^3.4.1"
}
},
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
}
}
@@ -45875,6 +42923,32 @@
"requires": {
"inherits": "^2.0.1",
"readable-stream": "^2.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"fs-extra": {
@@ -45898,6 +42972,12 @@
"minipass": "^3.0.0"
}
},
+ "fs-monkey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
+ "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
+ "dev": true
+ },
"fs-readdir-recursive": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
@@ -45979,12 +43059,6 @@
"wide-align": "^1.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=",
- "dev": true
- },
"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",
@@ -46004,15 +43078,6 @@
"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=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
}
}
},
@@ -46183,11 +43248,14 @@
"which": "^1.3.1"
},
"dependencies": {
- "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
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
}
}
},
@@ -46292,32 +43360,12 @@
"requires": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
- },
- "dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- }
}
},
"harmony-reflect": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz",
- "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz",
+ "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==",
"dev": true
},
"has": {
@@ -46451,6 +43499,15 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
+ },
+ "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"
+ }
}
}
},
@@ -46496,9 +43553,9 @@
"dev": true
},
"highlight.js": {
- "version": "10.7.1",
- "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.1.tgz",
- "integrity": "sha512-S6G97tHGqJ/U8DsXcEdnACbirtbx58Bx9CzIVeYli8OuswCfYI/LsXH2EiGcoGio1KAC3x4mmUwulOllJ2ZyRA=="
+ "version": "10.7.2",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.2.tgz",
+ "integrity": "sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg=="
},
"history": {
"version": "4.10.1",
@@ -46539,17 +43596,6 @@
}
}
},
- "home-or-tmp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
- "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
- "dev": true,
- "peer": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.1"
- }
- },
"homedir-polyfill": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
@@ -46566,9 +43612,9 @@
"dev": true
},
"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": "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
},
"hpack.js": {
@@ -46581,6 +43627,32 @@
"obuf": "^1.0.0",
"readable-stream": "^2.0.1",
"wbuf": "^1.1.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"hsl-regex": {
@@ -46595,12 +43667,6 @@
"integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
"dev": true
},
- "html-comment-regex": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
- "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
- "dev": true
- },
"html-encoding-sniffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
@@ -46681,9 +43747,9 @@
}
},
"tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
"dev": true
}
}
@@ -46756,27 +43822,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
"integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY="
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
- },
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
@@ -46865,12 +43910,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -46927,34 +43966,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.14"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"identity-obj-proxy": {
@@ -47077,6 +44088,12 @@
"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": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
"pkg-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
@@ -47103,7 +44120,8 @@
"indexes-of": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
},
"infer-owner": {
"version": "1.0.4",
@@ -47174,30 +44192,15 @@
}
},
"chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -47290,14 +44293,6 @@
"dev": true,
"requires": {
"kind-of": "^6.0.0"
- },
- "dependencies": {
- "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
- }
}
},
"is-alphabetical": {
@@ -47390,9 +44385,9 @@
}
},
"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.3.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz",
+ "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==",
"requires": {
"has": "^1.0.3"
}
@@ -47404,14 +44399,6 @@
"dev": true,
"requires": {
"kind-of": "^6.0.0"
- },
- "dependencies": {
- "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
- }
}
},
"is-date-object": {
@@ -47434,14 +44421,6 @@
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
"kind-of": "^6.0.2"
- },
- "dependencies": {
- "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
- }
}
},
"is-directory": {
@@ -47451,9 +44430,9 @@
"dev": true
},
"is-docker": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
- "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true
},
"is-extendable": {
@@ -47468,13 +44447,6 @@
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
},
- "is-finite": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
- "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
- "dev": true,
- "peer": 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",
@@ -47527,6 +44499,17 @@
"dev": true,
"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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-number-object": {
@@ -47625,15 +44608,6 @@
"integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
"dev": true
},
- "is-svg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
- "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
- "dev": true,
- "requires": {
- "html-comment-regex": "^1.1.0"
- }
- },
"is-symbol": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
@@ -47776,18 +44750,6 @@
"iterate-iterator": "^1.0.1"
}
},
- "jake": {
- "version": "10.8.2",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
- "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
- "dev": true,
- "requires": {
- "async": "0.9.x",
- "chalk": "^2.4.2",
- "filelist": "^1.0.1",
- "minimatch": "^3.0.4"
- }
- },
"jest": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz",
@@ -47881,6 +44843,12 @@
"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": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -47996,12 +44964,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -48234,12 +45196,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -48354,12 +45310,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -48396,8 +45346,7 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"jest-regex-util": {
"version": "24.9.0",
@@ -48538,6 +45487,12 @@
"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": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -48820,6 +45775,12 @@
"xml-name-validator": "^3.0.0"
},
"dependencies": {
+ "acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+ "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
+ "dev": true
+ },
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
@@ -48847,18 +45808,6 @@
"minimatch": "~3.0.2",
"shelljs": "0.3.x",
"strip-json-comments": "1.0.x"
- },
- "dependencies": {
- "shelljs": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
- "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E="
- },
- "strip-json-comments": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
- "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E="
- }
}
},
"json-parse-better-errors": {
@@ -48880,11 +45829,10 @@
"dev": true
},
"json-schema-traverse": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
- "dev": true,
- "peer": true
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
},
"json-stable-stringify": {
"version": "1.0.1",
@@ -48984,13 +45932,10 @@
"dev": true
},
"kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
+ "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
},
"klaw": {
"version": "1.3.1",
@@ -49007,6 +45952,12 @@
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true
},
+ "klona": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz",
+ "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==",
+ "dev": true
+ },
"koalas": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/koalas/-/koalas-1.0.2.tgz",
@@ -49219,12 +46170,12 @@
}
},
"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"
}
},
"lodash": {
@@ -49462,19 +46413,9 @@
}
},
"markdown-to-jsx": {
- "version": "6.11.4",
- "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz",
- "integrity": "sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==",
- "dev": true,
- "requires": {
- "prop-types": "^15.6.2",
- "unquote": "^1.1.0"
- }
- },
- "material-colors": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz",
- "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.2.tgz",
+ "integrity": "sha512-O8DMCl32V34RrD+ZHxcAPc2+kYytuDIoQYjY36RVdsLK7uHjgNVvFec4yv0X6LgB4YEZgSvK5QtFi5YVqEpoMA==",
"dev": true
},
"math-expression-evaluator": {
@@ -49511,6 +46452,15 @@
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
"dev": true
},
+ "memfs": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz",
+ "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==",
+ "dev": true,
+ "requires": {
+ "fs-monkey": "1.0.3"
+ }
+ },
"memoizerific": {
"version": "1.11.3",
"resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz",
@@ -49528,6 +46478,32 @@
"requires": {
"errno": "^0.1.3",
"readable-stream": "^2.0.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"merge-deep": {
@@ -49554,13 +46530,13 @@
"shallow-clone": "^0.1.2"
}
},
- "for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "for-in": "^1.0.1"
+ "is-buffer": "^1.1.5"
}
},
"lazy-cache": {
@@ -49646,13 +46622,13 @@
"dev": true
},
"micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
"dev": true,
"requires": {
"braces": "^3.0.1",
- "picomatch": "^2.0.5"
+ "picomatch": "^2.2.3"
},
"dependencies": {
"braces": {
@@ -49715,18 +46691,18 @@
"dev": true
},
"mime-db": {
- "version": "1.46.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
- "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
+ "version": "1.47.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
+ "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==",
"dev": true
},
"mime-types": {
- "version": "2.1.29",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
- "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
+ "version": "2.1.30",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
+ "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
"dev": true,
"requires": {
- "mime-db": "1.46.0"
+ "mime-db": "1.47.0"
}
},
"mimic-fn": {
@@ -49762,31 +46738,6 @@
"webpack-sources": "^1.1.0"
},
"dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -49843,14 +46794,6 @@
"through2": "^3.0.1",
"xml": "^1.0.0",
"xml2js": "^0.4.15"
- },
- "dependencies": {
- "async": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
- "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
- "dev": true
- }
}
},
"minipass": {
@@ -49933,6 +46876,30 @@
"through2": "^2.0.0"
},
"dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -49994,15 +46961,14 @@
}
},
"mobx": {
- "version": "6.1.8",
- "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.1.8.tgz",
- "integrity": "sha512-U4yCvUeh6yKXRwFxm2lyJjXPVekOEar/R8ZKWAXem/3fthJqYflViawfjDAUh7lZEvbKqljC3NT/pSaUKpE+gg=="
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.3.0.tgz",
+ "integrity": "sha512-Aa1+VXsg4WxqJMTQfWoYuJi5UD10VZhiobSmcs5kcmI3BIT0aVtn7DysvCeDADCzl7dnbX+0BTHUj/v7gLlZpQ=="
},
"mobx-react-lite": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.2.0.tgz",
- "integrity": "sha512-q5+UHIqYCOpBoFm/PElDuOhbcatvTllgRp3M1s+Hp5j0Z6XNgDbgqxawJ0ZAUEyKM8X1zs70PCuhAIzX1f4Q/g==",
- "requires": {}
+ "integrity": "sha512-q5+UHIqYCOpBoFm/PElDuOhbcatvTllgRp3M1s+Hp5j0Z6XNgDbgqxawJ0ZAUEyKM8X1zs70PCuhAIzX1f4Q/g=="
},
"moment": {
"version": "2.29.1",
@@ -50121,12 +47087,6 @@
"requires": {
"is-plain-object": "^2.0.4"
}
- },
- "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
}
}
},
@@ -50266,6 +47226,49 @@
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true
},
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.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"
+ },
+ "dependencies": {
+ "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
+ }
+ }
+ },
"url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
@@ -50316,6 +47319,15 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
}
}
},
@@ -50365,18 +47377,6 @@
"prepend-http": "^1.0.0",
"query-string": "^4.1.0",
"sort-keys": "^1.0.0"
- },
- "dependencies": {
- "query-string": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
- "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
- "dev": true,
- "requires": {
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
- }
- }
}
},
"normalize.css": {
@@ -50391,6 +47391,14 @@
"dev": true,
"requires": {
"path-key": "^2.0.0"
+ },
+ "dependencies": {
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ }
}
},
"npmlog": {
@@ -50498,6 +47506,15 @@
"dev": true
}
}
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
}
}
},
@@ -50507,9 +47524,9 @@
"integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ=="
},
"object-inspect": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
- "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==",
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz",
+ "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==",
"dev": true
},
"object-is": {
@@ -50740,13 +47757,6 @@
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true
},
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true,
- "peer": true
- },
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
@@ -50827,12 +47837,23 @@
}
},
"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==",
+ "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": "^2.2.0"
+ "p-limit": "^3.0.2"
+ },
+ "dependencies": {
+ "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": {
+ "yocto-queue": "^0.1.0"
+ }
+ }
}
},
"p-map": {
@@ -50889,6 +47910,32 @@
"cyclist": "^1.0.1",
"inherits": "^2.0.3",
"readable-stream": "^2.1.5"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"param-case": {
@@ -51006,9 +48053,9 @@
}
},
"tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
"dev": true
}
}
@@ -51032,9 +48079,9 @@
"dev": true
},
"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": {
@@ -51049,9 +48096,9 @@
"dev": true
},
"path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
"path-parse": {
@@ -51072,9 +48119,9 @@
"dev": true
},
"pbkdf2": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
- "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
"dev": true,
"requires": {
"create-hash": "^1.1.2",
@@ -51090,9 +48137,9 @@
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
+ "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==",
"dev": true
},
"pify": {
@@ -51126,12 +48173,12 @@
}
},
"pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
+ "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
"dev": true,
"requires": {
- "find-up": "^4.0.0"
+ "find-up": "^5.0.0"
}
},
"pkg-up": {
@@ -51185,16 +48232,15 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
"dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
}
}
},
- "pluralize": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
- "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
- "dev": true,
- "peer": true
- },
"pn": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
@@ -51217,12 +48263,12 @@
"dev": true
},
"polished": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/polished/-/polished-3.7.1.tgz",
- "integrity": "sha512-/QgHrNGYwIA4mwxJ/7FSvalUJsm7KNfnXiScVSEG2Xa5qxDeBn4nmdjN2pW00mkM2Tts64ktc47U8F7Ed1BRAA==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.2.tgz",
+ "integrity": "sha512-jq4t3PJUpVRcveC53nnbEX35VyQI05x3tniwp26WFdm1dwaNUBHAi5awa/roBlwQxx1uRhwNSYeAi/aMbfiJCQ==",
"dev": true,
"requires": {
- "@babel/runtime": "^7.12.5"
+ "@babel/runtime": "^7.13.17"
}
},
"popper.js": {
@@ -51268,19 +48314,27 @@
"dev": true
},
"postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "version": "7.0.35",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+ "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
"requires": {
- "chalk": "^2.4.1",
+ "chalk": "^2.4.2",
"source-map": "^0.6.1",
- "supports-color": "^5.4.0"
+ "supports-color": "^6.1.0"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
}
}
},
@@ -51292,34 +48346,6 @@
"requires": {
"postcss": "^7.0.2",
"postcss-selector-parser": "^6.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-browser-comments": {
@@ -51329,34 +48355,6 @@
"dev": true,
"requires": {
"postcss": "^7"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-calc": {
@@ -51370,37 +48368,11 @@
"postcss-value-parser": "^4.0.2"
},
"dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-value-parser": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -51412,34 +48384,6 @@
"requires": {
"postcss": "^7.0.2",
"postcss-values-parser": "^2.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-color-gray": {
@@ -51451,34 +48395,6 @@
"@csstools/convert-colors": "^1.4.0",
"postcss": "^7.0.5",
"postcss-values-parser": "^2.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-color-hex-alpha": {
@@ -51489,34 +48405,6 @@
"requires": {
"postcss": "^7.0.14",
"postcss-values-parser": "^2.0.1"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-color-mod-function": {
@@ -51528,34 +48416,6 @@
"@csstools/convert-colors": "^1.4.0",
"postcss": "^7.0.2",
"postcss-values-parser": "^2.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-color-rebeccapurple": {
@@ -51566,34 +48426,6 @@
"requires": {
"postcss": "^7.0.2",
"postcss-values-parser": "^2.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-colormin": {
@@ -51607,34 +48439,6 @@
"has": "^1.0.0",
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-convert-values": {
@@ -51645,34 +48449,6 @@
"requires": {
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-custom-media": {
@@ -51682,34 +48458,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.14"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-custom-properties": {
@@ -51720,34 +48468,6 @@
"requires": {
"postcss": "^7.0.17",
"postcss-values-parser": "^2.0.1"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-custom-selectors": {
@@ -51766,17 +48486,6 @@
"integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
"dev": true
},
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-selector-parser": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
@@ -51787,21 +48496,6 @@
"indexes-of": "^1.0.1",
"uniq": "^1.0.1"
}
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -51821,17 +48515,6 @@
"integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
"dev": true
},
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-selector-parser": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
@@ -51842,21 +48525,6 @@
"indexes-of": "^1.0.1",
"uniq": "^1.0.1"
}
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -51867,34 +48535,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-discard-duplicates": {
@@ -51904,34 +48544,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-discard-empty": {
@@ -51941,34 +48553,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-discard-overridden": {
@@ -51978,34 +48562,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-double-position-gradients": {
@@ -52016,34 +48572,6 @@
"requires": {
"postcss": "^7.0.5",
"postcss-values-parser": "^2.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-env-function": {
@@ -52054,34 +48582,6 @@
"requires": {
"postcss": "^7.0.2",
"postcss-values-parser": "^2.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-flexbugs-fixes": {
@@ -52091,34 +48591,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.26"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-focus-visible": {
@@ -52128,34 +48600,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-focus-within": {
@@ -52165,34 +48609,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-font-variant": {
@@ -52202,34 +48618,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-functions": {
@@ -52241,6 +48629,23 @@
"object-assign": "^4.1.1",
"postcss": "^6.0.9",
"postcss-value-parser": "^3.3.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
}
},
"postcss-gap-properties": {
@@ -52250,34 +48655,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-image-set-function": {
@@ -52288,34 +48665,6 @@
"requires": {
"postcss": "^7.0.2",
"postcss-values-parser": "^2.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-import": {
@@ -52328,72 +48677,15 @@
"postcss-value-parser": "^3.2.3",
"read-cache": "^1.0.0",
"resolve": "^1.1.7"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-initial": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz",
- "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz",
+ "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==",
"dev": true,
"requires": {
- "lodash.template": "^4.5.0",
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-inline-svg": {
@@ -52433,6 +48725,17 @@
"readable-stream": "^3.1.1"
}
},
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@@ -52443,6 +48746,27 @@
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
+ },
+ "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
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "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"
+ }
}
}
},
@@ -52453,31 +48777,6 @@
"requires": {
"camelcase-css": "^2.0.1",
"postcss": "^7.0.18"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-lab-function": {
@@ -52489,34 +48788,6 @@
"@csstools/convert-colors": "^1.4.0",
"postcss": "^7.0.2",
"postcss-values-parser": "^2.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-load-config": {
@@ -52529,15 +48800,6 @@
"import-cwd": "^2.0.0"
},
"dependencies": {
- "caller-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
- "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
- "dev": true,
- "requires": {
- "caller-callsite": "^2.0.0"
- }
- },
"cosmiconfig": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
@@ -52590,42 +48852,6 @@
"schema-utils": "^1.0.0"
},
"dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -52636,21 +48862,6 @@
"ajv-errors": "^1.0.0",
"ajv-keywords": "^3.1.0"
}
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -52661,34 +48872,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-media-minmax": {
@@ -52698,34 +48881,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-merge-longhand": {
@@ -52738,34 +48893,6 @@
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0",
"stylehacks": "^4.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-merge-rules": {
@@ -52782,17 +48909,6 @@
"vendors": "^1.0.0"
},
"dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-selector-parser": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
@@ -52803,21 +48919,6 @@
"indexes-of": "^1.0.1",
"uniq": "^1.0.1"
}
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -52829,34 +48930,6 @@
"requires": {
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-minify-gradients": {
@@ -52869,34 +48942,6 @@
"is-color-stop": "^1.0.0",
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-minify-params": {
@@ -52911,34 +48956,6 @@
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0",
"uniqs": "^2.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-minify-selectors": {
@@ -52953,17 +48970,6 @@
"postcss-selector-parser": "^3.0.0"
},
"dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-selector-parser": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
@@ -52974,21 +48980,6 @@
"indexes-of": "^1.0.1",
"uniq": "^1.0.1"
}
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -53085,12 +49076,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -53121,17 +49106,6 @@
"pify": "^3.0.0"
}
},
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-simple-vars": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-5.0.2.tgz",
@@ -53146,21 +49120,6 @@
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
"dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -53171,34 +49130,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.5"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-modules-local-by-default": {
@@ -53213,37 +49144,11 @@
"postcss-value-parser": "^4.1.0"
},
"dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-value-parser": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -53255,34 +49160,6 @@
"requires": {
"postcss": "^7.0.6",
"postcss-selector-parser": "^6.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-modules-values": {
@@ -53293,34 +49170,6 @@
"requires": {
"icss-utils": "^4.0.0",
"postcss": "^7.0.6"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-nested": {
@@ -53330,31 +49179,6 @@
"requires": {
"postcss": "^7.0.32",
"postcss-selector-parser": "^6.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-nesting": {
@@ -53364,6 +49188,25 @@
"dev": true,
"requires": {
"postcss": "^6.0.11"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
}
},
"postcss-normalize": {
@@ -53377,34 +49220,6 @@
"postcss": "^7.0.17",
"postcss-browser-comments": "^3.0.0",
"sanitize.css": "^10.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-normalize-charset": {
@@ -53414,34 +49229,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-normalize-display-values": {
@@ -53453,34 +49240,6 @@
"cssnano-util-get-match": "^4.0.0",
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-normalize-positions": {
@@ -53493,34 +49252,6 @@
"has": "^1.0.0",
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-normalize-repeat-style": {
@@ -53533,34 +49264,6 @@
"cssnano-util-get-match": "^4.0.0",
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-normalize-string": {
@@ -53572,34 +49275,6 @@
"has": "^1.0.0",
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-normalize-timing-functions": {
@@ -53611,34 +49286,6 @@
"cssnano-util-get-match": "^4.0.0",
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-normalize-unicode": {
@@ -53650,34 +49297,6 @@
"browserslist": "^4.0.0",
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-normalize-url": {
@@ -53697,32 +49316,6 @@
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
"integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
"dev": true
- },
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -53734,34 +49327,6 @@
"requires": {
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-ordered-values": {
@@ -53773,34 +49338,6 @@
"cssnano-util-get-arguments": "^4.0.0",
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-overflow-shorthand": {
@@ -53810,34 +49347,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-page-break": {
@@ -53847,34 +49356,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-place": {
@@ -53885,34 +49366,6 @@
"requires": {
"postcss": "^7.0.2",
"postcss-values-parser": "^2.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-preset-env": {
@@ -53975,17 +49428,6 @@
"postcss-value-parser": "^4.1.0"
}
},
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-nesting": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz",
@@ -54000,21 +49442,6 @@
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -54034,17 +49461,6 @@
"integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
"dev": true
},
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-selector-parser": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
@@ -54055,21 +49471,6 @@
"indexes-of": "^1.0.1",
"uniq": "^1.0.1"
}
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -54083,34 +49484,6 @@
"caniuse-api": "^3.0.0",
"has": "^1.0.0",
"postcss": "^7.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-reduce-transforms": {
@@ -54123,34 +49496,6 @@
"has": "^1.0.0",
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-replace-overflow-wrap": {
@@ -54160,34 +49505,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-safe-parser": {
@@ -54197,34 +49514,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-selector-matches": {
@@ -54235,34 +49524,6 @@
"requires": {
"balanced-match": "^1.0.0",
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-selector-not": {
@@ -54273,44 +49534,14 @@
"requires": {
"balanced-match": "^1.0.0",
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-selector-parser": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz",
- "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz",
+ "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==",
"requires": {
"cssesc": "^3.0.0",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1",
"util-deprecate": "^1.0.2"
}
},
@@ -54321,29 +49552,17 @@
"dev": true,
"requires": {
"postcss": "^6.0.9"
- }
- },
- "postcss-svgo": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
- "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
- "dev": true,
- "requires": {
- "is-svg": "^3.0.0",
- "postcss": "^7.0.0",
- "postcss-value-parser": "^3.0.0",
- "svgo": "^1.0.0"
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
"dev": true,
"requires": {
- "chalk": "^2.4.2",
+ "chalk": "^2.4.1",
"source-map": "^0.6.1",
- "supports-color": "^6.1.0"
+ "supports-color": "^5.4.0"
}
},
"source-map": {
@@ -54351,18 +49570,20 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
+ "postcss-svgo": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz",
+ "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
+ }
+ },
"postcss-unique-selectors": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
@@ -54372,34 +49593,6 @@
"alphanum-sort": "^1.0.0",
"postcss": "^7.0.0",
"uniqs": "^2.0.0"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-value-parser": {
@@ -54479,13 +49672,6 @@
"clipboard": "^2.0.0"
}
},
- "private": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
- "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
- "dev": true,
- "peer": true
- },
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -54620,17 +49806,6 @@
"toggle-array": "^1.0.1"
},
"dependencies": {
- "clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- }
- },
"define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
@@ -54646,21 +49821,6 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-6.0.0.tgz",
"integrity": "sha512-Wu1VHeILBK8KAWJUAiSZQX94GmOE45Rg6/538fKwiloUu21KncEkYGPqob2oSZ5mUT73vLGrHQjKw3KMPwfDzg==",
"dev": true
- },
- "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
- },
- "shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.2"
- }
}
}
},
@@ -54689,6 +49849,18 @@
"prompt-choices": "^4.0.5"
},
"dependencies": {
+ "clone-deep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-1.0.0.tgz",
+ "integrity": "sha512-hmJRX8x1QOJVV+GUjOBzi6iauhPqc9hIF6xitWRBbiPZOBb6vGo/mDRIK9P74RTKSQK7AE8B0DDWY/vpRrPmQw==",
+ "dev": true,
+ "requires": {
+ "for-own": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^5.0.0",
+ "shallow-clone": "^1.0.0"
+ }
+ },
"debug": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
@@ -54698,18 +49870,38 @@
"ms": "^2.1.1"
}
},
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
"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==",
"dev": true
+ },
+ "shallow-clone": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
+ "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.1",
+ "kind-of": "^5.0.0",
+ "mixin-object": "^2.0.1"
+ }
}
}
},
"prompts": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
- "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz",
+ "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==",
"dev": true,
"requires": {
"kleur": "^3.0.3",
@@ -54758,13 +49950,6 @@
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
"dev": true
},
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
- "dev": true,
- "peer": true
- },
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
@@ -54893,6 +50078,16 @@
"side-channel": "^1.0.4"
}
},
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
"querystring": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
@@ -54927,6 +50122,28 @@
"through2": "^2.0.0"
},
"dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -55010,31 +50227,6 @@
"schema-utils": "^3.0.0"
},
"dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
@@ -55194,37 +50386,25 @@
}
},
"react-circular-progressbar": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/react-circular-progressbar/-/react-circular-progressbar-2.0.3.tgz",
- "integrity": "sha512-YKN+xAShXA3gYihevbQZbavfiJxo83Dt1cUxqg/cltj4VVsRQpDr7Fg1mvjDG3x1KHGtd9NmYKvJ2mMrPwbKyw==",
- "requires": {}
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/react-circular-progressbar/-/react-circular-progressbar-2.0.4.tgz",
+ "integrity": "sha512-OfX0ThSxRYEVGaQSt0DlXfyl5w4DbXHsXetyeivmoQrh9xA9bzVPHNf8aAhOIiwiaxX2WYWpLDB3gcpsDJ9oww=="
},
"react-codemirror2": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/react-codemirror2/-/react-codemirror2-5.1.0.tgz",
- "integrity": "sha512-Cksbgbviuf2mJfMyrKmcu7ycK6zX/ukuQO8dvRZdFWqATf5joalhjFc6etnBdGCcPA2LbhIwz+OPnQxLN/j1Fw==",
- "requires": {}
+ "integrity": "sha512-Cksbgbviuf2mJfMyrKmcu7ycK6zX/ukuQO8dvRZdFWqATf5joalhjFc6etnBdGCcPA2LbhIwz+OPnQxLN/j1Fw=="
},
- "react-color": {
- "version": "2.19.3",
- "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz",
- "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==",
- "dev": true,
- "requires": {
- "@icons/material": "^0.2.4",
- "lodash": "^4.17.15",
- "lodash-es": "^4.17.15",
- "material-colors": "^1.2.1",
- "prop-types": "^15.5.10",
- "reactcss": "^1.2.0",
- "tinycolor2": "^1.4.1"
- }
+ "react-colorful": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.1.4.tgz",
+ "integrity": "sha512-WOEpRNz8Oo2SEU4eYQ279jEKFSjpFPa9Vi2U/K0DGwP9wOQ8wYkJcNSd5Qbv1L8OFvyKDCbWekjftXaU5mbmtg==",
+ "dev": true
},
"react-confirm": {
"version": "0.1.23",
"resolved": "https://registry.npmjs.org/react-confirm/-/react-confirm-0.1.23.tgz",
- "integrity": "sha512-G853O0XapIQXF0bx2iFWBLgGIzCu2ZjGJWJp0IFMNoim89yh/cz6i/xcSM/N8zKLWIvrVAWm/Zn/w3d5E7uv3g==",
- "requires": {}
+ "integrity": "sha512-G853O0XapIQXF0bx2iFWBLgGIzCu2ZjGJWJp0IFMNoim89yh/cz6i/xcSM/N8zKLWIvrVAWm/Zn/w3d5E7uv3g=="
},
"react-datepicker": {
"version": "2.16.0",
@@ -55323,15 +50503,14 @@
"node-releases": "^1.1.61"
}
},
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
"requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
}
},
"dir-glob": {
@@ -55349,6 +50528,41 @@
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true
},
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "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"
+ }
+ },
+ "fork-ts-checker-webpack-plugin": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
+ "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "chalk": "^2.4.1",
+ "micromatch": "^3.1.10",
+ "minimatch": "^3.0.4",
+ "semver": "^5.6.0",
+ "tapable": "^1.0.0",
+ "worker-rpc": "^0.1.0"
+ }
+ },
"globby": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
@@ -55369,6 +50583,15 @@
"integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
"dev": true
},
+ "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==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
@@ -55381,30 +50604,44 @@
}
},
"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"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "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"
}
},
"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"
}
},
- "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
- },
"pkg-up": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
@@ -55422,22 +50659,48 @@
"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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "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==",
+ "prompts": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
+ "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
"dev": true,
"requires": {
- "shebang-regex": "^3.0.0"
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
}
},
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"slash": {
@@ -55454,15 +50717,6 @@
"requires": {
"ansi-regex": "^5.0.0"
}
- },
- "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"
- }
}
}
},
@@ -55528,11 +50782,10 @@
}
},
"react-docgen-typescript": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-1.21.0.tgz",
- "integrity": "sha512-E4y/OcXwHukgiVafCGlxwoNHr4BDmM70Ww7oimL/QkMo5dmGALhceewe/xmVjdMxxI7E5syOGOc9/tbHL742rg==",
- "dev": true,
- "requires": {}
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-1.22.0.tgz",
+ "integrity": "sha512-MPLbF8vzRwAG3GcjdL+OHQlhgtWsLTXs+7uJiHfEeT3Ur7IsZaNYqRTLQ9sj2nB6M6jylcPCeCmH7qbszJmecg==",
+ "dev": true
},
"react-docgen-typescript-plugin": {
"version": "0.6.3",
@@ -55548,9 +50801,9 @@
},
"dependencies": {
"tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
"dev": true
}
}
@@ -55618,15 +50871,6 @@
"highlight.js": "^10.5.0"
}
},
- "react-hotkeys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/react-hotkeys/-/react-hotkeys-2.0.0.tgz",
- "integrity": "sha512-3n3OU8vLX/pfcJrR3xJ1zlww6KS1kEJt0Whxc4FiGV+MJrQ1mYSYI3qS/11d2MJDFm8IhOXMTFQirfu6AVOF6Q==",
- "dev": true,
- "requires": {
- "prop-types": "^15.6.1"
- }
- },
"react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -55670,8 +50914,7 @@
"react-lazyload": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/react-lazyload/-/react-lazyload-3.2.0.tgz",
- "integrity": "sha512-zJlrG8QyVZz4+xkYZH5v1w3YaP5wEFaYSUWC4CT9UXfK75IfRAIEdnyIUF+dXr3kX2MOtL1lUaZmaQZqrETwgw==",
- "requires": {}
+ "integrity": "sha512-zJlrG8QyVZz4+xkYZH5v1w3YaP5wEFaYSUWC4CT9UXfK75IfRAIEdnyIUF+dXr3kX2MOtL1lUaZmaQZqrETwgw=="
},
"react-lifecycles-compat": {
"version": "3.0.4",
@@ -55681,8 +50924,7 @@
"react-onclickoutside": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.10.0.tgz",
- "integrity": "sha512-7i2L3ef+0ILXpL6P+Hg304eCQswh4jl3ynwR71BSlMU49PE2uk31k8B2GkP6yE9s2D4jTGKnzuSpzWxu4YxfQQ==",
- "requires": {}
+ "integrity": "sha512-7i2L3ef+0ILXpL6P+Hg304eCQswh4jl3ynwR71BSlMU49PE2uk31k8B2GkP6yE9s2D4jTGKnzuSpzWxu4YxfQQ=="
},
"react-popper": {
"version": "1.3.11",
@@ -55710,9 +50952,9 @@
},
"dependencies": {
"react-popper": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.4.tgz",
- "integrity": "sha512-NacOu4zWupdQjVXq02XpTD3yFPSfg5a7fex0wa3uGKVkFK7UN6LvVxgcb+xYr56UCuWiNPMH20tntdVdJRwYew==",
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz",
+ "integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==",
"dev": true,
"requires": {
"react-fast-compare": "^3.0.1",
@@ -55914,30 +51156,6 @@
"integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
"dev": true
},
- "@typescript-eslint/eslint-plugin": {
- "version": "2.34.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz",
- "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==",
- "dev": true,
- "requires": {
- "@typescript-eslint/experimental-utils": "2.34.0",
- "functional-red-black-tree": "^1.0.1",
- "regexpp": "^3.0.0",
- "tsutils": "^3.17.1"
- }
- },
- "@typescript-eslint/parser": {
- "version": "2.34.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz",
- "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==",
- "dev": true,
- "requires": {
- "@types/eslint-visitor-keys": "^1.0.0",
- "@typescript-eslint/experimental-utils": "2.34.0",
- "@typescript-eslint/typescript-estree": "2.34.0",
- "eslint-visitor-keys": "^1.1.0"
- }
- },
"@webassemblyjs/ast": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
@@ -56115,37 +51333,11 @@
}
},
"acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
+ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
"dev": true
},
- "acorn-jsx": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
- "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
- "dev": true,
- "requires": {}
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
"aria-query": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz",
@@ -56211,17 +51403,6 @@
"rimraf": "^2.7.1",
"ssri": "^7.0.0",
"unique-filename": "^1.1.1"
- },
- "dependencies": {
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
}
},
"case-sensitive-paths-webpack-plugin": {
@@ -56257,6 +51438,15 @@
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
}
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
}
}
},
@@ -56267,24 +51457,14 @@
"dev": true
},
"cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
+ "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
"dev": true,
"requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
}
},
"css-loader": {
@@ -56351,99 +51531,6 @@
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true
},
- "eslint": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
- "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "ajv": "^6.10.0",
- "chalk": "^2.1.0",
- "cross-spawn": "^6.0.5",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "eslint-scope": "^5.0.0",
- "eslint-utils": "^1.4.3",
- "eslint-visitor-keys": "^1.1.0",
- "espree": "^6.1.2",
- "esquery": "^1.0.1",
- "esutils": "^2.0.2",
- "file-entry-cache": "^5.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.0.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "inquirer": "^7.0.0",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.14",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.3",
- "progress": "^2.0.0",
- "regexpp": "^2.0.1",
- "semver": "^6.1.2",
- "strip-ansi": "^5.2.0",
- "strip-json-comments": "^3.0.1",
- "table": "^5.2.3",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "dependencies": {
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "regexpp": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
- "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
- "dev": true
- }
- }
- },
- "eslint-config-react-app": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz",
- "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==",
- "dev": true,
- "requires": {
- "confusing-browser-globals": "^1.0.9"
- }
- },
- "eslint-loader": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz",
- "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==",
- "dev": true,
- "requires": {
- "fs-extra": "^8.1.0",
- "loader-fs-cache": "^1.0.2",
- "loader-utils": "^1.2.3",
- "object-hash": "^2.0.1",
- "schema-utils": "^2.6.1"
- }
- },
- "eslint-plugin-flowtype": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz",
- "integrity": "sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.15"
- }
- },
"eslint-plugin-import": {
"version": "2.20.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz",
@@ -56473,16 +51560,6 @@
"ms": "2.0.0"
}
},
- "doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "isarray": "^1.0.0"
- }
- },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -56528,6 +51605,15 @@
"xregexp": "^4.3.0"
},
"dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -56541,35 +51627,15 @@
}
},
"eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
"dev": true,
"requires": {
- "esrecurse": "^4.3.0",
+ "esrecurse": "^4.1.0",
"estraverse": "^4.1.1"
}
},
- "eslint-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
- "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "espree": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
- "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.1.0"
- }
- },
"extend-shallow": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
@@ -56592,38 +51658,6 @@
"is-glob": "^4.0.0",
"merge2": "^1.2.3",
"micromatch": "^3.1.10"
- },
- "dependencies": {
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- }
- }
- },
- "file-entry-cache": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
- "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
- "dev": true,
- "requires": {
- "flat-cache": "^2.0.1"
}
},
"file-loader": {
@@ -56642,15 +51676,14 @@
"integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==",
"dev": true
},
- "flat-cache": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
- "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "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": {
- "flatted": "^2.0.0",
- "rimraf": "2.6.3",
- "write": "1.0.3"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
}
},
"fork-ts-checker-webpack-plugin": {
@@ -56695,24 +51728,6 @@
"dev": true,
"optional": true
},
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globals": {
- "version": "12.4.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
- "dev": true,
- "requires": {
- "type-fest": "^0.8.1"
- }
- },
"globby": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz",
@@ -56728,12 +51743,6 @@
"slash": "^1.0.0"
},
"dependencies": {
- "ignore": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
- "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
- "dev": true
- },
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
@@ -56742,6 +51751,12 @@
}
}
},
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
"html-webpack-plugin": {
"version": "4.0.0-beta.11",
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz",
@@ -56756,12 +51771,6 @@
"util.promisify": "1.0.0"
}
},
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
"immer": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz",
@@ -56787,6 +51796,17 @@
"string-width": "^4.1.0",
"strip-ansi": "^5.1.0",
"through": "^2.3.6"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
}
},
"is-absolute-url": {
@@ -56824,31 +51844,8 @@
"requires": {
"merge-stream": "^2.0.0",
"supports-color": "^7.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "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==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
}
},
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
@@ -56868,20 +51865,13 @@
"object.assign": "^4.1.0"
}
},
- "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
- },
"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"
}
},
"make-dir": {
@@ -56946,14 +51936,20 @@
}
},
"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-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
"path-type": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
@@ -56977,6 +51973,15 @@
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true
},
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
"pkg-up": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
@@ -56994,24 +51999,30 @@
"requires": {
"locate-path": "^3.0.0"
}
- }
- }
- },
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
}
}
@@ -57075,17 +52086,6 @@
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
"dev": true
},
- "cross-spawn": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
- "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
"json5": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
@@ -57106,21 +52106,6 @@
"json5": "^1.0.1"
}
},
- "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"
- }
- },
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -57129,23 +52114,91 @@
"requires": {
"ansi-regex": "^5.0.0"
}
- },
- "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"
- }
}
}
},
- "regexpp": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
- "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
- "dev": true
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
},
"resolve": {
"version": "1.15.0",
@@ -57156,38 +52209,12 @@
"path-parse": "^1.0.6"
}
},
- "rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "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
- },
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
"dev": true
},
- "slice-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
- "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "astral-regex": "^1.0.0",
- "is-fullwidth-code-point": "^2.0.0"
- }
- },
"sockjs": {
"version": "0.3.20",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz",
@@ -57251,53 +52278,13 @@
"minipass": "^3.1.1"
}
},
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "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==",
- "dev": true
- },
"supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
- }
- },
- "table": {
- "version": "5.4.6",
- "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
- "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
- "dev": true,
- "requires": {
- "ajv": "^6.10.2",
- "lodash": "^4.17.14",
- "slice-ansi": "^2.1.0",
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- }
+ "has-flag": "^4.0.0"
}
},
"terser-webpack-plugin": {
@@ -57406,12 +52393,6 @@
"webpack-sources": "^1.4.1"
},
"dependencies": {
- "acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true
- },
"cacache": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
@@ -57435,16 +52416,6 @@
"y18n": "^4.0.0"
}
},
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
"schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -57463,9 +52434,9 @@
"dev": true
},
"ssri": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
- "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
+ "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
"dev": true,
"requires": {
"figgy-pudding": "^3.5.1"
@@ -57531,12 +52502,6 @@
"yargs": "^13.3.2"
},
"dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
"chokidar": {
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
@@ -57568,26 +52533,11 @@
"nan": "^2.12.1"
}
},
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
},
"schema-utils": {
"version": "1.0.0",
@@ -57600,13 +52550,13 @@
"ajv-keywords": "^3.1.0"
}
},
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "has-flag": "^3.0.0"
}
}
}
@@ -57641,18 +52591,18 @@
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
}
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
}
}
},
- "write": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
- "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
- "dev": true,
- "requires": {
- "mkdirp": "^0.5.1"
- }
- },
"ws": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
@@ -57689,6 +52639,31 @@
"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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -57699,6 +52674,15 @@
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
}
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
}
}
},
@@ -57715,15 +52699,15 @@
}
},
"react-sizeme": {
- "version": "2.6.12",
- "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-2.6.12.tgz",
- "integrity": "sha512-tL4sCgfmvapYRZ1FO2VmBmjPVzzqgHA7kI8lSJ6JS6L78jXFNRdOZFpXyK6P1NBZvKPPCZxReNgzZNUajAerZw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.1.tgz",
+ "integrity": "sha512-9Hf1NLgSbny1bha77l9HwvwwxQUJxFUqi44Ih+y3evA+PezBpGdCGlnvye6avss2cIgs9PgdYgMnfuzJWn/RUw==",
"dev": true,
"requires": {
- "element-resize-detector": "^1.2.1",
+ "element-resize-detector": "^1.2.2",
"invariant": "^2.2.4",
"shallowequal": "^1.1.0",
- "throttle-debounce": "^2.1.0"
+ "throttle-debounce": "^3.0.1"
}
},
"react-smooth": {
@@ -57816,15 +52800,6 @@
"react-lifecycles-compat": "^3.0.4"
}
},
- "reactcss": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz",
- "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==",
- "dev": true,
- "requires": {
- "lodash": "^4.0.1"
- }
- },
"read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -57843,100 +52818,82 @@
}
},
"read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
"dev": true,
"requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
},
"dependencies": {
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "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
}
}
},
"read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "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,
"requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
},
"dependencies": {
"find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "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": "^2.0.0"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
}
},
"locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "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": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
+ "p-locate": "^4.1.0"
}
},
"p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "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": "^1.1.0"
+ "p-limit": "^2.2.0"
}
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
}
}
},
"readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"requires": {
"core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
}
},
"readdirp": {
@@ -57979,12 +52936,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -58005,6 +52956,30 @@
"snapdragon": "^0.8.1",
"to-regex": "^3.0.2"
}
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
}
}
},
@@ -58020,6 +52995,12 @@
"string-width": "^2.0.0"
},
"dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -58050,6 +53031,15 @@
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^4.0.0"
}
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
}
}
},
@@ -58113,22 +53103,13 @@
}
},
"recharts-scale": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.4.tgz",
- "integrity": "sha512-e7MCnuD1+gtY9N7TYxzB+QXvi4s30kvNqVbI1p5m4rf47GusEQaEHxi8zvlZkdOOZ90UhpGHcnkYlyYkUJ2JoQ==",
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
+ "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
"requires": {
"decimal.js-light": "^2.4.1"
}
},
- "rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
- "dev": true,
- "requires": {
- "resolve": "^1.1.6"
- }
- },
"recursive-readdir": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
@@ -58164,19 +53145,17 @@
}
},
"redux": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
- "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz",
+ "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==",
"requires": {
- "loose-envify": "^1.4.0",
- "symbol-observable": "^1.2.0"
+ "@babel/runtime": "^7.9.2"
}
},
"redux-immutable": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/redux-immutable/-/redux-immutable-4.0.0.tgz",
- "integrity": "sha1-Ohoy32Y2ZGK2NpHw4dw15HK7yfM=",
- "requires": {}
+ "integrity": "sha1-Ohoy32Y2ZGK2NpHw4dw15HK7yfM="
},
"redux-thunk": {
"version": "2.3.0",
@@ -58270,11 +53249,10 @@
}
},
"regexpp": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
- "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
- "dev": true,
- "peer": true
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
+ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
+ "dev": true
},
"regexpu-core": {
"version": "4.7.1",
@@ -58338,12 +53316,6 @@
"strip-ansi": "^3.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=",
- "dev": true
- },
"css-select": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
@@ -58397,21 +53369,27 @@
"util-deprecate": "^1.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=",
+ "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
+ },
+ "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": {
- "ansi-regex": "^2.0.0"
+ "safe-buffer": "~5.2.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==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
"dev": true
},
"repeat-string": {
@@ -58420,16 +53398,6 @@
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
"dev": true
},
- "repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "dev": true,
- "peer": true,
- "requires": {
- "is-finite": "^1.0.0"
- }
- },
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -58509,39 +53477,12 @@
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
},
- "require-uncached": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
- "dev": true,
- "peer": true,
- "requires": {
- "caller-path": "^0.1.0",
- "resolve-from": "^1.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
- "dev": true,
- "peer": true
- }
- }
- },
"requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
"dev": true
},
- "reselect": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz",
- "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=",
- "dev": true,
- "peer": true
- },
"resize-observer-polyfill": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
@@ -58606,6 +53547,15 @@
"is-windows": "^1.0.1",
"which": "^1.2.14"
}
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
}
}
},
@@ -58816,27 +53766,10 @@
"resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
"integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
},
- "rx-lite": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
- "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
- "dev": true,
- "peer": 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=",
- "dev": true,
- "peer": true,
- "requires": {
- "rx-lite": "*"
- }
- },
"rxjs": {
- "version": "6.6.6",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz",
- "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==",
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
@@ -58908,12 +53841,6 @@
"is-plain-object": "^2.0.4"
}
},
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -58954,34 +53881,6 @@
"neo-async": "^2.6.1",
"schema-utils": "^2.6.1",
"semver": "^6.3.0"
- },
- "dependencies": {
- "clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- }
- },
- "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
- },
- "shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.2"
- }
- }
}
},
"sax": {
@@ -59017,33 +53916,6 @@
"@types/json-schema": "^7.0.5",
"ajv": "^6.12.4",
"ajv-keywords": "^3.5.2"
- },
- "dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- }
}
},
"select": {
@@ -59293,22 +54165,12 @@
}
},
"shallow-clone": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
- "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
"requires": {
- "is-extendable": "^0.1.1",
- "kind-of": "^5.0.0",
- "mixin-object": "^2.0.1"
- },
- "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==",
- "dev": true
- }
+ "kind-of": "^6.0.2"
}
},
"shallow-copy": {
@@ -59344,18 +54206,18 @@
}
},
"shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "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": "^1.0.0"
+ "shebang-regex": "^3.0.0"
}
},
"shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"shell-quote": {
@@ -59365,23 +54227,9 @@
"dev": true
},
"shelljs": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz",
- "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==",
- "dev": true,
- "requires": {
- "glob": "^7.0.0",
- "interpret": "^1.0.0",
- "rechoir": "^0.6.2"
- },
- "dependencies": {
- "interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "dev": true
- }
- }
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
+ "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E="
},
"shellwords": {
"version": "0.1.1",
@@ -59434,12 +54282,13 @@
"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==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
"dev": true,
- "peer": true,
"requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
"is-fullwidth-code-point": "^2.0.0"
},
"dependencies": {
@@ -59447,8 +54296,7 @@
"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=",
- "dev": true,
- "peer": true
+ "dev": true
}
}
},
@@ -59493,6 +54341,17 @@
"dev": true,
"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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-data-descriptor": {
@@ -59502,6 +54361,17 @@
"dev": true,
"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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-descriptor": {
@@ -59513,16 +54383,14 @@
"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==",
- "dev": true
- }
}
},
+ "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==",
+ "dev": true
+ },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -59555,6 +54423,17 @@
"dev": true,
"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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"socket.io-client": {
@@ -59601,9 +54480,9 @@
}
},
"sockjs-client": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.0.tgz",
- "integrity": "sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz",
+ "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==",
"dev": true,
"requires": {
"debug": "^3.2.6",
@@ -59611,7 +54490,7 @@
"faye-websocket": "^0.11.3",
"inherits": "^2.0.4",
"json3": "^3.3.3",
- "url-parse": "^1.4.7"
+ "url-parse": "^1.5.1"
},
"dependencies": {
"debug": {
@@ -59757,6 +54636,21 @@
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
+ },
+ "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
+ },
+ "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"
+ }
}
}
},
@@ -59814,9 +54708,9 @@
}
},
"ssri": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
- "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
+ "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
"dev": true,
"requires": {
"figgy-pudding": "^3.5.1"
@@ -59835,9 +54729,9 @@
"dev": true
},
"stack-utils": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.4.tgz",
- "integrity": "sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz",
+ "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==",
"dev": true,
"requires": {
"escape-string-regexp": "^2.0.0"
@@ -59891,6 +54785,17 @@
"dev": true,
"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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-data-descriptor": {
@@ -59900,6 +54805,17 @@
"dev": true,
"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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-descriptor": {
@@ -59911,15 +54827,13 @@
"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==",
- "dev": true
- }
}
+ },
+ "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==",
+ "dev": true
}
}
},
@@ -59966,12 +54880,34 @@
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz",
"integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw=="
},
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"optional": true
},
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -60009,6 +54945,32 @@
"requires": {
"inherits": "~2.0.1",
"readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"stream-each": {
@@ -60032,6 +54994,32 @@
"readable-stream": "^2.3.6",
"to-arraybuffer": "^1.0.0",
"xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"stream-shift": {
@@ -60047,12 +55035,9 @@
"dev": true
},
"string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
},
"string-length": {
"version": "2.0.0",
@@ -60062,6 +55047,23 @@
"requires": {
"astral-regex": "^1.0.0",
"strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
}
},
"string-width": {
@@ -60167,18 +55169,18 @@
}
},
"strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "^2.0.0"
},
"dependencies": {
"ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"dev": true
}
}
@@ -60221,11 +55223,9 @@
}
},
"strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "dev": true,
- "peer": true
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
+ "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E="
},
"style-loader": {
"version": "0.23.1",
@@ -60237,31 +55237,6 @@
"schema-utils": "^1.0.0"
},
"dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -60286,17 +55261,6 @@
"postcss-selector-parser": "^3.0.0"
},
"dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
"postcss-selector-parser": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
@@ -60307,21 +55271,6 @@
"indexes-of": "^1.0.1",
"uniq": "^1.0.1"
}
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
@@ -60338,34 +55287,6 @@
"dev": true,
"requires": {
"postcss": "^7.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"supports-color": {
@@ -60468,36 +55389,47 @@
"integrity": "sha512-KHDsGQ4UcP+wSMaqH7wjH4DHxeHKRlmEO5jlSVCS+0x9xA4ZhdKYg/ameGF7RXaFDUcsti6Zj5s5W1Z4/YsbHA=="
},
"table": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
- "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
"dev": true,
- "peer": true,
"requires": {
- "ajv": "^5.2.3",
- "ajv-keywords": "^2.1.0",
- "chalk": "^2.1.0",
- "lodash": "^4.17.4",
- "slice-ansi": "1.0.0",
- "string-width": "^2.1.1"
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
},
"dependencies": {
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
"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=",
- "dev": true,
- "peer": true
+ "dev": true
},
"string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
- "peer": true,
"requires": {
+ "emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
}
}
}
@@ -60554,27 +55486,14 @@
}
},
"chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.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==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
"fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
@@ -60585,6 +55504,11 @@
"universalify": "^0.1.0"
}
},
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
@@ -60593,67 +55517,6 @@
"graceful-fs": "^4.1.6"
}
},
- "postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.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"
- }
- },
- "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"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "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="
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
"postcss-value-parser": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
@@ -60675,24 +55538,12 @@
}
}
},
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
"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==",
"requires": {
"has-flag": "^4.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- }
}
},
"universalify": {
@@ -60743,18 +55594,18 @@
}
},
"telejson": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.1.0.tgz",
- "integrity": "sha512-Yy0N2OV0mosmr1SCZEm3Ezhu/oi5Dbao5RqauZu4+VI5I/XtVBHXajRk0txuqbFYtKdzzWGDZFGSif9ovVLjEA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.1.1.tgz",
+ "integrity": "sha512-aU7x+nwodmODJPXhU9sC/REOcX/dx1tNbyeOFV1PCTh6e9Mj+bnyfQ7sr13zfJYya9BtpGwnUNn9Fd76Ybj2eg==",
"dev": true,
"requires": {
"@types/is-function": "^1.0.0",
"global": "^4.4.0",
"is-function": "^1.0.2",
- "is-regex": "^1.1.1",
+ "is-regex": "^1.1.2",
"is-symbol": "^1.0.3",
"isobject": "^4.0.0",
- "lodash": "^4.17.20",
+ "lodash": "^4.17.21",
"memoizerific": "^1.11.3"
},
"dependencies": {
@@ -60884,6 +55735,16 @@
"pkg-dir": "^4.1.0"
}
},
+ "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"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -60901,6 +55762,15 @@
"supports-color": "^7.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"
+ }
+ },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -60934,6 +55804,26 @@
"yocto-queue": "^0.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"
+ },
+ "dependencies": {
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ }
+ }
+ },
"p-map": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
@@ -60943,6 +55833,15 @@
"aggregate-error": "^3.0.0"
}
},
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -61046,6 +55945,12 @@
"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": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
"path-type": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
@@ -61097,9 +56002,9 @@
"dev": true
},
"throttle-debounce": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
- "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz",
+ "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==",
"dev": true
},
"through": {
@@ -61116,6 +56021,34 @@
"requires": {
"inherits": "^2.0.4",
"readable-stream": "2 || 3"
+ },
+ "dependencies": {
+ "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,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "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
+ },
+ "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"
+ }
+ }
}
},
"thunky": {
@@ -61162,12 +56095,6 @@
"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
},
- "tinycolor2": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz",
- "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==",
- "dev": true
- },
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -61202,6 +56129,17 @@
"dev": true,
"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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"to-regex": {
@@ -61315,13 +56253,6 @@
"punycode": "^2.1.0"
}
},
- "trim-right": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
- "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
- "dev": true,
- "peer": true
- },
"triple-beam": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
@@ -61335,9 +56266,9 @@
"dev": true
},
"ts-dedent": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.1.0.tgz",
- "integrity": "sha512-HbmrG+lCgk5W8LQTALxBxQRBDeAhQKRzdqVhHLUkVd5nYT+b6zDzbRMjiA8wqrWDa33X09WdnW4zEsdwQArTaw==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.1.1.tgz",
+ "integrity": "sha512-riHuwnzAUCfdIeTBNUq7+Yj+ANnrMXo/7+Z74dIdudS7ys2k8aSGMzpJRMFDF7CLwUTbtvi1ZZff/Wl+XxmqIA==",
"dev": true
},
"ts-essentials": {
@@ -61448,17 +56379,10 @@
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
- "typescript": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==",
- "dev": true,
- "peer": true
- },
"ua-parser-js": {
- "version": "0.7.25",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.25.tgz",
- "integrity": "sha512-8NFExdfI24Ny8R3Vc6+uUytP/I7dpqk3JERlvxPWlrtx5YboqCgxAXYKPAifbPLV2zKbgmmPL53ufW7mUC/VOQ=="
+ "version": "0.7.28",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
+ "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g=="
},
"uglify-js": {
"version": "3.4.10",
@@ -61485,21 +56409,21 @@
}
},
"unbox-primitive": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz",
- "integrity": "sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
+ "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
- "has-bigints": "^1.0.0",
- "has-symbols": "^1.0.0",
- "which-boxed-primitive": "^1.0.1"
+ "has-bigints": "^1.0.1",
+ "has-symbols": "^1.0.2",
+ "which-boxed-primitive": "^1.0.2"
}
},
"underscore": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz",
- "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==",
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
+ "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==",
"dev": true
},
"unfetch": {
@@ -61565,7 +56489,8 @@
"uniq": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
},
"uniqs": {
"version": "2.0.0",
@@ -61705,31 +56630,6 @@
"schema-utils": "^3.0.0"
},
"dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
@@ -61781,8 +56681,7 @@
"use-isomorphic-layout-effect": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz",
- "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==",
- "requires": {}
+ "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ=="
},
"use-latest": {
"version": "1.2.0",
@@ -62048,25 +56947,6 @@
"integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
"dev": true
},
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
"define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
@@ -62112,18 +56992,6 @@
"integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
"dev": true
},
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "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
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -62202,12 +57070,6 @@
"ws": "^6.0.0"
},
"dependencies": {
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- },
"acorn-walk": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
@@ -62220,12 +57082,6 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true
},
- "ejs": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
- "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
- "dev": true
- },
"filesize": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
@@ -62332,12 +57188,39 @@
"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": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -62367,6 +57250,15 @@
"has-flag": "^3.0.0"
}
},
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
"wrap-ansi": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
@@ -62470,31 +57362,6 @@
"yargs": "^13.3.2"
},
"dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
"chokidar": {
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
@@ -62526,12 +57393,6 @@
"wrap-ansi": "^5.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==",
- "dev": true
- },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -62581,12 +57442,6 @@
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
},
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
@@ -62606,6 +57461,12 @@
"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": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
"punycode": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
@@ -62634,12 +57495,6 @@
"strip-ansi": "^5.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==",
- "dev": true
- },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -62651,15 +57506,6 @@
}
}
},
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
"supports-color": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
@@ -62690,12 +57536,6 @@
"strip-ansi": "^5.0.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==",
- "dev": true
- },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -62750,8 +57590,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz",
"integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"webpack-hot-middleware": {
"version": "2.25.0",
@@ -62763,23 +57602,6 @@
"html-entities": "^1.2.0",
"querystring": "^0.2.0",
"strip-ansi": "^3.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=",
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
}
},
"webpack-log": {
@@ -62928,9 +57750,9 @@
}
},
"which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "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"
@@ -62964,6 +57786,12 @@
"string-width": "^1.0.2 || 2"
},
"dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
"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",
@@ -62979,6 +57807,15 @@
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^4.0.0"
}
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
}
}
},
@@ -63018,12 +57855,6 @@
"winston-transport": "^4.4.0"
},
"dependencies": {
- "async": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
- "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
- "dev": true
- },
"is-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
@@ -63040,6 +57871,21 @@
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
+ },
+ "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
+ },
+ "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"
+ }
}
}
},
@@ -63051,6 +57897,32 @@
"requires": {
"readable-stream": "^2.3.7",
"triple-beam": "^1.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"word-wrap": {
@@ -63300,21 +58172,6 @@
"color-convert": "^2.0.1"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -63332,11 +58189,10 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"write": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
- "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
"dev": true,
- "peer": true,
"requires": {
"mkdirp": "^0.5.1"
}
@@ -63415,9 +58271,9 @@
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
},
"y18n": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
- "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
"dev": true
},
"yallist": {
@@ -63448,9 +58304,9 @@
},
"dependencies": {
"y18n": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
- "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true
}
}
diff --git a/frontend/scripts/upload-minio.js b/frontend/scripts/upload-minio.js
index 3e59d9c4e..f0415390f 100644
--- a/frontend/scripts/upload-minio.js
+++ b/frontend/scripts/upload-minio.js
@@ -1,14 +1,15 @@
const Minio = require('minio')
const { collectFilenames } = require('./fs');
+require('dotenv').config()
const PUBLIC_DIR = 'public';
var minioClient = new Minio.Client({
- endPoint: window.ENV.MINIO_ENDPOINT,
- port: window.ENV.MINIO_PORT,
- useSSL: window.ENV.MINIO_USE_SSL, //?
- accessKey: window.ENV.MINIO_ACCESS_KEY,
- secretKey: window.ENV.MINIO_SECRET_KEY,
+ endPoint: process.env.MINIO_ENDPOINT,
+ port: process.env.MINIO_PORT,
+ useSSL: process.env.MINIO_USE_SSL,
+ accessKey: process.env.MINIO_ACCESS_KEY,
+ secretKey: process.env.MINIO_SECRET_KEY,
});
collectFilenames(PUBLIC_DIR, n => !n.includes('.DS_Store')).forEach(name => {