diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 582915984cf785abc6a165fe8acfc06348175af4..6736a6009c5e81e28186d713b2e31dc4ee01bebe 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,23 +1,19 @@ +default: + image: debian-buster:latest before_script: ## dependencies - - - curl -sL https://deb.nodesource.com/setup_11.x | bash - - - apt-get install -y nodejs python3-requests + + - apt-get update -y + - test -e /etc/apt/sources.list.d/nodesource.list || curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - + - test -e /etc/apt/sources.list.d/nodesource.list || echo 'deb https://deb.nodesource.com/node_14.x buster main' > /etc/apt/sources.list.d/nodesource.list + - 'which npm || (apt-get update -y && apt-get install -y nodejs)' + - 'which pip3 || (apt-get update -y && apt-get install -y python3-pip)' + - pip3 install git+https://git.scc.kit.edu/scc-net/net-suite/api-generator.git#egg=net-api-generator - cd frontend/ - cp netvs.config.js.example netvs.config.js - npm install - cd .. - ## Deployment - - - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - - eval $(ssh-agent -s) - - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - - mkdir -p ~/.ssh - - chmod 700 ~/.ssh - - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts - - chmod 644 ~/.ssh/known_hosts - stages: - build - lint @@ -27,7 +23,8 @@ frontend-build: stage: build script: - cd frontend/ - - python3 ./generate_base_model.py + - net-api-generator openapi > public/api.json + - net-api-generator es-webpack - npm run build artifacts: expire_in: 7 days @@ -51,6 +48,13 @@ frontend-audit: deploy_devel_devel: stage: deploy script: + - 'which ssh-agent || ( apt-get install openssh-client -y )' + - eval $(ssh-agent -s) + - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts + - chmod 644 ~/.ssh/known_hosts - ssh net-suite-devel@net-web09.scc.kit.edu "${CI_PIPELINE_ID}" environment: name: devel-devel diff --git a/.gitmodules b/.gitmodules index 32b97b60fbd5ae458ea6b249ef763474ef5f1d27..386403f020d354653c7395c356e5313a26107ff0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,6 @@ [submodule "net_suite/modules/dhcp_leases"] path = net_suite/modules/dhcp_leases url = git@git.scc.kit.edu:scc-net/net-suite/net-suite-dhcp_leases.git -[submodule "net_suite/modules/dnsvs"] - path = net_suite/modules/dnsvs - url = git@git.scc.kit.edu:scc-net/net-suite/net-suite-dnsvs.git [submodule "net_suite/modules/macfinder"] path = net_suite/modules/macfinder url = git@git.scc.kit.edu:scc-net/net-suite/net-suite-macfinder.git diff --git a/frontend/generate_base_model.py b/frontend/generate_base_model.py deleted file mode 100644 index a09a98e8f6dbe924aeac8871a9bc38bccc8b0727..0000000000000000000000000000000000000000 --- a/frontend/generate_base_model.py +++ /dev/null @@ -1,307 +0,0 @@ -import json -import re - -import requests -import os - -AUTH = os.getenv('NETDB_AUTH') -API_SCHEME = 'https' -API_HOST = 'www-net-devel.scc.kit.edu' -API_VERSION = '3.0' -API_BASE_URL = f'/api/{API_VERSION}' -BASE_DIR = 'src/api-services.gen/' - -SWAGGER_TARGET_FILE = 'public/api.json' - -swagger = {'swagger': '2.0', - 'info': { - 'description': """ -Die Schnittstelle WebAPI bietet IT-Betreuern am KIT die Möglichkeit, eigene, speziell zugeschnittene Anwendungsprogramme für die Pflege ihrer netzwerk-spezifischen Anwendungsdaten (wie z.B. DNS) aufzubauen. -Die Schnittstelle setzt auf der Netzdatenbank des SCC (NetDB) auf und ist für eine vollautomatisierte Nutzung auf Basis des heutzutage üblichen textbasierten Datenaustauschformates JSON (JavaScript Object Notation) vorgesehen (s.a. http://de.wikipedia.org/wiki/JavaScript_Object_Notation). -Sie ist über HTTPS erreichbar und kann dadurch mit jeder beliebigen HTTP-Programmbibliothek benutzt werden. Im Rahmen der implementierten Systeme (Anwendungsbereiche), Objekttypen und Funktionen lassen sich sämtliche Daten durch entsprechende Dienstanforderungen (Requests) sowohl ausgeben bzw. abfragen als auch manipulieren (im Standardfall Eintragen, Ändern, Löschen). Die konkreten, jeweils versionsspezifischen Informationen und Parameter zu diesen Systemen, Objekttypen und Funktionen sind nicht Bestandteil dieser Dokumentation, sondern über selbstdokumentierende Indexabfragen der WebAPI erreichbar.""", - 'version': API_VERSION, - 'title': 'SCC NETDB-API'}, - - 'externalDocs': { - 'description': 'Weitere Dokumentation', - 'url': f'https://www-net-devel-doku.scc.kit.edu/webapi/{API_VERSION}/intro' - }, - 'host': '', - 'basePath': API_BASE_URL, - # 'schemes': [API_SCHEME], - 'tags': [], - 'paths': [] - } - -keyword_replacements = {'class': 'cls'} - -files = {} -sess = requests.Session() -sess.headers.update({'Authorization': AUTH}) -request = sess.get("{scheme}://{base_host}{base_url}/wapi/function/list".format(scheme=API_SCHEME, base_host=API_HOST, - base_url=API_BASE_URL)) -if not request.status_code == 200: - print("Fail! Unexpected status_code", request.status_code) - print("Is the NETDB_AUTH environment variable correct?") - exit(1) -func_index = request.json()[0] -data_types = {k['name']: k for k in sess.get( - "{scheme}://{base_host}{base_url}/cntl/data_type/list".format(scheme=API_SCHEME, base_host=API_HOST, - base_url=API_BASE_URL)).json()[0]} -for f in func_index: - fname = '{system}.{object_type}.js'.format(system=f['system'], object_type=f['object_type']) - f_handle = files.get(fname, None) - if fname not in files: - files[fname] = open(os.path.join(BASE_DIR, fname), 'w') - f_handle = files[fname] - f_handle.write("""// -- AUTOGENERATED -- - -// eslint-disable-next-line no-unused-vars -import APIUtils from '@/util/apiutil' - -import Axios from 'axios'; -import NETVSConfig from "@/../netvs.config"; - -export default { -""") - params_str = '' - params_dict = '{' - params_dict_new = '{' - params_dict_old = '{' - for (p, v) in f['parameters'].items(): - old_def_def = False - new_def_def = False - old_default = None - new_default = None - p_esc = p - for (unesc, esc) in keyword_replacements.items(): - p_esc = p_esc.replace(unesc, esc) - if 'old' in v: - old_def_def = 'dataDefault' in v['old'] - if old_def_def: - old_default = v['old']['dataDefault'] - if 'new' in v: - new_def_def = 'dataDefault' in v['new'] - if new_def_def: - new_default = v['new']['dataDefault'] - v['dataType'] = data_types[v['dataType']] - if v['dataType']['json_name'] == 'string': - if old_default is not None: - old_default = '"{}"'.format(old_default) - if new_default is not None: - new_default = '"{}"'.format(new_default) - if 'old' in v: - if not f['is_data_manipulating'] and v['dataType']['json_name'] == 'array': - params_dict_old += '\'{p}\': ({p_esc}_old===null)?null:JSON.stringify({p}_old), '.format(p_esc=p, p=p) - else: - params_dict_old += '\'{p}\': {p_esc}_old, '.format(p=p, p_esc=p_esc) - if old_def_def: - params_str += '{p_esc}_old={d}, '.format(p_esc=p_esc, p=p, d=old_default) - else: - params_str += '{p_esc}_old, '.format(p_esc=p_esc, p=p) - if 'new' in v: - if new_def_def: - params_str += '{p}_new={d}, '.format(p=p, d=new_default) - else: - params_str += '{p}_new, '.format(p=p) - params_dict_new += '\'{p}\': {p}_new, '.format(p=p) - - params_dict_new += '}' - params_dict_old += '}' - - if not f['is_data_manipulating']: - params_dict_old = params_dict_old.replace('_old', '') - params_str = params_str.replace('_old', '') - - params_dict += '"new": ' - params_dict += params_dict_new - params_dict += ', ' - params_dict += '"old": ' - params_dict += params_dict_old - params_dict += '}' - - params_str = params_str[:-2] - params_str = params_str.replace('None', 'null') - func_str = None - if f['is_data_manipulating']: - func_str = """ - {name}(config, {{{params}}}) {{ - let params = {params_dict} - // TODO: Return ta-object instead - return Axios.post(`${{NETVSConfig.NETDB_API_BASE_URL}}/{fq_name_slash}`, params, config) - }}, -""" - else: - func_str = """ - {name}(config, {{{params}}}) {{ - let params = APIUtils.denullify_dict({params_dict_old}) - let cnf = {{}} - Object.assign(cnf, config) - cnf['params'] = params - return Axios.get(`${{NETVSConfig.NETDB_API_BASE_URL}}/{fq_name_slash}`, cnf) - }}, -""" - f_handle.write( - func_str.format(params_dict_old=params_dict_old, params_dict=params_dict, name=f['name'], params=params_str, - fq_name_slash=f['fq_name'].replace('.', '/'))) - -for f in files.values(): - f.write("""} -""") - f.close() - - -def setDef(tmp): - res = [] - for r in tmp: - if 'schema' in r: - if not r['schema']['has_def']: - del (r['schema']['default']) - del (r['schema']['has_def']) - res.append(r) - else: - if not r['has_def']: - del (r['default']) - del (r['has_def']) - res.append(r) - return res - - -def gen_param_defs(d, scope): - defs = { - 'type': d['dataType']['json_name'], - 'description': d['description'], - 'required': d[scope]['isRequired'], - 'nullable': d[scope]['isNullable'], - 'has_def': 'dataDefault' in d[scope], - 'default': d[scope].get('dataDefault', None) - } - if d['dataType']['json_name'] == 'array': - defs['items'] = {'type': 'string'} - return defs - - -def generateParamters(f): - if not f['is_data_manipulating']: - tmp = [ - { - 'name': p, 'description': d['description'], - 'required': d['old']['isRequired'] if 'old' in d else d['new']['isRequired'], - 'schema': { - 'type': d['dataType']['json_name'], - 'nullable': d['old']['isNullable'], - 'has_def': 'dataDefault' in d['old'], - 'default': d['old'].get('dataDefault', None) - }, - 'in': 'query' - } - for p, d in f['parameters'].items()] - return setDef(tmp) - new_params = { - p: gen_param_defs(d, 'new') - for p, d in f['parameters'].items() if 'new' in d - } - - old_params = { - p: gen_param_defs(d, 'old') - for p, d in f['parameters'].items() if 'old' in d - } - old_params = {k: setDef([v])[0] for k, v in old_params.items()} - new_params = {k: setDef([v])[0] for k, v in new_params.items()} - props = {} - if len(old_params) > 0: - props['old'] = { - 'description': 'Alte Attribute zur einduetigen Identifizierung des Objekts', - 'type': 'object', - 'properties': old_params, - } - if len(new_params) > 0: - props['new'] = { - 'description': 'Neue Angaben', - 'type': 'object', - 'properties': new_params, - } - return [{ - 'name': 'body', - 'in': 'body', - 'required': True, - 'schema': { - 'type': 'object', - 'properties': props - } - }] - - -systems = sess.get( - "{scheme}://{base_host}{base_url}/".format(scheme=API_SCHEME, base_host=API_HOST, base_url=API_BASE_URL)) -objects = sess.get( - "{scheme}://{base_host}{base_url}/wapi/object_type/list".format(scheme=API_SCHEME, base_host=API_HOST, - base_url=API_BASE_URL)).json()[0] - -swagger['tags'] = systems.json()[0] -swagger['securityDefinitions'] = {'api_key': {'type': 'apiKey', 'name': 'Authorization', 'in': 'header'}} -swagger['paths'] = {f"/{f['system']}/{f['object_type']}/{f['name']}": - { - 'post' if f['is_data_manipulating'] else 'get': { - 'parameters': generateParamters(f), - 'produces': ['application/json'] if f['is_returning'] else [], - 'tags': [f['system']], - 'security': [{'api_key': []}], - 'responses': { - 200: { - 'description': 'Request erfolgreich', - 'schema': { - 'type': 'array', - 'items': { - '$ref': '#/definitions/' + f['system'] + '.' + f['object_type'] - } - } if f['is_returning'] else None - }, - 400: { - 'description': 'Eingabefehler', - }, - 401: { - 'description': 'Unautorisiert', - }, - 500: { - 'description': 'Interner Serverfehler', - }, - }}} - for f in func_index -} - - -def renderDataType(d): - dat = {'type': d['dataType']['json_name'], - 'description': d['description'], - } - if d['dataType']['format_literal'] is not None and d['dataType']['json_name'] == 'string': - dat['format'] = d['dataType']['format_literal'] - if d['dataType']['name'] == 'text_array': - dat['items'] = { - 'type': 'string' - } - if re.match(r'^integer.*_array$', d['dataType']['name']) is not None: - dat['items'] = { - 'type': 'integer' - } - return dat - - -for o in objects: - for a,d in o['attributes'].items(): - d['dataType'] = data_types[d['dataType']] - -swagger['definitions'] = {o['fq_name']: - { - 'type': 'object', - 'description': o['description'], - 'properties': { - a: renderDataType(d) - for a, d in o['attributes'].items() - } - } - for o in objects -} -with open(SWAGGER_TARGET_FILE, 'w') as f: - f.write(json.dumps(swagger)) diff --git a/frontend/netvs.config.js.example b/frontend/netvs.config.js.example index 5c3f4a3ac0d08567f1a1c27bbacbfec164dfa33a..18f2631bf4476b8c372de62513f7bd89f4ce720d 100644 --- a/frontend/netvs.config.js.example +++ b/frontend/netvs.config.js.example @@ -1,3 +1,4 @@ export default { - NETDB_API_BASE_URL: "/api/3.0/" + NETDB_API_BASE_URL: "/api/3.0/", + ENABLE_OIC: true, } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index eab416f1462b3db9955415af01efc0663d581ba0..6632259554a6293491e25db0db68d95ba8ace4aa 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -5,269 +5,282 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.3" } }, "@babel/core": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", - "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helpers": "^7.2.0", - "@babel/parser": "^7.2.2", - "@babel/template": "^7.2.2", - "@babel/traverse": "^7.2.2", - "@babel/types": "^7.2.2", - "convert-source-map": "^1.1.0", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", + "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.7", + "@babel/helpers": "^7.8.4", + "@babel/parser": "^7.8.7", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.7", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", "json5": "^2.1.0", - "lodash": "^4.17.10", + "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" } }, "@babel/generator": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz", - "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", + "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", "dev": true, "requires": { - "@babel/types": "^7.2.2", + "@babel/types": "^7.8.7", "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "lodash": "^4.17.13", + "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-call-delegate": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", - "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz", + "integrity": "sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.0.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.7" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.3.tgz", - "integrity": "sha512-xO/3Gn+2C7/eOUeb0VRnSP1+yvWHNxlpAot1eMhtoKDCN7POsyQP5excuT5UsV5daHxMWBeIIOeI5cmB8vMRgQ==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz", + "integrity": "sha512-klTBDdsr+VFFqaDHm5rR69OpEQtO2Qv8ECxHS1mNhJJvaHArR6a1xTf5K/eZW7eZpJbhCx3NW1Yt/sKsLXLblg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.2.3" + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-split-export-declaration": "^7.8.3" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", + "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", - "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.0.0", - "lodash": "^4.17.10" + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-hoist-variables": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", - "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-module-transforms": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", - "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz", + "integrity": "sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/template": "^7.2.2", - "@babel/types": "^7.2.2", - "lodash": "^4.17.10" + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.8.6", + "lodash": "^4.17.13" } }, "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", "dev": true }, "@babel/helper-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", - "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-replace-supers": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz", - "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", + "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.2.3", - "@babel/types": "^7.0.0" + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.6" } }, "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", "dev": true, "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helpers": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.2.0.tgz", - "integrity": "sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", + "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", "dev": true, "requires": { - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.5", - "@babel/types": "^7.2.0" + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.4", + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -276,449 +289,460 @@ } }, "@babel/parser": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz", - "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.3.tgz", - "integrity": "sha512-FVuQngLoN2iDrpW7LmhPZ2sO4DJxf35FOcwidwB9Ru9tMvI5URthnkVHuG14IStV+TzkMTyLMoOUlSTtrdVwqw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", + "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.2.3", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-proposal-decorators": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.2.3.tgz", - "integrity": "sha512-jhCFm7ftmue02EWIYqbhzP0iConEPsgVQeDriOs/Qc2lgr6MDtHTTrv3hE2GOOQDFjQ9tjP7nWQq0ad0JhIsQg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz", + "integrity": "sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.2.3", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-decorators": "^7.2.0" + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-decorators": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-1L5mWLSvR76XYUQJXkd/EEQgjq8HHRP6lQuZTTg0VA4tTGPpGemmCdAfQIz1rzEuWAm+ecP8PyyEm30jC1eQCg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz", - "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", + "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.2.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.8", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-decorators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz", - "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz", + "integrity": "sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", - "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-jsx": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", - "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz", + "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz", - "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz", - "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.10" + "@babel/helper-plugin-utils": "^7.8.3", + "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", - "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.1.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz", + "integrity": "sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-split-export-declaration": "^7.8.3", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-destructuring": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz", - "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz", + "integrity": "sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", - "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-for-of": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", - "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz", + "integrity": "sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-function-name": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", - "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", + "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", - "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", + "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz", - "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", + "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", + "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.3" } }, "@babel/plugin-transform-new-target": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", - "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" } }, "@babel/plugin-transform-parameters": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz", - "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz", + "integrity": "sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.1.0", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-call-delegate": "^7.8.7", + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-regenerator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", - "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", + "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", "dev": true, "requires": { - "regenerator-transform": "^0.13.3" + "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-runtime": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz", - "integrity": "sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", + "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", "resolve": "^1.8.1", "semver": "^5.5.1" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" } }, "@babel/plugin-transform-template-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", - "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", + "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", - "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/preset-env": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.2.3.tgz", - "integrity": "sha512-AuHzW7a9rbv5WXmvGaPX7wADxFkZIqKlbBh1dmZUQp4iwiPpkE/Qnrji6SC4UQCQzvWY/cpHET29eUhXS9cLPw==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz", + "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.3.4", "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0", "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.3.4", "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.2.0", - "@babel/plugin-transform-classes": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.3.4", + "@babel/plugin-transform-classes": "^7.3.4", "@babel/plugin-transform-computed-properties": "^7.2.0", "@babel/plugin-transform-destructuring": "^7.2.0", "@babel/plugin-transform-dotall-regex": "^7.2.0", @@ -729,12 +753,13 @@ "@babel/plugin-transform-literals": "^7.2.0", "@babel/plugin-transform-modules-amd": "^7.2.0", "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/plugin-transform-modules-systemjs": "^7.2.0", + "@babel/plugin-transform-modules-systemjs": "^7.3.4", "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", "@babel/plugin-transform-new-target": "^7.0.0", "@babel/plugin-transform-object-super": "^7.2.0", "@babel/plugin-transform-parameters": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.3.4", "@babel/plugin-transform-shorthand-properties": "^7.2.0", "@babel/plugin-transform-spread": "^7.2.0", "@babel/plugin-transform-sticky-regex": "^7.2.0", @@ -748,100 +773,147 @@ } }, "@babel/runtime": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", - "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", - "dev": true, + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", + "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", "requires": { - "regenerator-runtime": "^0.12.0" + "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.2.0.tgz", - "integrity": "sha512-kPfmKoRI8Hpo5ZJGACWyrc9Eq1j3ZIUpUAQT2yH045OuYpccFJ9kYA/eErwzOM2jeBG1sC8XX1nl1EArtuM8tg==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.8.7.tgz", + "integrity": "sha512-R8zbPiv25S0pGfMqAr55dRRxWB8vUeo3wicI4g9PFVBKmsy/9wmQUV1AaYW/kxRHUhx42TTh6F0+QO+4pwfYWg==", + "dev": true, "requires": { - "core-js": "^2.5.7", - "regenerator-runtime": "^0.12.0" + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" } }, "@babel/traverse": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", - "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", + "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.2.3", - "@babel/types": "^7.2.2", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.6", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.10" + "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz", - "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.10", + "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, "@braintree/sanitize-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-3.1.0.tgz", - "integrity": "sha512-GcIY79elgB+azP74j8vqkiXz8xLFfIzbQJdlwOPisgbKT00tviJQuEghOXSMVxJ00HoYJbGswr4kcllUc4xCcg==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-4.1.1.tgz", + "integrity": "sha512-epVksusKVEpwBs2vRg3SWssxn9KXs9CxEYNOcgeSRLRjq070ABj5bLPxkmtQpVeSPCHj8kfAE9J6z2WsLr4wZg==" }, "@fortawesome/fontawesome-common-types": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.14.tgz", - "integrity": "sha512-LOcvERCI96KioXSIfOYN4IATv2ROJOyf72dYnpoWfOIkuyLp45oMej1kL03kYdzvktLCzYhykgHwiu6nkg9Xbw==" + "version": "0.2.30", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.30.tgz", + "integrity": "sha512-TsRwpTuKwFNiPhk1UfKgw7zNPeV5RhNp2Uw3pws+9gDAkPGKrtjR1y2lI3SYn7+YzyfuNknflpBA1LRKjt7hMg==" }, "@fortawesome/fontawesome-svg-core": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.14.tgz", - "integrity": "sha512-T1qCqkwm9PuvK53J64D1ovfrOTa1kG+SrHNj5cFst/rrskhCnbxpRdbqFIdc/thmXC0ebBX8nOUyja2/mrxe4g==", + "version": "1.2.30", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.30.tgz", + "integrity": "sha512-E3sAXATKCSVnT17HYmZjjbcmwihrNOCkoU7dVMlasrcwiJAHxSKeZ+4WN5O+ElgO/FaYgJmASl8p9N7/B/RttA==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.30" + } + }, + "@fortawesome/free-brands-svg-icons": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.14.0.tgz", + "integrity": "sha512-WsqPFTvJFI7MYkcy0jeFE2zY+blC4OrnB9MJOcn1NxRXT/sSfEEhrI7CwzIkiYajLiVDBKWeErYOvpsMeodmCQ==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.14" + "@fortawesome/fontawesome-common-types": "^0.2.30" } }, "@fortawesome/free-regular-svg-icons": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.7.1.tgz", - "integrity": "sha512-JFLJ4M11lZEfi+bmfJdWGVUe5fvmr5k/bqshN7VbJZvEJ6i12Yr6uaByQUM0U1tgw+hJkd8xAwVvKxpJ2HDVTA==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.14.0.tgz", + "integrity": "sha512-6LCFvjGSMPoUQbn3NVlgiG4CY5iIY8fOm+to/D6QS/GvdqhDt+xZklQeERdCvVRbnFa1ITc1rJHPRXqkX5wztQ==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.14" + "@fortawesome/fontawesome-common-types": "^0.2.30" } }, "@fortawesome/free-solid-svg-icons": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.7.1.tgz", - "integrity": "sha512-5V/Q+JoPzuiIHW2JwmZGvE9bHguvNJKa7611DPo51uIvYv9LweX/SnDF+HC23X2W5T3myHhnGi+EZJTmidAmyg==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.14.0.tgz", + "integrity": "sha512-M933RDM8cecaKMWDSk3FRYdnzWGW7kBBlGNGfvqLVwcwhUPNj9gcw+xZMrqBdRqxnSXdl3zWzTCNNGEtFUq67Q==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.14" + "@fortawesome/fontawesome-common-types": "^0.2.30" } }, "@fortawesome/vue-fontawesome": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-0.1.5.tgz", - "integrity": "sha512-tiNZCgh+ZkUsyFfm2MQMMdHKRrKj82M7g0XFPSNNY+s5nRB82soy0US+xj0jGRy433b0c4WpylCOhgle3294Uw==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-0.1.10.tgz", + "integrity": "sha512-b2+SLF31h32LSepVcXe+BQ63yvbq5qmTCy4KfFogCYm2bn68H5sDWUnX+U7MBqnM2aeEk9M7xSoqGnu+wSdY6w==" + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dev": true, + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } }, "@intervolga/optimize-cssnano-plugin": { "version": "1.0.6", @@ -891,18 +963,6 @@ "chalk": "^2.4.2", "consola": "^2.10.1", "node-fetch": "^2.6.0" - }, - "dependencies": { - "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" - } - } } }, "@soda/friendly-errors-webpack-plugin": { @@ -958,33 +1018,144 @@ } } }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@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/connect": { + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", + "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.3.tgz", + "integrity": "sha512-7SxFCd+FLlxCfwVwbyPxbR4khL9aNikJhrorw8nUIOqeuooc9gifBuDQOJw5kzN7i6i3vLn9G8Wde/4QDihpYw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.7.tgz", + "integrity": "sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.9", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.9.tgz", + "integrity": "sha512-DG0BYg6yO+ePW+XoDENYz8zhNGC3jDDEpComMYn7WJc4mY1Us8Rw9ax2YhJXxpyk2SF47PQAoQ0YyVT1a0bEkA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, "requires": { - "@types/events": "*", "@types/minimatch": "*", "@types/node": "*" } }, + "@types/http-proxy": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.4.tgz", + "integrity": "sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/http-proxy-middleware": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@types/http-proxy-middleware/-/http-proxy-middleware-0.19.3.tgz", + "integrity": "sha512-lnBTx6HCOUeIJMLbI/LaL5EmdKLhczJY5oeXZpX/cXE4rRqb3RmV7VcMpiEfYkmTjipv3h7IAyIINe4plEv7cA==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/http-proxy": "*", + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", + "dev": true + }, + "@types/mime": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", + "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", + "dev": true + }, + "@types/mini-css-extract-plugin": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@types/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.1.tgz", + "integrity": "sha512-+mN04Oszdz9tGjUP/c1ReVwJXxSniLd7lF++sv+8dkABxVNthg6uccei+4ssKxRHGoMmPxdn7uBdJWONSJGTGQ==", + "dev": true, + "optional": true, + "requires": { + "@types/webpack": "*" + } + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "dev": true + }, "@types/node": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz", - "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==", + "version": "14.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.0.tgz", + "integrity": "sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA==", "dev": true }, "@types/normalize-package-data": { @@ -994,9 +1165,21 @@ "dev": true }, "@types/q": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", - "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "@types/qs": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.4.tgz", + "integrity": "sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", "dev": true }, "@types/react": { @@ -1008,631 +1191,802 @@ "csstype": "^2.2.0" } }, + "@types/serve-static": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.5.tgz", + "integrity": "sha512-6M64P58N+OXjU432WoLLBQxbA0LRGBCRm7aAGQJ+SMC1IMl0dgRVi9EFfoDcS2a7Xogygk/eGN94CfwU9UF7UQ==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "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==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.3.tgz", + "integrity": "sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "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 + } + } + }, + "@types/webpack": { + "version": "4.41.21", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.21.tgz", + "integrity": "sha512-2j9WVnNrr/8PLAB5csW44xzQSJwS26aOnICsP3pSGCEdsu6KYtfQ6QJsVUKHWRnm1bL7HziJsfh5fHqth87yKA==", + "dev": true, + "requires": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.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==", + "dev": true + } + } + }, + "@types/webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-3+86AgSzl18n5P1iUP9/lz3G3GMztCp+wxdDvVuNhx1sr1jE79GpYfKHL8k+Vht3N74K2n98CuAEw4YPJCYtDA==", + "dev": true, + "requires": { + "@types/connect-history-api-fallback": "*", + "@types/express": "*", + "@types/http-proxy-middleware": "*", + "@types/serve-static": "*", + "@types/webpack": "*" + } + }, + "@types/webpack-sources": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-1.4.2.tgz", + "integrity": "sha512-77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz", + "integrity": "sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw==", + "dev": true + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz", + "integrity": "sha512-YfdaoSMvD1nj7+DsrwfTvTnhDXI7bsuh+Y5qWwvQXlD24uLgnsoww3qbiZvWf/EoviZMrvqkqN4CBw0W3BWUTQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + } + }, "@vue/babel-preset-app": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.2.2.tgz", - "integrity": "sha512-qQkf/bAATfwC1aTKpjPXPeoITSV0uJaeCYrlBXrAH93+ycKWkK+mz7hjwYlGVo7xM/UTICXd3H14XPn1svK5yg==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.12.1.tgz", + "integrity": "sha512-Zjy5jQaikV1Pz+ri0YgXFS7q4/5wCxB5tRkDOEIt5+4105u0Feb/pvH20nVL6nx9GyXrECFfcm7Yxr/z++OaPQ==", "dev": true, "requires": { + "@babel/helper-module-imports": "^7.0.0", "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-decorators": "^7.1.0", "@babel/plugin-syntax-dynamic-import": "^7.0.0", "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/preset-env": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.4.0", + "@babel/preset-env": "^7.0.0 < 7.4.0", "@babel/runtime": "^7.0.0", "@babel/runtime-corejs2": "^7.2.0", - "babel-helper-vue-jsx-merge-props": "^2.0.3", + "@vue/babel-preset-jsx": "^1.0.0", "babel-plugin-dynamic-import-node": "^2.2.0", - "babel-plugin-transform-vue-jsx": "^4.0.1", - "core-js": "^2.6.1" + "babel-plugin-module-resolver": "3.2.0", + "core-js": "^2.6.5" } }, - "@vue/cli-overlay": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.7.0.tgz", - "integrity": "sha512-QO1rsBVKPZrt+5rHSZXc5UEPVwVgiayOk/cDl+GwSJoR36gnWs1wy1oUX1Awd7QpGiMBK/1+A7aAGhfzKR23Cg==", - "dev": true + "@vue/babel-preset-jsx": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz", + "integrity": "sha512-zDpVnFpeC9YXmvGIDSsKNdL7qCG2rA3gjywLYHPCKDT10erjxF4U+6ay9X6TW5fl4GsDlJp9bVfAVQAAVzxxvQ==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "@vue/babel-sugar-functional-vue": "^1.1.2", + "@vue/babel-sugar-inject-h": "^1.1.2", + "@vue/babel-sugar-v-model": "^1.1.2", + "@vue/babel-sugar-v-on": "^1.1.2" + } }, - "@vue/cli-plugin-babel": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.2.0.tgz", - "integrity": "sha512-HRhwsUIZ9DZYH+cVS8O0Qfk2W43vKpl5/JcvCS8YWWmRjwZjjHtRDifnfQuLC3Q0cUMTcv4bv8vnPMtkAbvXKg==", + "@vue/babel-sugar-functional-vue": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz", + "integrity": "sha512-YhmdJQSVEFF5ETJXzrMpj0nkCXEa39TvVxJTuVjzvP2rgKhdMmQzlJuMv/HpadhZaRVMCCF3AEjjJcK5q/cYzQ==", "dev": true, "requires": { - "@babel/core": "^7.0.0", - "@vue/babel-preset-app": "^3.2.0", - "babel-loader": "^8.0.4" + "@babel/plugin-syntax-jsx": "^7.2.0" } }, - "@vue/cli-plugin-eslint": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.2.1.tgz", - "integrity": "sha512-Z/eQw18FjTypMMryNg8WCYJxEBmSAtnzukRWWNFwqNnh2zM/2J6yR4dYhsyjNtMEMUOnQsAsJnqgw45rLu8sJg==", + "@vue/babel-sugar-inject-h": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz", + "integrity": "sha512-VRSENdTvD5htpnVp7i7DNuChR5rVMcORdXjvv5HVvpdKHzDZAYiLSD+GhnhxLm3/dMuk8pSzV+k28ECkiN5m8w==", "dev": true, "requires": { - "@vue/cli-shared-utils": "^3.2.0", - "babel-eslint": "^10.0.1", - "eslint": "^4.19.1", - "eslint-loader": "^2.1.1", - "eslint-plugin-vue": "^4.7.1", - "globby": "^8.0.1" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz", + "integrity": "sha512-vLXPvNq8vDtt0u9LqFdpGM9W9IWDmCmCyJXuozlq4F4UYVleXJ2Fa+3JsnTZNJcG+pLjjfnEGHci2339Kj5sGg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz", + "integrity": "sha512-T8ZCwC8Jp2uRtcZ88YwZtZXe7eQrJcfRq0uTFy6ShbwYJyz5qWskRFoVsdTi9o0WEhmQXxhQUewodOSCUPVmsQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "camelcase": "^5.0.0" + } + }, + "@vue/cli-overlay": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-4.5.4.tgz", + "integrity": "sha512-nthli1n7rXaqaMZsH0KNdFqeYJxDOQNeaobp9SjeSdrpD1xAj/B0+RJMWQWIFsfdQn1AQP1UVMnkfdakTiLgxA==", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.12.1.tgz", + "integrity": "sha512-Zetvz8PikLCGomeKOKu8pC9YQ7cfxs7pGpvEOzaxGdhMnebhjAYR6i6dOB57A6N5lhxQksXCtYTv26QgfiIpdg==", + "dev": true, + "requires": { + "@babel/core": "^7.0.0", + "@vue/babel-preset-app": "^3.12.1", + "@vue/cli-shared-utils": "^3.12.1", + "babel-loader": "^8.0.5", + "webpack": "^4.0.0" + } + }, + "@vue/cli-plugin-eslint": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.4.tgz", + "integrity": "sha512-mWuhKtxMiAM70nPW/NnoWtf32YJoOPPt7SyNmsAjBKSRPcje+16Egl7BD8yuPKoF1MTkvs5CM/e7gp3AnSTFzQ==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.4", + "eslint-loader": "^2.2.1", + "globby": "^9.2.0", + "inquirer": "^7.1.0", + "webpack": "^4.0.0", + "yorkie": "^2.0.0" + }, + "dependencies": { + "@vue/cli-shared-utils": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.4.tgz", + "integrity": "sha512-7ZwAvGxl5szGuaJCc4jdPy/2Lb7oJvG847MDF+7pZ7FVl6bURwbUJjiUwL6DTxvpC4vch6B4tXfVvZFjzVP/bw==", + "dev": true, + "requires": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "^9.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" } }, - "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=", + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" } }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ms": "^2.1.1" + "ansi-regex": "^5.0.0" } }, - "eslint": { - "version": "4.19.1", - "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.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", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "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" + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, - "eslint-plugin-vue": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz", - "integrity": "sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==", + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "@vue/cli-plugin-router": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.5.4.tgz", + "integrity": "sha512-9/qRICZbq1qucq9M9z6jYT5UWNvcTu9BgHtXgsaK9gJsdmpxDIfD0SvW9nzZaHb8xxixvDRotMM/0Juw2oCsKQ==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.4" + }, + "dependencies": { + "@vue/cli-shared-utils": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.4.tgz", + "integrity": "sha512-7ZwAvGxl5szGuaJCc4jdPy/2Lb7oJvG847MDF+7pZ7FVl6bURwbUJjiUwL6DTxvpC4vch6B4tXfVvZFjzVP/bw==", "dev": true, "requires": { - "vue-eslint-parser": "^2.0.3" + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "^9.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" } }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "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=", + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "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==", + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "ansi-regex": "^5.0.0" } }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true } } }, + "@vue/cli-plugin-vuex": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.4.tgz", + "integrity": "sha512-X/F4E/dIRdiogKCdO4VGjUy5f4Fbxs7mu/gSi6Ubltle0eNE+tbBgLPH4r2g7GmHKNph4k39ikvfOMpXZcTFZg==", + "dev": true + }, "@vue/cli-service": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.7.0.tgz", - "integrity": "sha512-RMVwpCE3EB9cL9VAgu1Dy/tGxz5zrVG4UMPk5t4KDu8jJhHxvcAzgIEIfS6KRp0AKfA6iDW4J0NU0fopnpyL+g==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-4.5.4.tgz", + "integrity": "sha512-30zcebYno9tMvGsvZsnSPtieBvU5H3CkRW1JgiBmPG3Fcxp3BGSAy82Dl1gOUEj1VsAUqXWKMWX6frkYldi8UA==", "dev": true, "requires": { "@intervolga/optimize-cssnano-plugin": "^1.0.5", "@soda/friendly-errors-webpack-plugin": "^1.7.1", - "@vue/cli-overlay": "^3.7.0", - "@vue/cli-shared-utils": "^3.7.0", - "@vue/component-compiler-utils": "^2.6.0", + "@soda/get-current-script": "^1.0.0", + "@types/minimist": "^1.2.0", + "@types/webpack": "^4.0.0", + "@types/webpack-dev-server": "^3.11.0", + "@vue/cli-overlay": "^4.5.4", + "@vue/cli-plugin-router": "^4.5.4", + "@vue/cli-plugin-vuex": "^4.5.4", + "@vue/cli-shared-utils": "^4.5.4", + "@vue/component-compiler-utils": "^3.1.2", "@vue/preload-webpack-plugin": "^1.1.0", "@vue/web-component-wrapper": "^1.2.0", - "acorn": "^6.1.1", - "acorn-walk": "^6.1.1", - "address": "^1.0.3", - "autoprefixer": "^9.5.1", - "browserslist": "^4.5.4", - "cache-loader": "^2.0.1", - "case-sensitive-paths-webpack-plugin": "^2.2.0", - "chalk": "^2.4.2", - "cli-highlight": "^2.1.0", - "clipboardy": "^2.0.0", - "cliui": "^5.0.0", - "copy-webpack-plugin": "^4.6.0", - "css-loader": "^1.0.1", + "acorn": "^7.4.0", + "acorn-walk": "^7.1.1", + "address": "^1.1.2", + "autoprefixer": "^9.8.6", + "browserslist": "^4.12.0", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.4", + "clipboardy": "^2.3.0", + "cliui": "^6.0.0", + "copy-webpack-plugin": "^5.1.1", + "css-loader": "^3.5.3", "cssnano": "^4.1.10", - "current-script-polyfill": "^1.0.0", "debug": "^4.1.1", - "dotenv": "^7.0.0", + "default-gateway": "^5.0.5", + "dotenv": "^8.2.0", "dotenv-expand": "^5.1.0", - "escape-string-regexp": "^1.0.5", - "file-loader": "^3.0.1", + "file-loader": "^4.2.0", "fs-extra": "^7.0.1", "globby": "^9.2.0", - "hash-sum": "^1.0.2", + "hash-sum": "^2.0.0", "html-webpack-plugin": "^3.2.0", "launch-editor-middleware": "^2.2.1", - "lodash.defaultsdeep": "^4.6.0", + "lodash.defaultsdeep": "^4.6.1", "lodash.mapvalues": "^4.6.0", "lodash.transform": "^4.6.0", - "mini-css-extract-plugin": "^0.6.0", - "minimist": "^1.2.0", - "ora": "^3.4.0", - "portfinder": "^1.0.20", + "mini-css-extract-plugin": "^0.9.0", + "minimist": "^1.2.5", + "pnp-webpack-plugin": "^1.6.4", + "portfinder": "^1.0.26", "postcss-loader": "^3.0.0", - "read-pkg": "^5.0.0", - "semver": "^6.0.0", - "slash": "^2.0.0", - "source-map-url": "^0.4.0", - "ssri": "^6.0.1", - "string.prototype.padend": "^3.0.0", - "terser-webpack-plugin": "^1.2.3", - "thread-loader": "^2.1.2", - "url-loader": "^1.1.2", - "vue-loader": "^15.7.0", - "webpack": ">=4 < 4.29", - "webpack-bundle-analyzer": "^3.3.0", - "webpack-chain": "^4.11.0", - "webpack-dev-server": "^3.3.1", - "webpack-merge": "^4.2.1", - "yorkie": "^2.0.0" + "ssri": "^7.1.0", + "terser-webpack-plugin": "^2.3.6", + "thread-loader": "^2.1.3", + "url-loader": "^2.2.0", + "vue-loader": "^15.9.2", + "vue-loader-v16": "npm:vue-loader@^16.0.0-beta.3", + "vue-style-loader": "^4.1.2", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-chain": "^6.4.0", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2" }, "dependencies": { "@vue/cli-shared-utils": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.7.0.tgz", - "integrity": "sha512-+LPDAQ1CE3ci1ADOvNqJMPdqyxgJxOq5HUgGDSKCHwviXF6GtynfljZXiSzgWh5ueMFxJphCfeMsTZqFWwsHVg==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.4.tgz", + "integrity": "sha512-7ZwAvGxl5szGuaJCc4jdPy/2Lb7oJvG847MDF+7pZ7FVl6bURwbUJjiUwL6DTxvpC4vch6B4tXfVvZFjzVP/bw==", "dev": true, "requires": { - "chalk": "^2.4.1", + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", "execa": "^1.0.0", - "joi": "^14.3.0", "launch-editor": "^2.2.1", "lru-cache": "^5.1.1", "node-ipc": "^9.1.1", - "opn": "^5.3.0", + "open": "^6.3.0", "ora": "^3.4.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.7", - "semver": "^6.0.0", - "string.prototype.padstart": "^3.0.0" - } - }, - "@vue/component-compiler-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz", - "integrity": "sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==", - "dev": true, - "requires": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", - "postcss-selector-parser": "^5.0.0", - "prettier": "1.16.3", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" - }, - "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, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - } + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" } }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", "dev": true }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "browserslist": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", - "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, + "optional": true, "requires": { - "caniuse-lite": "^1.0.30000967", - "electron-to-chromium": "^1.3.133", - "node-releases": "^1.1.19" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" } }, - "caniuse-lite": { - "version": "1.0.30000969", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000969.tgz", - "integrity": "sha512-Kus0yxkoAJgVc0bax7S4gLSlFifCa7MnSZL9p9VuS/HIKEL4seaqh28KIQAAO50cD/rJ5CiJkJFapkdDAlhFxQ==", - "dev": true + "browserslist": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", + "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001111", + "electron-to-chromium": "^1.3.523", + "escalade": "^3.0.2", + "node-releases": "^1.1.60" + } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "cacache": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" } }, - "cli-spinners": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.1.0.tgz", - "integrity": "sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==", + "caniuse-lite": { + "version": "1.0.30001116", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz", + "integrity": "sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ==", "dev": true }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "css-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", - "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", + "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, + "optional": true, "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash": "^4.17.11", - "postcss": "^6.0.23", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" - }, - "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" - } - } + "color-name": "~1.1.4" } }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "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, + "optional": true + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", "dev": true, "requires": { - "path-type": "^3.0.0" + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" } }, "electron-to-chromium": { - "version": "1.3.135", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.135.tgz", - "integrity": "sha512-xXLNstRdVsisPF3pL3H9TVZo2XkMILfqtD6RiWIUmDK2sFX1Bjwqmd8LBp0Kuo2FgKO63JXPoEVGm8WyYdwP0Q==", + "version": "1.3.538", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.538.tgz", + "integrity": "sha512-rlyYXLlOoZkJuvY4AJXUpP7CHRVtwZz311HPVoEO1UHo/kqDCsP1pNas0A9paZuPEiYGdLwrjllF2hs69NEaTw==", "dev": true }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "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": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "postcss": "^6.0.1" - }, - "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" - } - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, - "node-releases": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.19.tgz", - "integrity": "sha512-SH/B4WwovHbulIALsQllAVwqZZD1kPmKCqrhGfR29dXjLAVZMHvBjD3S6nL9D/J9QkmZ1R92/0wCMDKXUUvyyA==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } + "p-locate": "^4.1.0" } }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" + "semver": "^6.0.0" } }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node-releases": { + "version": "1.1.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", + "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", "dev": true }, - "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", + "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": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "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" - } - } + "p-try": "^2.0.0" } }, - "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "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": { - "postcss": "^6.0.1" - }, - "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" - } - } + "p-limit": "^2.2.0" } }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "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 + }, + "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": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "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" - } - } + "find-up": "^4.0.0" } }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "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" - } - } + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" } }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - }, - "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" - } - } + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" } }, - "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "lodash": "^4.17.11" + "glob": "^7.1.3" } }, - "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "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": { - "request-promise-core": "1.1.2", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" } }, "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "source-map": { "version": "0.6.1", @@ -1640,88 +1994,168 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "ssri": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + } + }, "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==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.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==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" + } + }, + "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" } }, - "vue-loader": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.0.tgz", - "integrity": "sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA==", + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dev": true, "requires": { - "@vue/component-compiler-utils": "^2.5.1", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" } }, - "vue-template-es2015-compiler": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", - "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "terser-webpack-plugin": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", + "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==", + "dev": true, + "requires": { + "cacache": "^13.0.1", + "find-cache-dir": "^3.3.1", + "jest-worker": "^25.4.0", + "p-limit": "^2.3.0", + "schema-utils": "^2.6.6", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.6.12", + "webpack-sources": "^1.4.3" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "vue-loader-v16": { + "version": "npm:vue-loader@16.0.0-beta.5", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.5.tgz", + "integrity": "sha512-ciWfzNefqWlmzKznCWY9hl+fPP4KlQ0A9MtHbJ/8DpyY+dAM8gDrjufIdxwTgC4szE4EZC3A6ip/BbrqM84GqA==", "dev": true, + "optional": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "@types/mini-css-extract-plugin": "^0.9.1", + "chalk": "^3.0.0", + "hash-sum": "^2.0.0", + "loader-utils": "^1.2.3", + "merge-source-map": "^1.1.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "optional": 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, + "optional": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true } } }, "@vue/cli-shared-utils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.2.2.tgz", - "integrity": "sha512-pkJDucxDxSnmhN3/zgyvKXDFJDx42sfAdNo02mRYPhv3u2tqJW4/GR0X1/O8p4+LUNwBgtGNmDAACYoLzv101Q==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz", + "integrity": "sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ==", "dev": true, "requires": { + "@hapi/joi": "^15.0.1", "chalk": "^2.4.1", "execa": "^1.0.0", - "joi": "^14.3.0", "launch-editor": "^2.2.1", "lru-cache": "^5.1.1", "node-ipc": "^9.1.1", - "opn": "^5.3.0", - "ora": "^3.0.0", + "open": "^6.3.0", + "ora": "^3.4.0", "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "semver": "^5.5.0", + "request-promise-native": "^1.0.7", + "semver": "^6.0.0", "string.prototype.padstart": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@vue/component-compiler-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.5.2.tgz", - "integrity": "sha512-3exq9O89GXo9E+CGKzgURCbasG15FtFMs8QRrCUVWGaKue4Egpw41MHb3Avtikv1VykKfBq3FvAnf9Nx3sdVJg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz", + "integrity": "sha512-QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug==", "dev": true, "requires": { "consolidate": "^0.15.1", @@ -1729,33 +2163,17 @@ "lru-cache": "^4.1.2", "merge-source-map": "^1.1.0", "postcss": "^7.0.14", - "postcss-selector-parser": "^5.0.0", - "prettier": "1.16.3", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2", "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.8.2" + "vue-template-es2015-compiler": "^1.9.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "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" - } - } - } + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true }, "lru-cache": { "version": "4.1.5", @@ -1767,32 +2185,12 @@ "yallist": "^2.1.2" } }, - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "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" - } - }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", @@ -1802,9 +2200,9 @@ } }, "@vue/preload-webpack-plugin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.0.tgz", - "integrity": "sha512-rcn2KhSHESBFMPj5vc5X2pI9bcBNQQixvJXhD5gZ4rN2iym/uH2qfDSQfUS5+qwiz0a85TCkeUs6w6jxFDudbw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz", + "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", "dev": true }, "@vue/web-component-wrapper": { @@ -1814,175 +2212,178 @@ "dev": true }, "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.7.11" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", - "dev": true + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, "requires": { - "@xtuc/long": "4.2.1" + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" } }, "@xtuc/ieee754": { @@ -1992,9 +2393,9 @@ "dev": true }, "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, "abbrev": { @@ -2013,72 +2414,64 @@ }, "dependencies": { "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", "dev": true }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": "1.44.0" } } } }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, - "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - } + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true }, - "acorn-jsx": { + "aggregate-error": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", "dev": true, "requires": { - "acorn": "^3.0.4" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true } } }, - "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", - "dev": true - }, - "address": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.0.tgz", - "integrity": "sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ==", - "dev": true - }, "ajv": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.8.1.tgz", - "integrity": "sha512-eqxCp82P+JfqL683wwsL73XmFs1eG6qjw+RD3YHx+Jll1r0jNd4dh8QG9NYAeNGA/hnZjeEDgtTskgJULbxpWQ==", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -2091,9 +2484,9 @@ "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=", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, "alphanum-sort": { @@ -2114,9 +2507,9 @@ "dev": true }, "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true }, "ansi-html": { @@ -2171,9 +2564,9 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "arch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", - "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz", + "integrity": "sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==", "dev": true }, "are-we-there-yet": { @@ -2208,12 +2601,6 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -2225,18 +2612,6 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -2257,12 +2632,6 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -2277,14 +2646,23 @@ } }, "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "assert": { @@ -2305,7 +2683,7 @@ }, "util": { "version": "0.10.3", - "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -2331,10 +2709,13 @@ "dev": true }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } }, "async-each": { "version": "1.0.3", @@ -2348,9 +2729,9 @@ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "asynckit": { @@ -2364,85 +2745,62 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "autolinker": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", - "integrity": "sha1-BlK0kYgYefB3XazgzcoyM5QqTkc=", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.14.1.tgz", + "integrity": "sha512-yvsRHIaY51EYDml6MGlbqyJGfl4n7zezGYf+R7gvM8c5LNpRGc4SISkvgAswSS8SWxk/OrGCylKV9mJyVstz7w==", "requires": { - "gulp-header": "^1.7.1" + "tslib": "^1.9.3" } }, "autoprefixer": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz", - "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", "dev": true, "requires": { - "browserslist": "^4.5.4", - "caniuse-lite": "^1.0.30000957", + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.14", - "postcss-value-parser": "^3.3.1" + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" }, "dependencies": { "browserslist": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", - "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", + "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000967", - "electron-to-chromium": "^1.3.133", - "node-releases": "^1.1.19" + "caniuse-lite": "^1.0.30001111", + "electron-to-chromium": "^1.3.523", + "escalade": "^3.0.2", + "node-releases": "^1.1.60" } }, "caniuse-lite": { - "version": "1.0.30000969", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000969.tgz", - "integrity": "sha512-Kus0yxkoAJgVc0bax7S4gLSlFifCa7MnSZL9p9VuS/HIKEL4seaqh28KIQAAO50cD/rJ5CiJkJFapkdDAlhFxQ==", + "version": "1.0.30001116", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz", + "integrity": "sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ==", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "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" - } - } - } - }, "electron-to-chromium": { - "version": "1.3.135", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.135.tgz", - "integrity": "sha512-xXLNstRdVsisPF3pL3H9TVZo2XkMILfqtD6RiWIUmDK2sFX1Bjwqmd8LBp0Kuo2FgKO63JXPoEVGm8WyYdwP0Q==", + "version": "1.3.538", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.538.tgz", + "integrity": "sha512-rlyYXLlOoZkJuvY4AJXUpP7CHRVtwZz311HPVoEO1UHo/kqDCsP1pNas0A9paZuPEiYGdLwrjllF2hs69NEaTw==", "dev": true }, "node-releases": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.19.tgz", - "integrity": "sha512-SH/B4WwovHbulIALsQllAVwqZZD1kPmKCqrhGfR29dXjLAVZMHvBjD3S6nL9D/J9QkmZ1R92/0wCMDKXUUvyyA==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } + "version": "1.1.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", + "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", + "dev": true }, "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -2478,12 +2836,11 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" + "follow-redirects": "1.5.10" }, "dependencies": { "debug": { @@ -2502,11 +2859,6 @@ "debug": "=3.1.0" } }, - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2514,115 +2866,147 @@ } } }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" } }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true + "schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", + "dev": true, + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "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, + "requires": { + "find-babel-config": "^1.1.0", + "glob": "^7.1.2", + "pkg-up": "^2.0.0", + "reselect": "^3.0.1", + "resolve": "^1.4.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" + } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "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": { - "ansi-regex": "^2.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, - "supports-color": { + "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": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "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 + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } } } }, - "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - } - }, - "babel-helper-vue-jsx-merge-props": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", - "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==", - "dev": true - }, - "babel-loader": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.4.tgz", - "integrity": "sha512-fhBhNkUToJcW9nV46v8w87AJOwAJDz84c1CL57n3Stj73FANM/b9TbCUK4YhdOwEyZ+OxhYpdeZDNzSI29Firw==", - "dev": true, - "requires": { - "find-cache-dir": "^1.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "util.promisify": "^1.0.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz", - "integrity": "sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-transform-vue-jsx": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-4.0.1.tgz", - "integrity": "sha512-wbOz7ITB5cloLSjKUU1hWn8zhR+Dwah/RZiTiJY/CQliCwhowmzu6m7NEF+y5EJX/blDzGjRtZvC10Vdb3Q7vw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -2695,9 +3079,9 @@ } }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "batch": { "version": "0.6.1", @@ -2714,15 +3098,15 @@ } }, "bfj": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", - "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "check-types": "^7.3.0", - "hoopy": "^0.1.2", - "tryer": "^1.0.0" + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" } }, "big.js": { @@ -2736,6 +3120,16 @@ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", @@ -2745,15 +3139,15 @@ } }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", "dev": true }, "body-parser": { @@ -2826,32 +3220,20 @@ "dev": true }, "bootstrap": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", - "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==" + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.2.tgz", + "integrity": "sha512-vlGn0bcySYl/iV+BGA544JkkZP5LB3jsmkeKLFQakCOwCM3AOk7VkldBz4jrzSe+Z0Ezn99NVXa1o45cQY4R6A==" }, "bootstrap-vue": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.2.2.tgz", - "integrity": "sha512-jFw9WcPX2MLCMaMNdakXke2Fwtz5o7EeByMJGhzGjiL1TNBr/nz2PolCAFW475+o2t5Tz3MZT152o6zLQXcElw==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.16.0.tgz", + "integrity": "sha512-gLETwPmeRHCe5WHmhGxzb5PtTEuKqQPGl0TFvZ2Odbkg/7UuIHdqIexrJRerpnomP4ZzDQ+qYGL91Ls9lcQsJQ==", "requires": { "@nuxt/opencollective": "^0.3.0", - "bootstrap": ">=4.4.1 <5.0.0", - "popper.js": "^1.16.0", + "bootstrap": ">=4.5.0 <5.0.0", + "popper.js": "^1.16.1", "portal-vue": "^2.1.7", "vue-functional-data-merge": "^3.1.0" - }, - "dependencies": { - "bootstrap": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.4.1.tgz", - "integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==" - }, - "popper.js": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.0.tgz", - "integrity": "sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==" - } } }, "brace-expansion": { @@ -2941,21 +3323,56 @@ "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "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 + } } }, "browserify-zlib": { @@ -2968,25 +3385,26 @@ } }, "browserslist": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.7.tgz", - "integrity": "sha512-pWQv51Ynb0MNk9JGMCZ8VkM785/4MQNXiFYtPqI7EEP0TJO+/d/NqRVn1uiAN0DNbnlUSpL2sh16Kspasv3pUQ==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", + "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000925", - "electron-to-chromium": "^1.3.96", - "node-releases": "^1.1.3" + "caniuse-lite": "^1.0.30001035", + "electron-to-chromium": "^1.3.378", + "node-releases": "^1.1.52", + "pkg-up": "^3.1.0" } }, "btoa": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.1.2.tgz", - "integrity": "sha1-PkC4FmP4HS3WWWpMtxSo3BbPq+A=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -3006,6 +3424,12 @@ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", "dev": true }, + "buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", + "dev": true + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -3025,50 +3449,41 @@ "dev": true }, "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", "y18n": "^4.0.0" }, "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, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true } } }, @@ -3089,16 +3504,99 @@ } }, "cache-loader": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-2.0.1.tgz", - "integrity": "sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", "dev": true, "requires": { - "loader-utils": "^1.1.0", + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", "mkdirp": "^0.5.1", - "neo-async": "^2.6.0", - "normalize-path": "^3.0.0", - "schema-utils": "^1.0.0" + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "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", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "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" + } + }, + "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 + }, + "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" + } + }, + "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": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "call-me-maybe": { @@ -3114,29 +3612,21 @@ "dev": true, "requires": { "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } } }, "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, "requires": { - "callsites": "^0.2.0" + "caller-callsite": "^2.0.0" } }, "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, "camel-case": { @@ -3152,8 +3642,7 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "camelcase-keys": { "version": "2.1.0", @@ -3184,15 +3673,15 @@ } }, "caniuse-lite": { - "version": "1.0.30000926", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000926.tgz", - "integrity": "sha512-diMkEvxfFw09SkbErCLmw/1Fx1ZZe9xfWm4aeA2PUffB48x1tfZeMsK5j4BW7zN7Y4PdqmPVVdG2eYjE5IRTag==", + "version": "1.0.30001035", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", + "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==", "dev": true }, "case-sensitive-paths-webpack-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz", - "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==", "dev": true }, "caseless": { @@ -3201,32 +3690,46 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, + "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" } }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "check-types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", - "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", "dev": true }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -3244,15 +3747,15 @@ } }, "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "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" @@ -3274,12 +3777,6 @@ "safe-buffer": "^5.0.1" } }, - "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 - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -3307,9 +3804,9 @@ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "dev": true, "requires": { "source-map": "~0.6.0" @@ -3323,32 +3820,91 @@ } } }, - "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, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-highlight": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.1.tgz", - "integrity": "sha512-0y0VlNmdD99GXZHYnvrQcmHxP8Bi6T00qucGgBgGv4kJ0RyDthNnnFPupHV7PYv/OXSVk+azFbOeaW6+vGmx9A==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "highlight.js": "^9.6.0", - "mz": "^2.4.0", - "parse5": "^4.0.0", - "yargs": "^13.0.0" - } - }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": 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, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-highlight": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.4.tgz", + "integrity": "sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "highlight.js": "^9.6.0", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^5.1.1", + "yargs": "^15.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "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", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz", + "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==", "dev": true }, "cli-width": { @@ -3357,25 +3913,87 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, + "clipboard": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", + "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "clipboardy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.0.0.tgz", - "integrity": "sha512-XbVjHMsss0giNUkp/tV/3eEAZe8i1fZTLzmPKqjE1RGIAWOTiF5D014f6R+g53ZAq0IK3cPrJXFvqE8eQjhFYQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", "dev": true, "requires": { "arch": "^2.1.1", - "execa": "^1.0.0" + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + } } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "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==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "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==", + "requires": { + "emoji-regex": "^7.0.1", + "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==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } } }, "clone": { @@ -3385,22 +4003,15 @@ "dev": true }, "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "requires": { - "for-own": "^1.0.0", "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, "coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -3427,9 +4038,9 @@ } }, "color": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz", - "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", "dev": true, "requires": { "color-convert": "^1.9.1", @@ -3459,6 +4070,12 @@ "simple-swizzle": "^0.2.2" } }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", @@ -3467,10 +4084,15 @@ "delayed-stream": "~1.0.0" } }, + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + }, "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "commondir": { @@ -3485,18 +4107,18 @@ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, "compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { - "mime-db": ">= 1.40.0 < 2" + "mime-db": ">= 1.43.0 < 2" }, "dependencies": { "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", "dev": true } } @@ -3556,21 +4178,6 @@ "typedarray": "^0.0.6" } }, - "concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, "connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", @@ -3578,18 +4185,15 @@ "dev": true }, "consola": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.11.3.tgz", - "integrity": "sha512-aoW0YIIAmeftGR8GSpw6CGQluNdkWMWh3yEFjH/hmynTYnMtibXszii3lxCXmk8YxJtI3FAK5aTiquA5VH68Gw==" + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.14.0.tgz", + "integrity": "sha512-A2j1x4u8d6SIVikhZROfpFJxQZie+cZOfQMyI/tu2+hWXe8iAv7R6FW6s6x04/7zBCst94lPddztot/d6GJiuQ==" }, "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true }, "console-control-strings": { "version": "1.1.0", @@ -3627,9 +4231,9 @@ "dev": true }, "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -3666,20 +4270,32 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, + "copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "requires": { + "toggle-selection": "^1.0.6" + } + }, "copy-webpack-plugin": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", - "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==", "dev": true, "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", "minimatch": "^3.0.4", - "p-limit": "^1.0.0", - "serialize-javascript": "^1.4.0" + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "webpack-log": "^2.0.0" }, "dependencies": { "globby": { @@ -3695,13 +4311,40 @@ "pify": "^3.0.0", "slash": "^1.0.0" } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true } } }, "core-js": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", - "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==" + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" }, "core-util-is": { "version": "1.0.2", @@ -3718,16 +4361,36 @@ "is-directory": "^0.3.1", "js-yaml": "^3.13.1", "parse-json": "^4.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } } }, "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "create-hash": { @@ -3768,28 +4431,11 @@ } }, "cross-fetch": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-0.0.8.tgz", - "integrity": "sha1-Ae2U3EB98sAPGAf95wCnz6SKIFw=", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.5.tgz", + "integrity": "sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew==", "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.3" - }, - "dependencies": { - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" - } + "node-fetch": "2.6.0" } }, "cross-spawn": { @@ -3841,50 +4487,89 @@ } }, "css-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.0.tgz", - "integrity": "sha512-MoOu+CStsGrSt5K2OeZ89q3Snf+IkxRfAIt9aAKg4piioTrhtP1iEFPu+OVn3Ohz24FO6L+rw9UJxBILiSBw5Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", + "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", "dev": true, "requires": { - "icss-utils": "^4.0.0", - "loader-utils": "^1.2.1", - "lodash": "^4.17.11", - "postcss": "^7.0.6", + "camelcase": "^5.2.0", + "icss-utils": "^4.1.0", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.14", "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^2.0.3", - "postcss-modules-scope": "^2.0.0", + "postcss-modules-local-by-default": "^2.0.6", + "postcss-modules-scope": "^2.1.0", "postcss-modules-values": "^2.0.0", "postcss-value-parser": "^3.3.0", "schema-utils": "^1.0.0" }, "dependencies": { - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "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", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz", + "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0", + "postcss-value-parser": "^3.3.1" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz", + "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^7.0.6" } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true } } }, "css-select": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", - "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^2.1.2", + "css-what": "^3.2.1", "domutils": "^1.7.0", "nth-check": "^1.0.2" } @@ -3895,83 +4580,28 @@ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", "dev": true }, - "css-selector-tokenizer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", - "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dev": true, "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" + "mdn-data": "2.0.4", + "source-map": "^0.6.1" }, "dependencies": { - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "jsesc": { - "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "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 - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } } } }, - "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", - "dev": true, - "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" - } - }, - "css-unit-converter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", - "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", - "dev": true - }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", - "dev": true - }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", + "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", "dev": true }, "css.escape": { @@ -3980,9 +4610,9 @@ "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" }, "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, "cssnano": { @@ -4063,38 +4693,44 @@ "dev": true }, "csso": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha.29" + "css-tree": "1.0.0-alpha.39" }, "dependencies": { "css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", "dev": true, "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "mdn-data": "2.0.6", + "source-map": "^0.6.1" } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "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 } } }, "csstype": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.7.tgz", - "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==", + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.13.tgz", + "integrity": "sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A==", "optional": true }, - "current-script-polyfill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz", - "integrity": "sha1-8xz35PPiGLBybnOMqSoC00iO9hU=", - "dev": true - }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -4104,9 +4740,9 @@ } }, "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, "d": { @@ -4126,12 +4762,6 @@ "assert-plus": "^1.0.0" } }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, "de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", @@ -4158,9 +4788,18 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } }, "deep-extend": { "version": "0.6.0", @@ -4180,13 +4819,118 @@ "dev": true }, "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.5.tgz", + "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==", "dev": true, "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "execa": "^3.3.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "defaults": { @@ -4261,7 +5005,7 @@ "dependencies": { "globby": { "version": "6.1.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -4274,16 +5018,16 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } } }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true } } @@ -4293,6 +5037,12 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -4305,9 +5055,9 @@ "dev": true }, "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -4334,22 +5084,29 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dev": true, "requires": { - "arrify": "^1.0.1", "path-type": "^3.0.0" } }, @@ -4378,15 +5135,6 @@ "buffer-indexof": "^1.0.0" } }, - "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" - } - }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -4397,13 +5145,21 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + } } }, "domain-browser": { @@ -4428,9 +5184,9 @@ } }, "dompurify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.0.7.tgz", - "integrity": "sha512-S3O0lk6rFJtO01ZTzMollCOGg+WAtCwS3U5E2WSDY/x/sy7q70RjEC4Dmrih5/UqzLLB9XoKJ8KqwBxaNvBu4A==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.0.14.tgz", + "integrity": "sha512-oqcjyCLHLjWugZ6VwK0YfmRND/DFy/CuZhdasmymMfnxbzaaQxBSA1ATZIXWESGDj/nvq1vKLmRa7rTdbGgrmQ==" }, "domutils": { "version": "1.7.0", @@ -4443,18 +5199,18 @@ } }, "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", "dev": true, "requires": { - "is-obj": "^1.0.0" + "is-obj": "^2.0.0" } }, "dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", "dev": true }, "dotenv-expand": { @@ -4464,9 +5220,9 @@ "dev": true }, "duplexer": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, "duplexify": { @@ -4503,21 +5259,21 @@ "dev": true }, "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "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.96", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.96.tgz", - "integrity": "sha512-ZUXBUyGLeoJxp4Nt6G/GjBRLnyz8IKQGexZ2ndWaoegThgMGFO1tdDYID5gBV32/1S83osjJHyfzvanE/8HY4Q==", + "version": "1.3.379", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.379.tgz", + "integrity": "sha512-NK9DBBYEBb5f9D7zXI0hiE941gq3wkBeQmXs1ingigA/jnTg5mhwY2Z5egwA+ZI8OLGKCx0h1Cl8/xeuIBuLlg==", "dev": true }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -4527,6 +5283,14 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "emitter-component": { @@ -4535,9 +5299,9 @@ "integrity": "sha1-Bl4tvtaVm/RwZ57avq95gdEAOrY=" }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "emojis-list": { @@ -4545,11 +5309,6 @@ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, - "encode-3986": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/encode-3986/-/encode-3986-1.0.0.tgz", - "integrity": "sha1-lA1RSY+HQa3hhLda0UObMXwMemA=" - }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -4557,37 +5316,59 @@ "dev": true }, "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "requires": { - "iconv-lite": "~0.4.13" + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } } }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" } }, "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", + "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", + "memory-fs": "^0.5.0", "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", "dev": true }, "errno": { @@ -4608,31 +5389,37 @@ } }, "error-stack-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", - "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", "dev": true, "requires": { - "stackframe": "^1.0.4" + "stackframe": "^1.1.1" } }, "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", "dev": true, "requires": { - "es-to-primitive": "^1.1.1", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -4648,6 +5435,13 @@ "es6-iterator": "~2.0.3", "es6-symbol": "~3.1.3", "next-tick": "~1.0.0" + }, + "dependencies": { + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + } } }, "es6-iterator": { @@ -4680,6 +5474,12 @@ "es6-symbol": "^3.1.1" } }, + "escalade": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", + "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4692,78 +5492,59 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.10.0.tgz", - "integrity": "sha512-HpqzC+BHULKlnPwWae9MaVZ5AXJKpkxCVXQHrFaRw3hbDj26V/9ArYM4Rr/SQ8pi6qUPLXSSXC4RBJlyq2Z2OQ==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", + "ajv": "^6.9.1", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.0", + "espree": "^5.0.1", "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.7.0", "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "js-yaml": "^3.12.0", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.5", + "lodash": "^4.17.11", "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", "progress": "^2.0.0", "regexpp": "^2.0.1", - "require-uncached": "^1.0.3", "semver": "^5.5.1", "strip-ansi": "^4.0.0", "strip-json-comments": "^2.0.1", - "table": "^5.0.2", + "table": "^5.2.3", "text-table": "^0.2.0" }, "dependencies": { - "acorn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", - "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", - "dev": true - }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", "dev": true }, - "ajv": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.8.1.tgz", - "integrity": "sha512-eqxCp82P+JfqL683wwsL73XmFs1eG6qjw+RD3YHx+Jll1r0jNd4dh8QG9NYAeNGA/hnZjeEDgtTskgJULbxpWQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "chardet": { @@ -4772,31 +5553,36 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esutils": "^2.0.2" } }, + "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 + }, "espree": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", - "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, "requires": { - "acorn": "^6.0.2", + "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" } }, "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { "chardet": "^0.7.0", @@ -4804,11 +5590,25 @@ "tmp": "^0.0.33" } }, - "fast-deep-equal": { + "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" + } + }, + "flat-cache": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } }, "ignore": { "version": "4.0.6", @@ -4816,54 +5616,64 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^3.0.0", + "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.12", "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rxjs": "^6.1.0", + "rxjs": "^6.4.0", "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", + "strip-ansi": "^5.1.0", "through": "^2.3.6" }, "dependencies": { "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "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.0.0" + "ansi-regex": "^4.1.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 - }, "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 }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, "slice-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", - "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", + "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", @@ -4872,23 +5682,54 @@ } }, "table": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/table/-/table-5.1.1.tgz", - "integrity": "sha512-NUjapYb/qd4PeFW03HnAuOJ7OMcBkJlqeClWxeNlQ0lXGSb52oZXGzkO0/I0ARegQ2eUT1g2VDJH0eUxDRcHmw==", + "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.6.1", - "lodash": "^4.17.11", - "slice-ansi": "2.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": { + "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" + } + }, + "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" } } } }, "eslint-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.1.tgz", - "integrity": "sha512-1GrJFfSevQdYpoDzx8mEE2TDWsb/zmFuY09l6hURg1AeFIKQOvZ+vH0UPjzmd1CZIbfTV5HUkMeBmFiDBkgIsQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", + "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", "dev": true, "requires": { "loader-fs-cache": "^1.0.0", @@ -4899,36 +5740,20 @@ } }, "eslint-plugin-vue": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.0.0.tgz", - "integrity": "sha512-mSv2Ebz3RaPP+XJO/mu7F+SdR9lrMyGISSExnarLFqqf3pF5wTmwWNrhHW1o9zKzKI811UVTIIkWJJvgO6SsUQ==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz", + "integrity": "sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw==", "dev": true, "requires": { - "vue-eslint-parser": "^4.0.2" + "vue-eslint-parser": "^5.0.0" }, "dependencies": { - "acorn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", - "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", - "dev": true - }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", "dev": true }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, "espree": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", @@ -4941,9 +5766,9 @@ } }, "vue-eslint-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-4.0.3.tgz", - "integrity": "sha512-AUeQsYdO6+7QXCems+WvGlrXd37PHv/zcRQSQdY1xdOMwdFAPEnMBsv7zPvk0TPGulXkK/5p/ITgrjiYB7k3ag==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz", + "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==", "dev": true, "requires": { "debug": "^4.1.0", @@ -4957,9 +5782,9 @@ } }, "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "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", @@ -4967,39 +5792,29 @@ } }, "eslint-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", - "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "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.0.0" + "eslint-visitor-keys": "^1.1.0" } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, - "espree": { - "version": "3.5.4", - "resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", + "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", "dev": true, "requires": { "estraverse": "^4.0.0" @@ -5015,15 +5830,15 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { @@ -5048,14 +5863,14 @@ "dev": true }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" }, "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", "dev": true }, "eventsource": { @@ -5147,9 +5962,9 @@ } }, "express": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.0.tgz", - "integrity": "sha512-1Z7/t3Z5ZnBG252gKUPyItc4xdeaA0X934ca2ewckAsVsw9EG71i++ZHZPYnus8g/s5Bty8IMpSVEuRkmwwPRQ==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "requires": { "accepts": "~1.3.7", @@ -5208,9 +6023,9 @@ } }, "ext": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.3.0.tgz", - "integrity": "sha512-LErT9cIGZZjSvFkyocVXXeYlj7z8xiA+4oQlM9cX4X/Kfc18cefv3Dd9mNKwFuzUJ7neMMAQz1u1r3gBa/6wGg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", "requires": { "type": "^2.0.0" }, @@ -5247,13 +6062,13 @@ } }, "external-editor": { - "version": "2.2.0", - "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, @@ -5322,14 +6137,14 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.4.tgz", - "integrity": "sha512-FjK2nCGI/McyzgNtTESqaWP3trPvHyRyoyY70hxjc3oKPNmDe8taohLZpoVKoUjW85tbU5txaYUZCNtVzygl1g==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dev": true, "requires": { "@mrmlnc/readdir-enhanced": "^2.2.1", @@ -5341,11 +6156,18 @@ } }, "fast-json-patch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.1.0.tgz", - "integrity": "sha512-PipOsAKamRw7+CXtKiieehyjUeDVPJ5J7b2kdJYerEf6TSUQoD2ijpVyZ88KQm5YXziff4h762bz3+vzf56khg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz", + "integrity": "sha512-4j5uBaTnsYAV5ebkidvxiLUYOwjQ+JSFljeqfTxCrH9bDmlCQaOJFS84oDJ2rAXZq2yskmk3ORfoP9DCwqFNig==", "requires": { - "deep-equal": "^1.0.1" + "fast-deep-equal": "^2.0.1" + }, + "dependencies": { + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + } } }, "fast-json-stable-stringify": { @@ -5359,11 +6181,13 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true + "fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "requires": { + "format": "^0.2.0" + } }, "faye-websocket": { "version": "0.10.0", @@ -5410,25 +6234,35 @@ "escape-string-regexp": "^1.0.5" } }, - "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=", + "file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", + "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + }, + "dependencies": { + "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" + } + } } }, - "file-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", - "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true, - "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" - } + "optional": true }, "filesize": { "version": "3.6.1", @@ -5489,60 +6323,60 @@ } } }, + "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, + "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 + } + } + }, "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "locate-path": "^2.0.0" + "locate-path": "^3.0.0" } }, "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, "requires": { "detect-file": "^1.0.0", - "is-glob": "^3.1.0", + "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" - }, - "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" - } - } } }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - } + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true }, "flush-write-stream": { "version": "1.1.1", @@ -5555,41 +6389,15 @@ } }, "follow-redirects": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.0.tgz", - "integrity": "sha512-4Oh4eI3S9OueVV41AgJ1oLjpaJUhbJ7JDGOMhe0AFqoSejl5Q2nn3eGglAzRUKVKZE8jG5MNn66TjCJMAnpsWA==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.0.tgz", + "integrity": "sha512-JgawlbfBQKjbKegPn8vUsvJqplE7KHJuhGO4yPcb+ZOIYKSr+xobMVlfRBToZwZUUxy7lFiKBdFNloz9ui368Q==" }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "requires": { - "for-in": "^1.0.1" - } - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -5605,6 +6413,11 @@ "mime-types": "^2.1.12" } }, + "format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=" + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -5646,6 +6459,15 @@ "universalify": "^0.1.0" } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -5664,14 +6486,15 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "node-pre-gyp": "*" }, "dependencies": { "abbrev": { @@ -5683,7 +6506,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -5704,19 +6528,21 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "chownr": { - "version": "1.1.1", + "version": "1.1.4", "bundled": true, "dev": true, "optional": true @@ -5724,17 +6550,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5743,7 +6572,7 @@ "optional": true }, "debug": { - "version": "4.1.1", + "version": "3.2.6", "bundled": true, "dev": true, "optional": true, @@ -5770,12 +6599,12 @@ "optional": true }, "fs-minipass": { - "version": "1.2.5", + "version": "1.2.7", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.6.0" } }, "fs.realpath": { @@ -5801,7 +6630,7 @@ } }, "glob": { - "version": "7.1.3", + "version": "7.1.6", "bundled": true, "dev": true, "optional": true, @@ -5830,7 +6659,7 @@ } }, "ignore-walk": { - "version": "3.0.1", + "version": "3.0.3", "bundled": true, "dev": true, "optional": true, @@ -5849,9 +6678,10 @@ } }, "inherits": { - "version": "2.0.3", + "version": "2.0.4", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5863,6 +6693,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5877,60 +6708,64 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { - "version": "2.3.5", + "version": "2.9.0", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, "minizlib": { - "version": "1.2.1", + "version": "1.3.3", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.9.0" } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.3", "bundled": true, "dev": true, + "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { - "version": "2.1.1", + "version": "2.1.2", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.3.0", + "version": "2.3.3", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^4.1.0", + "debug": "^3.2.6", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.12.0", + "version": "0.14.0", "bundled": true, "dev": true, "optional": true, @@ -5944,11 +6779,11 @@ "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", - "tar": "^4" + "tar": "^4.4.2" } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "dev": true, "optional": true, @@ -5958,19 +6793,29 @@ } }, "npm-bundled": { - "version": "1.0.6", + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.4.1", + "version": "1.4.8", "bundled": true, "dev": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npmlog": { @@ -5988,7 +6833,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -6000,6 +6846,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6033,7 +6880,7 @@ "optional": true }, "process-nextick-args": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "dev": true, "optional": true @@ -6048,18 +6895,10 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } } }, "readable-stream": { - "version": "2.3.6", + "version": "2.3.7", "bundled": true, "dev": true, "optional": true, @@ -6074,7 +6913,7 @@ } }, "rimraf": { - "version": "2.6.3", + "version": "2.7.1", "bundled": true, "dev": true, "optional": true, @@ -6085,7 +6924,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6100,7 +6940,7 @@ "optional": true }, "semver": { - "version": "5.7.0", + "version": "5.7.1", "bundled": true, "dev": true, "optional": true @@ -6121,6 +6961,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6140,6 +6981,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6151,18 +6993,18 @@ "optional": true }, "tar": { - "version": "4.4.8", + "version": "4.4.13", "bundled": true, "dev": true, "optional": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "yallist": "^3.0.3" } }, "util-deprecate": { @@ -6183,12 +7025,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { - "version": "3.0.3", + "version": "3.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -6271,10 +7115,17 @@ "globule": "^1.0.0" } }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-stdin": { "version": "4.0.1", @@ -6344,14 +7195,25 @@ "dev": true }, "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } } }, "global-prefix": { @@ -6368,73 +7230,65 @@ } }, "globals": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globby": { - "version": "8.0.1", - "resolved": "http://registry.npmjs.org/globby/-/globby-8.0.1.tgz", - "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", "dev": true, "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" } }, "globule": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.0.tgz", - "integrity": "sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz", + "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==", "requires": { "glob": "~7.1.1", - "lodash": "~4.17.10", + "lodash": "~4.17.12", "minimatch": "~3.0.2" } }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, - "gulp-header": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz", - "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==", - "requires": { - "concat-with-sourcemaps": "*", - "lodash.template": "^4.4.0", - "through2": "^2.0.0" - } - }, "gzip-size": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.0.tgz", - "integrity": "sha512-wfSnvypBDRW94v5W3ckvvz/zFUNdJ81VgOP6tE4bPpRUcc0wGqU+y0eZjJEvKxwubJFix6P84sE8M51YWLT7rQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "dev": true, "requires": { "duplexer": "^0.1.1", "pify": "^4.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } } }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, "har-schema": { @@ -6504,9 +7358,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, "has-unicode": { @@ -6544,19 +7398,45 @@ } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "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 + } } }, "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", "dev": true }, "hash.js": { @@ -6569,6 +7449,22 @@ "minimalistic-assert": "^1.0.1" } }, + "hast-util-parse-selector": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz", + "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==" + }, + "hastscript": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", + "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", + "requires": { + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -6582,9 +7478,9 @@ "dev": true }, "highlight.js": { - "version": "9.15.6", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", - "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==", + "version": "9.18.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.3.tgz", + "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ==", "dev": true }, "hmac-drbg": { @@ -6598,24 +7494,18 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.2.tgz", - "integrity": "sha512-6qhh/wahGYZHFSFw12tBbJw5fsAhhwrrG/y3Cs0YMTv2WzMnL0oLPnQJjv1QJvEfylRSOFuP+xCu+tdx0tD16Q==", - "dev": true - }, "hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "requires": { "react-is": "^16.7.0" } }, "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "requires": { "parse-passwd": "^1.0.0" @@ -6663,9 +7553,9 @@ "dev": true }, "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", "dev": true }, "html-minifier": { @@ -6681,11 +7571,25 @@ "param-case": "2.1.x", "relateurl": "0.2.x", "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } } }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + }, "html-webpack-plugin": { "version": "3.2.0", - "resolved": "http://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { @@ -6706,7 +7610,7 @@ }, "json5": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, @@ -6721,6 +7625,16 @@ "json5": "^0.5.0", "object-assign": "^4.0.1" } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } } } }, @@ -6738,10 +7652,16 @@ "readable-stream": "^3.1.1" }, "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "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", @@ -6770,28 +7690,22 @@ "toidentifier": "1.0.0" } }, - "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", - "dev": true - }, "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "requires": { - "eventemitter3": "^3.0.0", + "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } }, "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.2.tgz", + "integrity": "sha512-aYk1rTKqLTus23X3L96LGNCGNgWpG4cG0XoZIT1GUPhhulEHX/QalnO6Vbo+WmKWi4AL2IidjuC0wZtbpg0yhQ==", "requires": { - "http-proxy": "^1.17.0", + "http-proxy": "^1.18.1", "is-glob": "^4.0.0", "lodash": "^4.17.11", "micromatch": "^3.1.10" @@ -6813,6 +7727,12 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, "i": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", @@ -6822,6 +7742,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -6833,12 +7754,12 @@ "dev": true }, "icss-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.0.0.tgz", - "integrity": "sha512-bA/xGiwWM17qjllIs9X/y0EjsB7e0AV08F3OL8UPsoNkNRibIuu8f1eKTnQ8QO1DteKKTxTUAn+IEWUToIwGOA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", "dev": true, "requires": { - "postcss": "^7.0.5" + "postcss": "^7.0.14" } }, "ieee754": { @@ -6853,9 +7774,9 @@ "dev": true }, "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "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 }, "immutable": { @@ -6880,23 +7801,6 @@ "requires": { "caller-path": "^2.0.0", "resolve-from": "^3.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" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } } }, "import-from": { @@ -6906,14 +7810,6 @@ "dev": true, "requires": { "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } } }, "import-local": { @@ -6924,60 +7820,6 @@ "requires": { "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "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-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.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" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } } }, "imurmurhash": { @@ -6987,9 +7829,9 @@ "dev": true }, "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==" }, "indent-string": { "version": "2.1.0", @@ -7005,12 +7847,6 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, "infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -7038,25 +7874,187 @@ "dev": true }, "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, - "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", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", "through": "^2.3.6" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "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 + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "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 + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } } }, "internal-ip": { @@ -7067,12 +8065,24 @@ "requires": { "default-gateway": "^4.2.0", "ipaddr.js": "^1.9.0" + }, + "dependencies": { + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + } } }, "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, "invariant": { @@ -7080,14 +8090,8 @@ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true + "loose-envify": "^1.0.0" + } }, "ip": { "version": "1.1.5", @@ -7102,9 +8106,9 @@ "dev": true }, "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true }, "is-absolute-url": { @@ -7131,6 +8135,26 @@ } } }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -7151,9 +8175,9 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", "dev": true }, "is-ci": { @@ -7198,11 +8222,16 @@ } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -7226,6 +8255,12 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "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==", + "dev": true + }, "is-dom": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz", @@ -7246,12 +8281,9 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -7266,6 +8298,11 @@ "is-extglob": "^2.1.1" } }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -7285,9 +8322,9 @@ } }, "is-obj": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, "is-object": { @@ -7296,9 +8333,9 @@ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" }, "is-path-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz", - "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true }, "is-path-in-cwd": { @@ -7339,12 +8376,12 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "dev": true, "requires": { - "has": "^1.0.1" + "has": "^1.0.3" } }, "is-resolvable": { @@ -7368,12 +8405,12 @@ } }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, "is-typedarray": { @@ -7407,15 +8444,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "requires": { - "punycode": "2.x.x" - } - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -7447,31 +8475,11 @@ } }, "isomorphic-form-data": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-form-data/-/isomorphic-form-data-0.0.1.tgz", - "integrity": "sha1-Am9ifgMrDNhBPsyHVZKLlKRosGI=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-form-data/-/isomorphic-form-data-2.0.0.tgz", + "integrity": "sha512-TYgVnXWeESVmQSg4GLVbalmQ+B4NPi/H4eWxqALKj63KsUrcu301YDjBqaOw3h+cbak7Na4Xyps3BiptHtxTfg==", "requires": { - "form-data": "^1.0.0-rc3" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, - "form-data": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", - "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", - "requires": { - "async": "^2.0.1", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.11" - } - } + "form-data": "^2.3.2" } }, "isstream": { @@ -7480,36 +8488,52 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "javascript-stringify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", - "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.0.1.tgz", + "integrity": "sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow==", "dev": true }, - "joi": { - "version": "14.3.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz", - "integrity": "sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ==", + "jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", "dev": true, "requires": { - "hoek": "6.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" + "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.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz", + "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==" }, "js-file-download": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.8.tgz", - "integrity": "sha512-8xygX/IkjQbr/2nWqJnyc0IWOMvA1R/78HQVyexB22YZDBAEz2MG59s+ieLFKOkDFzyDDk3bezKXEjyGW5HPCw==" + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.12.tgz", + "integrity": "sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==" }, "js-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.4.tgz", - "integrity": "sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", "dev": true }, "js-message": { @@ -7580,18 +8604,26 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", "dev": true }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.2.tgz", + "integrity": "sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } } }, "jsonfile": { @@ -7603,12 +8635,6 @@ "graceful-fs": "^4.1.6" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -7627,9 +8653,9 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "launch-editor": { "version": "2.2.1", @@ -7650,14 +8676,10 @@ "launch-editor": "^2.2.1" } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } + "leaflet": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz", + "integrity": "sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ==" }, "levn": { "version": "0.3.0", @@ -7669,6 +8691,12 @@ "type-check": "~0.3.2" } }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -7697,13 +8725,13 @@ } }, "loader-fs-cache": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", - "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "dev": true, "requires": { "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" }, "dependencies": { "find-cache-dir": { @@ -7774,30 +8802,24 @@ } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "p-locate": "^2.0.0", + "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "lodash-es": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -7809,6 +8831,12 @@ "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", "dev": true }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, "lodash.mapvalues": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", @@ -7821,28 +8849,6 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=" - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, "lodash.transform": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", @@ -7865,9 +8871,9 @@ } }, "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", "dev": true }, "loose-envify": { @@ -7893,6 +8899,22 @@ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", "dev": true }, + "lowlight": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.14.0.tgz", + "integrity": "sha512-N2E7zTM7r1CwbzwspPxJvmjAbxljCPThTFawEX2Z7+P3NGrrvY54u8kyU16IY4qWfoVIxY8SYCS8jTkuG7TqYA==", + "requires": { + "fault": "^1.0.0", + "highlight.js": "~10.1.0" + }, + "dependencies": { + "highlight.js": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.1.2.tgz", + "integrity": "sha512-Q39v/Mn5mfBlMff9r+zzA+gWxRsCRKwEMvYTiisLr/XUiFI/4puWt0Ojdko3R3JCNWGdOWaA5g/Yxqa23kC5AA==" + } + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -7911,21 +8933,13 @@ } }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "p-defer": "^1.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" } }, "map-cache": { @@ -7958,28 +8972,17 @@ } }, "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", "dev": true }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" - } - }, "memoizee": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", @@ -8045,10 +9048,16 @@ } } }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "methods": { @@ -8085,12 +9094,20 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "mime": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", - "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", "dev": true }, "mime-db": { @@ -8113,26 +9130,27 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz", - "integrity": "sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", "dev": true, "requires": { "loader-utils": "^1.1.0", - "normalize-url": "^2.0.1", + "normalize-url": "1.9.1", "schema-utils": "^1.0.0", "webpack-sources": "^1.1.0" }, "dependencies": { "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" } } } @@ -8158,14 +9176,58 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } }, "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { "concat-stream": "^1.5.0", @@ -8174,22 +9236,10 @@ "flush-write-stream": "^1.0.0", "from2": "^2.1.0", "parallel-transform": "^1.1.0", - "pump": "^2.0.1", + "pump": "^3.0.0", "pumpify": "^1.3.3", "stream-each": "^1.1.0", "through2": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } } }, "mixin-deep": { @@ -8211,41 +9261,18 @@ } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" - } - } - }, "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } + "minimist": "^1.2.5" } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" }, "moment-range": { "version": "4.0.2", @@ -8270,9 +9297,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "multicast-dns": { @@ -8309,11 +9336,9 @@ } }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "dev": true, - "optional": true + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" }, "nanomatch": { "version": "1.2.13", @@ -8346,14 +9371,14 @@ "dev": true }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" }, "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "nice-try": { "version": "1.0.5", @@ -8376,9 +9401,9 @@ "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" }, "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", "dev": true }, "node-gyp": { @@ -8419,9 +9444,9 @@ } }, "node-libs-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", - "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { "assert": "^1.1.1", @@ -8434,7 +9459,7 @@ "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", + "path-browserify": "0.0.1", "process": "^0.11.10", "punycode": "^1.2.4", "querystring-es3": "^0.2.0", @@ -8446,7 +9471,7 @@ "tty-browserify": "0.0.0", "url": "^0.11.0", "util": "^0.11.0", - "vm-browserify": "0.0.4" + "vm-browserify": "^1.0.1" }, "dependencies": { "punycode": { @@ -8458,18 +9483,26 @@ } }, "node-releases": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz", - "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==", + "version": "1.1.52", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", + "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", "dev": true, "requires": { - "semver": "^5.3.0" + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "node-sass": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz", - "integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", "requires": { "async-foreach": "^0.1.3", "chalk": "^1.1.1", @@ -8485,7 +9518,7 @@ "node-gyp": "^3.8.0", "npmlog": "^4.0.0", "request": "^2.88.0", - "sass-graph": "^2.2.4", + "sass-graph": "2.2.5", "stdout-stream": "^1.4.0", "true-case-path": "^1.0.2" }, @@ -8530,11 +9563,6 @@ "yallist": "^2.1.2" } }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -8575,9 +9603,9 @@ }, "dependencies": { "resolve": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", - "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", "requires": { "path-parse": "^1.0.6" } @@ -8603,9 +9631,9 @@ "dev": true }, "npm": { - "version": "6.13.6", - "resolved": "https://registry.npmjs.org/npm/-/npm-6.13.6.tgz", - "integrity": "sha512-NomC08kv7HIl1FOyLOe9Hp89kYsOsvx52huVIJ7i8hFW8Xp65lDwe/8wTIrh9q9SaQhA8hTrfXPh3BEL3TmMpw==", + "version": "6.14.8", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.8.tgz", + "integrity": "sha512-HBZVBMYs5blsj94GTeQZel7s9odVuuSUHy1+AlZh7rPVux1os2ashvEGLy/STNK7vUjbrCg5Kq9/GXisJgdf6A==", "requires": { "JSONStream": "^1.3.5", "abbrev": "~1.1.1", @@ -8613,12 +9641,12 @@ "ansistyles": "~0.1.3", "aproba": "^2.0.0", "archy": "~1.0.0", - "bin-links": "^1.1.6", + "bin-links": "^1.1.8", "bluebird": "^3.5.5", "byte-size": "^5.0.1", "cacache": "^12.0.3", "call-limit": "^1.1.1", - "chownr": "^1.1.3", + "chownr": "^1.1.4", "ci-info": "^2.0.0", "cli-columns": "^3.1.2", "cli-table3": "^0.5.1", @@ -8634,11 +9662,11 @@ "find-npm-prefix": "^1.0.2", "fs-vacuum": "~1.2.10", "fs-write-stream-atomic": "~1.0.10", - "gentle-fs": "^2.3.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", + "gentle-fs": "^2.3.1", + "glob": "^7.1.6", + "graceful-fs": "^4.2.4", "has-unicode": "~2.0.1", - "hosted-git-info": "^2.8.5", + "hosted-git-info": "^2.8.8", "iferr": "^1.0.2", "imurmurhash": "*", "infer-owner": "^1.0.4", @@ -8649,14 +9677,14 @@ "is-cidr": "^3.0.0", "json-parse-better-errors": "^1.0.2", "lazy-property": "~1.0.0", - "libcipm": "^4.0.7", + "libcipm": "^4.0.8", "libnpm": "^3.0.1", "libnpmaccess": "^3.0.2", "libnpmhook": "^5.0.3", "libnpmorg": "^1.0.1", "libnpmsearch": "^2.0.2", "libnpmteam": "^1.0.2", - "libnpx": "^10.2.0", + "libnpx": "^10.2.4", "lock-verify": "^2.1.0", "lockfile": "^1.0.4", "lodash._baseindexof": "*", @@ -8671,22 +9699,22 @@ "lodash.uniq": "~4.5.0", "lodash.without": "~4.4.0", "lru-cache": "^5.1.1", - "meant": "~1.0.1", + "meant": "^1.0.2", "mississippi": "^3.0.0", - "mkdirp": "~0.5.1", + "mkdirp": "^0.5.5", "move-concurrently": "^1.0.1", - "node-gyp": "^5.0.5", - "nopt": "~4.0.1", + "node-gyp": "^5.1.0", + "nopt": "^4.0.3", "normalize-package-data": "^2.5.0", - "npm-audit-report": "^1.3.2", + "npm-audit-report": "^1.3.3", "npm-cache-filename": "~1.0.2", "npm-install-checks": "^3.0.2", - "npm-lifecycle": "^3.1.4", + "npm-lifecycle": "^3.1.5", "npm-package-arg": "^6.1.1", - "npm-packlist": "^1.4.7", + "npm-packlist": "^1.4.8", "npm-pick-manifest": "^3.0.2", - "npm-profile": "^4.0.2", - "npm-registry-fetch": "^4.0.2", + "npm-profile": "^4.0.4", + "npm-registry-fetch": "^4.0.7", "npm-user-validate": "~1.0.0", "npmlog": "~4.1.2", "once": "~1.4.0", @@ -8703,11 +9731,11 @@ "read-installed": "~4.0.3", "read-package-json": "^2.1.1", "read-package-tree": "^5.3.1", - "readable-stream": "^3.4.0", + "readable-stream": "^3.6.0", "readdir-scoped-modules": "^1.1.0", "request": "^2.88.0", "retry": "^0.12.0", - "rimraf": "^2.6.3", + "rimraf": "^2.7.1", "safe-buffer": "^5.1.2", "semver": "^5.7.1", "sha": "^3.0.0", @@ -8872,7 +9900,7 @@ } }, "bin-links": { - "version": "1.1.6", + "version": "1.1.8", "bundled": true, "requires": { "bluebird": "^3.5.3", @@ -8971,7 +9999,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.4", "bundled": true }, "ci-info": { @@ -9007,23 +10035,36 @@ } }, "cliui": { - "version": "4.1.0", + "version": "5.0.0", "bundled": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", + "version": "4.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", "bundled": true }, + "string-width": { + "version": "3.1.0", + "bundled": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, "strip-ansi": { - "version": "4.0.0", + "version": "5.2.0", "bundled": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -9124,10 +10165,10 @@ } }, "configstore": { - "version": "3.1.2", + "version": "3.1.5", "bundled": true, "requires": { - "dot-prop": "^4.1.0", + "dot-prop": "^4.2.1", "graceful-fs": "^4.1.2", "make-dir": "^1.0.0", "unique-string": "^1.0.0", @@ -9236,7 +10277,7 @@ "bundled": true }, "deep-extend": { - "version": "0.5.1", + "version": "0.6.0", "bundled": true }, "defaults": { @@ -9278,7 +10319,7 @@ } }, "dot-prop": { - "version": "4.2.0", + "version": "4.2.1", "bundled": true, "requires": { "is-obj": "^1.0.0" @@ -9337,6 +10378,10 @@ "version": "1.0.0", "bundled": true }, + "emoji-regex": { + "version": "7.0.3", + "bundled": true + }, "encoding": { "version": "0.1.12", "bundled": true, @@ -9352,7 +10397,7 @@ } }, "env-paths": { - "version": "1.0.0", + "version": "2.2.0", "bundled": true }, "err-code": { @@ -9444,13 +10489,6 @@ "version": "1.0.2", "bundled": true }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "requires": { - "locate-path": "^2.0.0" - } - }, "flush-write-stream": { "version": "1.0.3", "bundled": true, @@ -9628,7 +10666,7 @@ "bundled": true }, "gentle-fs": { - "version": "2.3.0", + "version": "2.3.1", "bundled": true, "requires": { "aproba": "^1.1.2", @@ -9655,7 +10693,7 @@ } }, "get-caller-file": { - "version": "1.0.2", + "version": "2.0.5", "bundled": true }, "get-stream": { @@ -9673,7 +10711,7 @@ } }, "glob": { - "version": "7.1.4", + "version": "7.1.6", "bundled": true, "requires": { "fs.realpath": "^1.0.0", @@ -9715,7 +10753,7 @@ } }, "graceful-fs": { - "version": "4.2.3", + "version": "4.2.4", "bundled": true }, "har-schema": { @@ -9750,7 +10788,7 @@ "bundled": true }, "hosted-git-info": { - "version": "2.8.5", + "version": "2.8.8", "bundled": true }, "http-cache-semantics": { @@ -9849,10 +10887,6 @@ "validate-npm-package-name": "^3.0.0" } }, - "invert-kv": { - "version": "1.0.0", - "bundled": true - }, "ip": { "version": "1.1.5", "bundled": true @@ -9866,10 +10900,10 @@ "bundled": true }, "is-ci": { - "version": "1.1.0", + "version": "1.2.1", "bundled": true, "requires": { - "ci-info": "^1.0.0" + "ci-info": "^1.5.0" }, "dependencies": { "ci-info": { @@ -9931,7 +10965,7 @@ } }, "is-retry-allowed": { - "version": "1.1.0", + "version": "1.2.0", "bundled": true }, "is-stream": { @@ -10007,15 +11041,8 @@ "version": "1.0.0", "bundled": true }, - "lcid": { - "version": "1.0.0", - "bundled": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, "libcipm": { - "version": "4.0.7", + "version": "4.0.8", "bundled": true, "requires": { "bin-links": "^1.1.2", @@ -10024,7 +11051,7 @@ "find-npm-prefix": "^1.0.2", "graceful-fs": "^4.1.11", "ini": "^1.3.5", - "lock-verify": "^2.0.2", + "lock-verify": "^2.1.0", "mkdirp": "^0.5.1", "npm-lifecycle": "^3.0.0", "npm-logical-tree": "^1.2.1", @@ -10170,7 +11197,7 @@ } }, "libnpx": { - "version": "10.2.0", + "version": "10.2.4", "bundled": true, "requires": { "dotenv": "^5.0.1", @@ -10180,15 +11207,7 @@ "update-notifier": "^2.3.0", "which": "^1.3.0", "y18n": "^4.0.0", - "yargs": "^11.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "yargs": "^14.2.3" } }, "lock-verify": { @@ -10301,16 +11320,9 @@ } }, "meant": { - "version": "1.0.1", + "version": "1.0.2", "bundled": true }, - "mem": { - "version": "1.1.0", - "bundled": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, "mime-db": { "version": "1.35.0", "bundled": true @@ -10322,10 +11334,6 @@ "mime-db": "~1.35.0" } }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true - }, "minimatch": { "version": "3.0.4", "bundled": true, @@ -10334,7 +11342,7 @@ } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true }, "minizlib": { @@ -10371,10 +11379,16 @@ } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.5", "bundled": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "bundled": true + } } }, "move-concurrently": { @@ -10413,37 +11427,24 @@ } }, "node-gyp": { - "version": "5.0.5", + "version": "5.1.0", "bundled": true, "requires": { - "env-paths": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", "tar": "^4.4.12", - "which": "1" - }, - "dependencies": { - "nopt": { - "version": "3.0.6", - "bundled": true, - "requires": { - "abbrev": "1" - } - }, - "semver": { - "version": "5.3.0", - "bundled": true - } + "which": "^1.3.1" } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "requires": { "abbrev": "1", @@ -10470,7 +11471,7 @@ } }, "npm-audit-report": { - "version": "1.3.2", + "version": "1.3.3", "bundled": true, "requires": { "cli-table3": "^0.5.0", @@ -10496,7 +11497,7 @@ } }, "npm-lifecycle": { - "version": "3.1.4", + "version": "3.1.5", "bundled": true, "requires": { "byline": "^5.0.0", @@ -10528,11 +11529,12 @@ } }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.8", "bundled": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npm-pick-manifest": { @@ -10545,7 +11547,7 @@ } }, "npm-profile": { - "version": "4.0.2", + "version": "4.0.4", "bundled": true, "requires": { "aproba": "^1.1.2 || 2", @@ -10554,7 +11556,7 @@ } }, "npm-registry-fetch": { - "version": "4.0.2", + "version": "4.0.7", "bundled": true, "requires": { "JSONStream": "^1.3.4", @@ -10567,7 +11569,7 @@ }, "dependencies": { "safe-buffer": { - "version": "5.2.0", + "version": "5.2.1", "bundled": true } } @@ -10632,15 +11634,6 @@ "version": "1.0.2", "bundled": true }, - "os-locale": { - "version": "2.1.0", - "bundled": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, "os-tmpdir": { "version": "1.0.2", "bundled": true @@ -10657,24 +11650,6 @@ "version": "1.0.0", "bundled": true }, - "p-limit": { - "version": "1.2.0", - "bundled": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "bundled": true - }, "package-json": { "version": "4.0.1", "bundled": true, @@ -10899,19 +11874,13 @@ "bundled": true }, "rc": { - "version": "1.2.7", + "version": "1.2.8", "bundled": true, "requires": { - "deep-extend": "^0.5.1", + "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true - } } }, "read": { @@ -10962,7 +11931,7 @@ } }, "readable-stream": { - "version": "3.4.0", + "version": "3.6.0", "bundled": true, "requires": { "inherits": "^2.0.3", @@ -10981,7 +11950,7 @@ } }, "registry-auth-token": { - "version": "3.3.2", + "version": "3.4.0", "bundled": true, "requires": { "rc": "^1.1.6", @@ -11026,7 +11995,7 @@ "bundled": true }, "require-main-filename": { - "version": "1.0.1", + "version": "2.0.0", "bundled": true }, "resolve-from": { @@ -11038,7 +12007,7 @@ "bundled": true }, "rimraf": { - "version": "2.6.3", + "version": "2.7.1", "bundled": true, "requires": { "glob": "^7.1.3" @@ -11196,7 +12165,7 @@ } }, "spdx-license-ids": { - "version": "3.0.3", + "version": "3.0.5", "bundled": true }, "split-on-first": { @@ -11297,10 +12266,16 @@ } }, "string_decoder": { - "version": "1.2.0", + "version": "1.3.0", "bundled": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "bundled": true + } } }, "stringify-package": { @@ -11569,7 +12544,7 @@ } }, "widest-line": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "requires": { "string-width": "^2.1.1" @@ -11583,20 +12558,36 @@ } }, "wrap-ansi": { - "version": "2.1.0", + "version": "5.1.0", "bundled": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, "string-width": { - "version": "1.0.2", + "version": "3.1.0", "bundled": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "bundled": true, + "requires": { + "ansi-regex": "^4.1.0" } } } @@ -11631,34 +12622,93 @@ "bundled": true }, "yargs": { - "version": "11.0.0", + "version": "14.2.3", "bundled": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" }, "dependencies": { - "y18n": { - "version": "3.2.1", + "ansi-regex": { + "version": "4.1.0", + "bundled": true + }, + "find-up": { + "version": "3.0.0", + "bundled": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "bundled": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", "bundled": true + }, + "string-width": { + "version": "3.1.0", + "bundled": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "bundled": true, + "requires": { + "ansi-regex": "^4.1.0" + } } } }, "yargs-parser": { - "version": "9.0.2", + "version": "15.0.1", "bundled": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "bundled": true + } } } } @@ -11747,10 +12797,62 @@ "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", "dev": true }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } + } + }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object-visit": { @@ -11774,13 +12876,13 @@ } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "object.pick": { @@ -11792,13 +12894,13 @@ } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" } @@ -11841,6 +12943,15 @@ "mimic-fn": "^1.0.0" } }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, "opener": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", @@ -11848,40 +12959,57 @@ "dev": true }, "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { "is-wsl": "^1.1.0" } }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" } }, "ora": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz", - "integrity": "sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", "dev": true, "requires": { - "chalk": "^2.3.1", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", + "cli-spinners": "^2.0.0", "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", + "strip-ansi": "^5.2.0", "wcwidth": "^1.0.1" + }, + "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", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "original": { @@ -11904,17 +13032,6 @@ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -11929,67 +13046,64 @@ "os-tmpdir": "^1.0.0" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "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, + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "requires": { - "p-try": "^1.0.0" + "p-try": "^2.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, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.0.0" } }, "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.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 + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, "requires": { - "cyclist": "~0.2.2", + "cyclist": "^1.0.1", "inherits": "^2.0.3", "readable-stream": "^2.1.5" } @@ -12003,28 +13117,59 @@ "no-case": "^2.2.0" } }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, "parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { - "asn1.js": "^4.0.0", + "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" } }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", "dev": true, "requires": { + "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" } }, "parse-passwd": { @@ -12034,11 +13179,20 @@ "dev": true }, "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "dev": true }, + "parse5-htmlparser2-tree-adapter": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz", + "integrity": "sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw==", + "dev": true, + "requires": { + "parse5": "^5.1.1" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -12051,9 +13205,9 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-browserify": { - "version": "0.0.0", - "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", "dev": true }, "path-dirname": { @@ -12065,8 +13219,7 @@ "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 + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", @@ -12103,12 +13256,20 @@ "dev": true, "requires": { "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -12123,10 +13284,17 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "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==", + "dev": true, + "optional": true + }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, "pinkie": { "version": "2.0.4", @@ -12142,24 +13310,36 @@ } }, "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "^3.0.0" } }, - "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 + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } }, "popper.js": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.7.tgz", - "integrity": "sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ==" + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, "portal-vue": { "version": "2.1.7", @@ -12167,30 +13347,24 @@ "integrity": "sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g==" }, "portfinder": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", - "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -12200,14 +13374,14 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.7.tgz", - "integrity": "sha512-HThWSJEPkupqew2fnuQMEI2YcTj/8gMV3n80cMdJsKxfIh5tHf7nM5JigNX6LxVMqo6zkgQNAI88hyFvBk41Pg==", + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", + "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", "dev": true, "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "source-map": "^0.6.1", - "supports-color": "^5.5.0" + "supports-color": "^6.1.0" }, "dependencies": { "source-map": { @@ -12215,19 +13389,27 @@ "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": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", - "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.3.tgz", + "integrity": "sha512-IB/EAEmZhIMEIhG7Ov4x+l47UaXOS1n2f4FBUk/aKllQhtSCxWhTzn0nJgkqN7fo/jcWySvWTSB6Syk9L+31bA==", "dev": true, "requires": { - "css-unit-converter": "^1.1.1", - "postcss": "^7.0.5", - "postcss-selector-parser": "^5.0.0-rc.4", - "postcss-value-parser": "^3.3.1" + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" } }, "postcss-colormin": { @@ -12241,6 +13423,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-convert-values": { @@ -12251,6 +13441,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-discard-comments": { @@ -12290,27 +13488,13 @@ } }, "postcss-load-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", - "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", "dev": true, "requires": { - "cosmiconfig": "^4.0.0", + "cosmiconfig": "^5.0.0", "import-cwd": "^2.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", - "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" - } - } } }, "postcss-loader": { @@ -12335,6 +13519,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-merge-rules": { @@ -12352,12 +13544,12 @@ }, "dependencies": { "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -12372,6 +13564,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-minify-gradients": { @@ -12384,6 +13584,14 @@ "is-color-stop": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-minify-params": { @@ -12398,6 +13606,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-minify-selectors": { @@ -12413,12 +13629,12 @@ }, "dependencies": { "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -12435,33 +13651,62 @@ } }, "postcss-modules-local-by-default": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.5.tgz", - "integrity": "sha512-iFgxlCAVLno5wIJq+4hyuOmc4VjZEZxzpdeuZcBytLNWEK5Bx2oRF9PPcAz5TALbaFvrZm8sJYtJ3hV+tMSEIg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^7.0.6", - "postcss-value-parser": "^3.3.1" + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "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-scope": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.0.1.tgz", - "integrity": "sha512-7+6k9c3/AuZ5c596LJx9n923A/j3nF3ormewYBF1RrIQvjvjXe1xE8V8A1KFyFwXbvnshT6FBZFX0k/F1igneg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^7.0.6" + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" } }, "postcss-modules-values": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz", - "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", "dev": true, "requires": { - "icss-replace-symbols": "^1.1.0", + "icss-utils": "^4.0.0", "postcss": "^7.0.6" } }, @@ -12483,6 +13728,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-positions": { @@ -12495,6 +13748,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-repeat-style": { @@ -12507,6 +13768,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-string": { @@ -12518,6 +13787,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-timing-functions": { @@ -12529,6 +13806,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-unicode": { @@ -12540,6 +13825,14 @@ "browserslist": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-url": { @@ -12552,6 +13845,14 @@ "normalize-url": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-whitespace": { @@ -12562,6 +13863,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-ordered-values": { @@ -12573,6 +13882,14 @@ "cssnano-util-get-arguments": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-reduce-initial": { @@ -12597,15 +13914,23 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", "dev": true, "requires": { - "cssesc": "^2.0.0", + "cssesc": "^3.0.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -12620,6 +13945,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-unique-selectors": { @@ -12634,9 +13967,9 @@ } }, "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 }, "prelude-ls": { @@ -12646,16 +13979,17 @@ "dev": true }, "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, "prettier": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz", - "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==", - "dev": true + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "optional": true }, "pretty-error": { "version": "2.1.1", @@ -12667,6 +14001,14 @@ "utila": "~0.4" } }, + "prismjs": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.21.0.tgz", + "integrity": "sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw==", + "requires": { + "clipboard": "^2.0.0" + } + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -12714,14 +14056,22 @@ "react-is": "^16.8.1" } }, + "property-information": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.5.0.tgz", + "integrity": "sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA==", + "requires": { + "xtend": "^4.0.0" + } + }, "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ipaddr.js": "1.9.1" } }, "prr": { @@ -12752,6 +14102,14 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "pump": { @@ -12804,12 +14162,11 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { - "decode-uri-component": "^0.2.0", "object-assign": "^4.1.0", "strict-uri-encode": "^1.0.0" } @@ -12831,9 +14188,9 @@ "dev": true }, "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "raf": { "version": "3.4.1", @@ -12891,6 +14248,15 @@ "prop-types": "^15.5.10" } }, + "react-copy-to-clipboard": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.1.tgz", + "integrity": "sha512-ELKq31/E3zjFs5rDWNCfFL4NvNFQvGRoJdAKReD/rUPA+xxiLPQmZBZBvy2vgH7V0GE9isIQpT9WXbwIVErYdA==", + "requires": { + "copy-to-clipboard": "^3", + "prop-types": "^15.5.8" + } + }, "react-debounce-input": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/react-debounce-input/-/react-debounce-input-3.2.2.tgz", @@ -12935,9 +14301,9 @@ } }, "react-is": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", - "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-motion": { "version": "0.5.2", @@ -12969,39 +14335,35 @@ "prop-types": "^15.7.2" } }, + "react-syntax-highlighter": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-13.5.0.tgz", + "integrity": "sha512-2nKo8spFxe9shcjbdUiqxkrf/IMDqKUZLx7JVIxEJ17P+fYFGL4CRsZZC66UPeQ2o/f29eKu31CrkKGCK1RHuA==", + "requires": { + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.1.1", + "lowlight": "^1.14.0", + "prismjs": "^1.21.0", + "refractor": "^3.1.0" + }, + "dependencies": { + "highlight.js": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.1.2.tgz", + "integrity": "sha512-Q39v/Mn5mfBlMff9r+zzA+gWxRsCRKwEMvYTiisLr/XUiFI/4puWt0Ojdko3R3JCNWGdOWaA5g/Yxqa23kC5AA==" + } + } + }, "read-pkg": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz", - "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", - "parse-json": "^4.0.0", - "type-fest": "^0.4.1" - }, - "dependencies": { - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" } }, "read-pkg-up": { @@ -13120,6 +14482,16 @@ "immutable": "^3.8.1" } }, + "refractor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.1.0.tgz", + "integrity": "sha512-bN8GvY6hpeXfC4SzWmYNQGLLF2ZakRDNBkgCL0vvl5hnpMrnyURk8Mv61v6pzn4/RBHzSWLp44SzMmVHqMGNww==", + "requires": { + "hastscript": "^5.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.21.0" + } + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -13127,26 +14499,27 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", - "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "requires": { "regenerate": "^1.4.0" } }, "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regenerator-transform": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", - "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", "dev": true, "requires": { - "private": "^0.1.6" + "@babel/runtime": "^7.8.4", + "private": "^0.1.8" } }, "regex-not": { @@ -13158,36 +14531,40 @@ "safe-regex": "^1.1.0" } }, - "regexpp": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } }, "regexpu-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", - "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^7.0.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.0.2" + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", "dev": true }, "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -13208,12 +14585,12 @@ "dev": true }, "remarkable": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz", - "integrity": "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz", + "integrity": "sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==", "requires": { "argparse": "^1.0.10", - "autolinker": "~0.28.0" + "autolinker": "^3.11.0" } }, "remove-trailing-separator": { @@ -13253,6 +14630,12 @@ "nth-check": "~1.0.1" } }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", @@ -13265,7 +14648,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -13317,26 +14700,33 @@ "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } } }, "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", "dev": true, "requires": { - "lodash": "^4.13.1" + "lodash": "^4.17.15" } }, "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", "dev": true, "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" } }, "require-directory": { @@ -13344,26 +14734,11 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "requires-port": { "version": "1.0.0", @@ -13371,14 +14746,15 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "reselect": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-2.5.4.tgz", - "integrity": "sha1-t9I/3wC4P6etAnlUb427vXZccEc=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", + "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=", + "dev": true }, "resolve": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", - "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -13391,14 +14767,6 @@ "dev": true, "requires": { "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } } }, "resolve-dir": { @@ -13409,12 +14777,25 @@ "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } } }, "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true }, "resolve-url": { @@ -13437,6 +14818,12 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -13445,7 +14832,7 @@ }, "rgba-regex": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true }, @@ -13468,9 +14855,9 @@ } }, "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", + "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", "dev": true, "requires": { "is-promise": "^2.1.0" @@ -13485,25 +14872,10 @@ "aproba": "^1.1.1" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "*" - } - }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -13528,134 +14900,99 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", "requires": { "glob": "^7.0.0", "lodash": "^4.0.0", "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" + "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=" - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "^1.0.0" - } + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "^1.0.0" - } + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.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=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^4.1.0" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "requires": { - "camelcase": "^3.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz", + "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==", "requires": { - "clone-deep": "^2.0.1", + "clone-deep": "^4.0.1", "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "pify": "^4.0.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "sax": { @@ -13673,14 +15010,6 @@ "ajv": "^6.1.0", "ajv-errors": "^1.0.0", "ajv-keywords": "^3.1.0" - }, - "dependencies": { - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true - } } }, "scrollparent": { @@ -13707,6 +15036,12 @@ } } }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -13714,12 +15049,12 @@ "dev": true }, "selfsigned": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", - "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", "dev": true, "requires": { - "node-forge": "0.7.5" + "node-forge": "0.9.0" } }, "semver": { @@ -13770,6 +15105,12 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, @@ -13779,9 +15120,9 @@ "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" }, "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", "dev": true }, "serve-index": { @@ -13893,20 +15234,11 @@ } }, "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==", "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==" - } + "kind-of": "^6.0.2" } }, "shebang-command": { @@ -13925,16 +15257,10 @@ "dev": true }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true }, "signal-exit": { "version": "3.0.2", @@ -13959,20 +15285,11 @@ } }, "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -14084,19 +15401,28 @@ } }, "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", "dev": true, "requires": { "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } } }, "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", "dev": true, "requires": { "debug": "^3.2.5", @@ -14117,9 +15443,9 @@ } }, "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -14128,14 +15454,19 @@ } }, "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { "is-plain-obj": "^1.0.0" } }, + "sortablejs": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz", + "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==" + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -14160,9 +15491,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -14182,6 +15513,11 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -14211,9 +15547,9 @@ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" }, "spdy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", - "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -14238,9 +15574,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "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", @@ -14295,9 +15631,9 @@ "dev": true }, "stackframe": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", - "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", "dev": true }, "static-extend": { @@ -14381,9 +15717,9 @@ } }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "strict-uri-encode": { @@ -14401,26 +15737,126 @@ "strip-ansi": "^4.0.0" } }, - "string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "string.prototype.padstart": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.0.tgz", + "integrity": "sha512-envqZvUp2JItI+OeQ5UAh1ihbAV5G/2bixTojvlIa090GGqF+NQRxbWb2nv9fTGrZABv6+pE6jXoAZhhS2k4Hw==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, - "string.prototype.padstart": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz", - "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=", + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } } }, "string_decoder": { @@ -14453,6 +15889,12 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, "strip-indent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", @@ -14506,12 +15948,12 @@ }, "dependencies": { "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -14526,19 +15968,24 @@ "has-flag": "^3.0.0" } }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, "svgo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", - "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "dev": true, "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", "css-select": "^2.0.0", "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "^1.1.0", - "csso": "^3.5.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", @@ -14549,63 +15996,77 @@ } }, "swagger-client": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.9.6.tgz", - "integrity": "sha512-aS01VInNv6I+/DVQ++7TCwunYGWM/uiQNNPO0L+1+MfA3r0UEHYc9XJ8aXmrhXCvQ1jdY626ePch3plwhTunUQ==", - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "@kyleshockey/object-assign-deep": "^0.4.0", - "btoa": "1.1.2", - "buffer": "^5.1.0", - "cookie": "^0.3.1", - "cross-fetch": "0.0.8", - "deep-extend": "^0.5.1", - "encode-3986": "^1.0.0", - "fast-json-patch": "~2.1.0", - "isomorphic-form-data": "0.0.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.14", - "qs": "^6.3.0", + "version": "3.10.12", + "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.10.12.tgz", + "integrity": "sha512-h2o7axvFViMc5sxwTjjza84Rhfz+C52wgMKPOT0P05jODjZhldBK7y9EvGt4zvqgzBJHS+FDQBmOT/dGf9SWdw==", + "requires": { + "@babel/runtime-corejs2": "^7.10.4", + "btoa": "^1.2.1", + "buffer": "^5.6.0", + "cookie": "~0.4.1", + "cross-fetch": "^3.0.5", + "deep-extend": "~0.6.0", + "fast-json-patch": "^2.2.1", + "isomorphic-form-data": "~2.0.0", + "js-yaml": "^3.14.0", + "lodash": "^4.17.19", + "qs": "^6.9.4", "querystring-browser": "^1.0.4", - "traverse": "^0.6.6", - "url": "^0.11.0", - "utf8-bytes": "0.0.1", - "utfstring": "^2.0.0" + "traverse": "~0.6.6", + "url": "~0.11.0" }, "dependencies": { + "@babel/runtime-corejs2": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.11.2.tgz", + "integrity": "sha512-AC/ciV28adSSpEkBglONBWq4/Lvm6GAZuxIoyVtsnUpZMl0bxLtoChEnYAkP+47KyOCayZanojtflUEUJtR/6Q==", + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, "buffer": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", - "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, - "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "qs": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", + "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" } } }, "swagger-ui": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/swagger-ui/-/swagger-ui-3.24.3.tgz", - "integrity": "sha512-mTVRuiu9oLdi3WOvPQ2L7tHGoJ5cI3+d/4Y58OvTJSyIkoFo0ffr6/BNF68JFB8HsaaJc8stU5REepS0dxxq6Q==", + "version": "3.32.5", + "resolved": "https://registry.npmjs.org/swagger-ui/-/swagger-ui-3.32.5.tgz", + "integrity": "sha512-m7YJh2PqHh8GJpVHG43lVnCB6KFoZ2K24cvKfe4a64wFTGXnhQkWK5bwmsrq0dlFjwz9MLqMbdY4ELsS10oK2g==", "requires": { - "@babel/runtime-corejs2": "^7.5.5", - "@braintree/sanitize-url": "^3.0.0", + "@babel/runtime-corejs2": "^7.10.4", + "@braintree/sanitize-url": "^4.0.0", "@kyleshockey/object-assign-deep": "^0.4.2", "@kyleshockey/xml": "^1.0.2", "base64-js": "^1.2.0", "classnames": "^2.2.6", - "core-js": "^2.5.1", + "core-js": "^2.6.11", "css.escape": "1.5.1", "deep-extend": "0.6.0", "dompurify": "^2.0.7", @@ -14613,50 +16074,45 @@ "immutable": "^3.x.x", "js-file-download": "^0.4.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.15", + "lodash": "^4.17.19", "memoizee": "^0.4.12", "prop-types": "^15.7.2", "randombytes": "^2.1.0", "react": "^15.6.2", + "react-copy-to-clipboard": "5.0.1", "react-debounce-input": "^3.2.0", "react-dom": "^15.6.2", "react-immutable-proptypes": "2.1.0", "react-immutable-pure-component": "^1.1.1", "react-inspector": "^2.3.0", "react-motion": "^0.5.2", - "react-redux": "^4.x.x", - "redux": "^3.x.x", + "react-redux": "=4.4.10", + "react-syntax-highlighter": "=13.5.0", + "redux": "=3.7.2", "redux-immutable": "3.1.0", - "remarkable": "^1.7.4", - "reselect": "^2.5.4", + "remarkable": "^2.0.1", + "reselect": "^4.0.0", "serialize-error": "^2.1.0", "sha.js": "^2.4.11", - "swagger-client": "^3.9.6", + "swagger-client": "=3.10.12", "url-parse": "^1.4.7", "xml-but-prettier": "^1.0.1", "zenscroll": "^4.0.2" }, "dependencies": { "@babel/runtime-corejs2": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.7.4.tgz", - "integrity": "sha512-hKNcmHQbBSJFnZ82ewYtWDZ3fXkP/l1XcfRtm7c8gHPM/DMecJtFFBEp7KMLZTuHwwb7RfemHdsEnd7L916Z6A==", + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.11.2.tgz", + "integrity": "sha512-AC/ciV28adSSpEkBglONBWq4/Lvm6GAZuxIoyVtsnUpZMl0bxLtoChEnYAkP+47KyOCayZanojtflUEUJtR/6Q==", "requires": { "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.2" - }, - "dependencies": { - "core-js": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", - "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==" - } + "regenerator-runtime": "^0.13.4" } }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "reselect": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz", + "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" } } }, @@ -14665,50 +16121,10 @@ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": 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" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "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 - } - } - }, "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, "tar": { @@ -14721,201 +16137,56 @@ "inherits": "2" } }, - "terser-webpack-plugin": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", - "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dev": true, "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "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" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.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" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true - }, + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { "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 - }, - "terser": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.2.tgz", - "integrity": "sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ==", + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "dev": true, "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "randombytes": "^2.1.0" } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.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 } } }, @@ -14926,9 +16197,9 @@ "dev": true }, "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, "requires": { "any-promise": "^1.0.0" @@ -14944,9 +16215,9 @@ } }, "thread-loader": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.2.tgz", - "integrity": "sha512-7xpuc9Ifg6WU+QYw/8uUqNdRwMD+N5gjwHKMqETrs96Qn+7BHwECpt2Brzr4HFlf4IAkZsayNhmGdbkBsTJ//w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz", + "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", "dev": true, "requires": { "loader-runner": "^2.3.1", @@ -14964,21 +16235,22 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "thunky": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", - "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -14999,6 +16271,12 @@ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -15058,21 +16336,17 @@ "repeat-string": "^1.6.1" } }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, - "topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "dev": true, - "requires": { - "hoek": "6.x.x" - } - }, "toposort": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", @@ -15105,12 +16379,6 @@ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" }, - "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 - }, "true-case-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", @@ -15125,12 +16393,17 @@ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", "dev": true }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", "dev": true }, + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + }, "tty-browserify": { "version": "0.0.0", "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -15165,9 +16438,9 @@ } }, "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "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 }, "type-is": { @@ -15181,18 +16454,18 @@ }, "dependencies": { "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", "dev": true }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": "1.44.0" } } } @@ -15204,9 +16477,9 @@ "dev": true }, "ua-parser-js": { - "version": "0.7.20", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz", - "integrity": "sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==" + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==" }, "uglify-js": { "version": "3.4.10", @@ -15249,15 +16522,15 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", - "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", - "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, "union-value": { @@ -15293,9 +16566,9 @@ } }, "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "requires": { "imurmurhash": "^0.1.4" @@ -15356,9 +16629,9 @@ } }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "upper-case": { @@ -15397,14 +16670,27 @@ } }, "url-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", - "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", + "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" + }, + "dependencies": { + "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" + } + } } }, "url-parse": { @@ -15421,16 +16707,6 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, - "utf8-bytes": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/utf8-bytes/-/utf8-bytes-0.0.1.tgz", - "integrity": "sha1-EWsCVEjJtQAIHN+/H01sbDfYg30=" - }, - "utfstring": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/utfstring/-/utfstring-2.0.0.tgz", - "integrity": "sha512-/ugBfyvIoLe9xqkFHio3CxXnpUKQ1p2LfTxPr6QTRj6GiwpHo73YGdh03UmAzDQNOWpNIE0J5nLss00L4xlWgg==" - }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -15446,13 +16722,15 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" } }, "utila": { @@ -15468,9 +16746,9 @@ "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==" }, "v-click-outside": { "version": "2.1.5", @@ -15483,9 +16761,9 @@ "integrity": "sha1-yrdd997yeDIVv0Se+Fxpwt7PClU=" }, "v8-compile-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", - "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, "validate-npm-package-license": { @@ -15504,9 +16782,9 @@ "dev": true }, "vendors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", - "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", "dev": true }, "verror": { @@ -15520,70 +16798,35 @@ } }, "vm-browserify": { - "version": "0.0.4", - "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true }, "vue": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.0.tgz", - "integrity": "sha512-QSKHpmV17wqDmS5jVCc8X9LyTcCCQP4M1RTRpLBO+hRveePduJaGz1FGjVpRVcE6cKYbhsooz6RW7GWLGNjKGg==" + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", + "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==" }, "vue-awesome": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/vue-awesome/-/vue-awesome-3.4.0.tgz", - "integrity": "sha512-DzNdHa0bBfXrgtyMTk5d1jW2DqeKsXYL8AsIl/E1gTLTLz9LiOj7V1RnZRAMtx58uTwmvBxdIMntxzZGOfxgpw==" + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/vue-awesome/-/vue-awesome-3.5.4.tgz", + "integrity": "sha512-RRuo08A6mFye2RyLVdnODH5kyLiHANMl9EzKXZXCeMrsP4SY3nyjkQnTGlgbbVOBQuaGBMrFp9HPOJYDaVNk/w==" }, "vue-axios": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/vue-axios/-/vue-axios-2.1.4.tgz", - "integrity": "sha512-DS8Q+WFT3i7nS0aZ/NMmTPf2yhbtlXhj4QEZmY69au/BshsGzGjC6dXaniZaPQlErP3J3Sv1HtQ4RVrXaUTkxA==" + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/vue-axios/-/vue-axios-2.1.5.tgz", + "integrity": "sha512-th5xVbInVoyIoe+qY+9GCflEVezxAvztD4xpFF39SRQYqpoKD2qkmX8yv08jJG9a2SgNOCjirjJGSwg/wTrbmA==" }, "vue-ctk-date-time-picker": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/vue-ctk-date-time-picker/-/vue-ctk-date-time-picker-2.4.0.tgz", - "integrity": "sha512-E4s0kacbL+oqURB+b6o1RNUEdsX8B5WSt6YoQKVZ019ytCv351Bs4FfZajEzo8oc9TVoI3BfcR0hLOYtaGyhEw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/vue-ctk-date-time-picker/-/vue-ctk-date-time-picker-2.5.0.tgz", + "integrity": "sha512-s4AO+5xnPlX+LD5UPQcjLBnv8MwcEJKlKUnkTLQeXRV0xqpH9pWRe6aJ8N2+506mEN6b7iwhlFox6uKKdtK+gw==", "requires": { "moment": "^2.24.0", "moment-range": "^4.0.1", "v-click-outside": "^2.0.2", "vue": "^2.6.9" - }, - "dependencies": { - "vue": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz", - "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==" - } - } - }, - "vue-eslint-parser": { - "version": "2.0.3", - "resolved": "http://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", - "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.2", - "esquery": "^1.0.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "vue-functional-data-merge": { @@ -15592,28 +16835,36 @@ "integrity": "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA==" }, "vue-hot-reload-api": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.2.tgz", - "integrity": "sha512-NpznMQoe/DzMG7nJjPkJKT7FdEn9xXfnntG7POfTmqnSaza97ylaBf1luZDh4IgV+vgUoR//id5pf8Ru+Ym+0g==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", "dev": true }, "vue-loader": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.6.2.tgz", - "integrity": "sha512-T6fONodj861M3PqZ1jlbUFjeezbUnPRY2bd+3eZuDvYADgkN3VFU2H5feqySNg9XBt8rcbyBGmFWTZtrOX+v5w==", + "version": "15.9.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.3.tgz", + "integrity": "sha512-Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA==", "dev": true, "requires": { - "@vue/component-compiler-utils": "^2.5.1", + "@vue/component-compiler-utils": "^3.1.0", "hash-sum": "^1.0.2", "loader-utils": "^1.1.0", "vue-hot-reload-api": "^2.3.0", "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + } } }, "vue-observe-visibility": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-0.4.3.tgz", - "integrity": "sha512-YyyO3a5OUkgpmC0NEf+xWJR0jVdFWzVbKRDzUumOVMhfr3+jxXEycYNHCM3rEO5lcj3ZNJpDomZEYEx0Wqqh9A==" + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-0.4.6.tgz", + "integrity": "sha512-xo0CEVdkjSjhJoDdLSvoZoQrw/H2BlzB5jrCBKGZNXN2zdZgMuZ9BKrxXDjNP2AxlcCoKc8OahI3F3r3JGLv2Q==" }, "vue-resize": { "version": "0.4.5", @@ -15621,9 +16872,9 @@ "integrity": "sha512-bhP7MlgJQ8TIkZJXAfDf78uJO+mEI3CaLABLjv0WNzr4CcGRGPIAItyWYnP6LsPA4Oq0WE+suidNs6dgpO4RHg==" }, "vue-router": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.2.tgz", - "integrity": "sha512-opKtsxjp9eOcFWdp6xLQPLmRGgfM932Tl56U9chYTnoWqKxQ8M20N7AkdEbM5beUh6wICoFGYugAX9vQjyJLFg==" + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.3.tgz", + "integrity": "sha512-BADg1mjGWX18Dpmy6bOGzGNnk7B/ZA0RxuA6qedY/YJwirMfKXIDzcccmHbQI0A6k5PzMdMloc0ElHfyOoX35A==" }, "vue-style-loader": { "version": "4.1.2", @@ -15633,12 +16884,20 @@ "requires": { "hash-sum": "^1.0.2", "loader-utils": "^1.0.2" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + } } }, "vue-template-compiler": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.0.tgz", - "integrity": "sha512-rHay+P7aUNm75R7SaXvWFWWI6IB3sq9BX+n7awQSYXFXHUpaCOtlrkrfJomIxBvG2f96eIFQOexslvKxPy5l4g==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", "dev": true, "requires": { "de-indent": "^1.0.2", @@ -15646,35 +16905,185 @@ } }, "vue-template-es2015-compiler": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.8.2.tgz", - "integrity": "sha512-cliV19VHLJqFUYbz/XeWXe5CO6guzwd0yrrqqp0bmjlMP3ZZULY7fu8RTC4+3lmHwo6ESVDHFDsvjB15hcR5IA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", "dev": true }, "vue-virtual-scroller": { - "version": "1.0.0-beta.4", - "resolved": "https://registry.npmjs.org/vue-virtual-scroller/-/vue-virtual-scroller-1.0.0-beta.4.tgz", - "integrity": "sha512-ZS4iKucfYb5JSH/Zr1LzQv8X+EEHY6eqJuWr7x7P8itKTqVAdNQk9YL/I5IBn1Xw3k2g9z1Sqc3di2O9YpWd2Q==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/vue-virtual-scroller/-/vue-virtual-scroller-1.0.10.tgz", + "integrity": "sha512-Hn4qSBDhRY4XdngPioYy/ykDjrLX/NMm1fQXm/4UQQ/Xv1x8JbHGFZNftQowTcfICgN7yc31AKnUk1UGLJ2ndA==", "requires": { "scrollparent": "^2.0.1", - "vue-observe-visibility": "^0.4.3", + "vue-observe-visibility": "^0.4.4", "vue-resize": "^0.4.5" } }, + "vue2-leaflet": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/vue2-leaflet/-/vue2-leaflet-2.5.2.tgz", + "integrity": "sha512-9eN0TxqCkyXbaI7waO3u+n0OAezkxjb811tstG6gRLAZy/ocXlNLC3JqTWE0FwBUlqBbMpyzsIk6LrEhs8oVBQ==" + }, + "vuedraggable": { + "version": "2.24.1", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.1.tgz", + "integrity": "sha512-G1fxO1oshx+WLdieSGl6jSJdlHOQFga1FpjuUpgXldbpKNzxpjsGn4xYNnRHVrOAqm8aG5FfpdQlh5LHesxCeA==", + "requires": { + "sortablejs": "^1.10.1" + } + }, "vuex": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.1.tgz", - "integrity": "sha512-ER5moSbLZuNSMBFnEBVGhQ1uCBNJslH9W/Dw2W7GZN23UQA69uapP5GTT9Vm8Trc0PzBSVt6LzF3hGjmv41xcg==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.5.1.tgz", + "integrity": "sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw==" + }, + "vuex-shared-mutations": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vuex-shared-mutations/-/vuex-shared-mutations-1.0.2.tgz", + "integrity": "sha512-tu+rN4DAtZQiRAHLms6OtYdtoK60sKD0CXAP1l+N4lB1rYxJC/cDVGsjXGB/A4p7qIUVb4Mzr8C2Pg1wZlrikA==" }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", "dev": true, "requires": { - "chokidar": "^2.0.2", + "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" } }, "wbuf": { @@ -15696,73 +17105,69 @@ } }, "webpack": { - "version": "4.28.4", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz", - "integrity": "sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", + "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" }, "dependencies": { - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true - }, - "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": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } } } } }, "webpack-bundle-analyzer": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz", - "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz", + "integrity": "sha512-PODQhAYVEourCcOuU+NiYI7WdR8QyELZGgPvB1y2tjbUpbmcQOt5Q7jEK+ttd5se0KSBKD9SXHCEozS++Wllmw==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-walk": "^6.1.1", + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", "bfj": "^6.1.1", "chalk": "^2.4.1", "commander": "^2.18.0", @@ -15770,134 +17175,138 @@ "express": "^4.16.3", "filesize": "^3.6.1", "gzip-size": "^5.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.15", "mkdirp": "^0.5.1", "opener": "^1.5.1", "ws": "^6.0.0" }, "dependencies": { "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", "dev": true } } }, "webpack-chain": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-4.12.1.tgz", - "integrity": "sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", "dev": true, "requires": { "deepmerge": "^1.5.2", - "javascript-stringify": "^1.6.0" + "javascript-stringify": "^2.0.1" } }, "webpack-cli": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.3.tgz", - "integrity": "sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", "dev": true, "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "findup-sync": "^2.0.0", - "global-modules": "^1.0.0", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.4" + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" }, "dependencies": { - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "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 }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "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 }, - "find-up": { + "emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "minimist": "^1.2.0" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" } }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "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": { - "p-try": "^2.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.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==", + "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": { - "p-limit": "^2.0.0" + "ansi-regex": "^4.1.0" } }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "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" + } }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -15907,53 +17316,57 @@ } }, "webpack-dev-middleware": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", - "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", "dev": true, "requires": { "memory-fs": "^0.4.1", - "mime": "^2.4.2", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", "range-parser": "^1.2.1", "webpack-log": "^2.0.0" } }, "webpack-dev-server": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.4.1.tgz", - "integrity": "sha512-CRqZQX2ryMtrg0r3TXQPpNh76eM1HD3Wmu6zDBxIKi/d2y+4aa28Ia8weNT0bfgWpY6Vs3Oq/K8+DjfbR+tWYw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", "dev": true, "requires": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", - "chokidar": "^2.1.6", + "chokidar": "^2.1.8", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", "debug": "^4.1.1", "del": "^4.1.1", - "express": "^4.17.0", - "html-entities": "^1.2.1", - "http-proxy-middleware": "^0.19.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", "import-local": "^2.0.0", "internal-ip": "^4.3.0", "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", "killable": "^1.0.1", - "loglevel": "^1.6.1", + "loglevel": "^1.6.8", "opn": "^5.5.0", - "portfinder": "^1.0.20", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.4", - "semver": "^6.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", "serve-index": "^1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.3.0", - "spdy": "^4.0.0", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.0", + "webpack-dev-middleware": "^3.7.2", "webpack-log": "^2.0.0", - "yargs": "12.0.5" + "ws": "^6.2.1", + "yargs": "^13.3.2" }, "dependencies": { "ansi-regex": { @@ -15962,67 +17375,67 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } + "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 }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true }, - "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==", + "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": { - "p-limit": "^2.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "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", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true - }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -16039,29 +17452,27 @@ } }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -16078,21 +17489,29 @@ "requires": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } } }, "webpack-merge": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", - "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", "dev": true, "requires": { - "lodash": "^4.17.5" + "lodash": "^4.17.15" } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -16108,25 +17527,24 @@ } }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", "dev": true, "requires": { - "http-parser-js": ">=0.4.0", "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.0.tgz", + "integrity": "sha512-rsum2ulz2iuZH08mJkT0Yi6JnKhwdw4oeyMjokgxd+mmqYSd9cPpOQf01TIWgjxG/U4+QR+AwKq6lSbXVxkyoQ==" }, "which": { "version": "1.3.1", @@ -16139,8 +17557,7 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "wide-align": { "version": "1.1.3", @@ -16150,10 +17567,10 @@ "string-width": "^1.0.2 || 2" } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "worker-farm": { @@ -16166,43 +17583,71 @@ } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.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=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "@types/color-name": "^1.1.1", + "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 + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "string-width": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.0" } } } @@ -16212,15 +17657,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", @@ -16239,150 +17675,123 @@ } }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^3.0.0", + "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" + "yargs-parser": "^18.1.2" }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "locate-path": { - "version": "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-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "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-try": "^2.0.0" + "p-locate": "^4.1.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==", + "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": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.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" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-regex": "^5.0.0" } } } }, "yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/frontend/package.json b/frontend/package.json index aa852076676f69c85d650b3f57257a4371fb87aa..72a37ee81a6f921ca21765140f0f8317e5ed8c2b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -8,42 +8,48 @@ "lint": "vue-cli-service lint" }, "dependencies": { - "@fortawesome/fontawesome-svg-core": "^1.2.14", - "@fortawesome/free-regular-svg-icons": "^5.7.1", - "@fortawesome/free-solid-svg-icons": "^5.7.1", - "@fortawesome/vue-fontawesome": "^0.1.5", - "ajv": "^6.8.1", - "axios": "^0.19.0", - "bootstrap": "^4.3.1", - "bootstrap-vue": "^2.1.0", - "http-proxy-middleware": "^0.19.1", + "@fortawesome/fontawesome-svg-core": "^1.2.30", + "@fortawesome/free-brands-svg-icons": "^5.14.0", + "@fortawesome/free-regular-svg-icons": "^5.14.0", + "@fortawesome/free-solid-svg-icons": "^5.14.0", + "@fortawesome/vue-fontawesome": "^0.1.10", + "ajv": "^6.12.4", + "axios": "^0.19.2", + "bootstrap": "^4.5.2", + "bootstrap-vue": "^2.16.0", + "http-proxy-middleware": "^0.19.2", "i": "^0.3.6", - "node-sass": "^4.13.1", - "npm": "^6.13.6", - "popper.js": "^1.14.7", - "sass-loader": "^7.1.0", - "swagger-ui": "^3.24.3", + "leaflet": "^1.6.0", + "node-sass": "^4.14.1", + "npm": "^6.14.8", + "popper.js": "^1.16.1", + "sass-loader": "^7.3.1", + "swagger-ui": "^3.32.4", + "uuid": "^8.3.0", "v-debounce": "^0.1.2", - "vue": "^2.6.0", - "vue-awesome": "^3.4.0", - "vue-axios": "^2.1.4", - "vue-ctk-date-time-picker": "^2.4.0", - "vue-router": "^3.0.1", - "vue-virtual-scroller": "^1.0.0-beta.4", - "vuex": "^3.1.1" + "vue": "^2.6.12", + "vue-awesome": "^3.5.4", + "vue-axios": "^2.1.5", + "vue-ctk-date-time-picker": "^2.5.0", + "vue-router": "^3.4.3", + "vue-virtual-scroller": "^1.0.10", + "vue2-leaflet": "^2.5.2", + "vuedraggable": "^2.24.1", + "vuex": "^3.5.1", + "vuex-shared-mutations": "^1.0.2" }, "devDependencies": { - "@vue/cli-plugin-babel": "^3.2.0", - "@vue/cli-plugin-eslint": "^3.2.0", - "@vue/cli-service": "^3.7.0", - "babel-eslint": "^10.0.1", - "css-loader": "^2.1.0", - "eslint": "^5.8.0", - "eslint-plugin-vue": "^5.0.0-0", + "@vue/cli-plugin-babel": "^3.12.1", + "@vue/cli-plugin-eslint": "^4.5.4", + "@vue/cli-service": "^4.5.4", + "babel-eslint": "^10.1.0", + "css-loader": "^2.1.1", + "eslint": "^5.16.0", + "eslint-plugin-vue": "^5.2.3", "style-loader": "^0.23.1", - "vue-loader": "^15.6.2", - "vue-template-compiler": "^2.6.0", - "webpack-cli": "^3.2.3" + "vue-loader": "^15.9.3", + "vue-template-compiler": "^2.6.12", + "webpack-cli": "^3.3.12" }, "eslintConfig": { "root": true, diff --git a/frontend/public/important.webp b/frontend/public/important.webp new file mode 100644 index 0000000000000000000000000000000000000000..8bdd0a559db5dec06c197ce3269de65a70bf9ead Binary files /dev/null and b/frontend/public/important.webp differ diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 905c5452506dff9792f2fe001120dece5e241f77..17fdfad064d96f0886e331fde8109ccc27c457d0 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,128 +1,48 @@ <template> <div id="app"> - <b-navbar toggleable="lg" fixed="top" :type="$sysinfo.host_oper_mode.is_prod?'light':'dark'" :variant="$sysinfo.host_oper_mode.is_prod?'light':'dark'" :class="`bg-${$sysinfo.host_oper_mode.mode}`"> - <!-- Brand and toggle get grouped for better mobile display --> - <b-navbar-brand to="/"> - <img class="d-inline-block align-top scc-img" alt="SCC" src="@/assets/img/scc_logo_small.png"/> - <span v-if="!$sysinfo.host_oper_mode.is_prod"> Instanz: {{$sysinfo.host_oper_mode.mode}}</span> - </b-navbar-brand> - <b-navbar-toggle target="navbarNavDropdown"> - <font-awesome-icon icon="bars"></font-awesome-icon> - </b-navbar-toggle> - <!-- Collect the nav links, forms, and other content for toggling --> - <b-collapse is-nav id="navbarNavDropdown"> - <b-navbar-nav> - <b-nav-item v-if="$sysinfo_mods_by_name['dnsvs']" to="/dnsvs/" :active="$route.path.startsWith('/dnsvs/')">DNSVS</b-nav-item> - <b-nav-item to="/dhcpvs/" :active="$route.path.startsWith('/dhcpvs/')">DHCPVS</b-nav-item> - <b-nav-item v-if="$sysinfo_mods_by_name['dhcp_leases']" to="/dhcp-leases/" :active="$route.path.startsWith('/dhcp-leases/')">DHCP-Leases</b-nav-item> - <b-nav-item href="https://www-net.scc.kit.edu/~netadmin/natvs/user/wrapper.cgi/" target="_blank">NATVS+</b-nav-item> - <b-nav-item href="https://www-net.scc.kit.edu/~netadmin/netdoc/user/wrapper.cgi/" target="_blank">NETDOC</b-nav-item> - </b-navbar-nav> - <b-navbar-nav class="ml-auto"> - <b-nav-form> - <div class="input-group mr-sm-2"> - - <div id="scope_filter_display" class="input-group-prepend"> - <span class="input-group-text">DNSVS</span> - </div> - <input class="form-control" type="search" id="nav-search" name="search" - placeholder="Suchbegriff" - aria-label="Search"> - <div class="input-group-append"> - <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Suchen</button> - </div> - </div> - </b-nav-form> - <b-nav-item><span class="d-none d-xl-inline">Erweiterte </span>Suche</b-nav-item> - <b-nav-item> - <i class="fas fa-tasks" aria-hidden="true"></i> Transaktion <span - class="badge badge-pill badge-success" - id="trans_count">0</span> - </b-nav-item> - <b-nav-item-dropdown v-if="$store.state.user" right :toggle-class="$route.path.startsWith('/user/')?'active':''"> - <template slot="button-content"> - <font-awesome-icon :icon="['far', 'user']"></font-awesome-icon> - <span v-if="$store.state.user"> {{$store.state.user.login_name}}</span> - </template> - <template v-if="$store.state.user"> - <b-dropdown-item to="/user/tokens" :active="$route.path === '/user/tokens'"><font-awesome-icon icon="code"></font-awesome-icon> API-Tokens</b-dropdown-item> - <b-dropdown-divider></b-dropdown-divider> - <b-dropdown-item @click="logout()">Abmelden</b-dropdown-item> - </template> - </b-nav-item-dropdown> - <b-nav-item v-else> - <font-awesome-icon :icon="['far', 'user']"></font-awesome-icon> - <span> Anmelden</span> - </b-nav-item> - - </b-navbar-nav> - </b-collapse><!-- /.navbar-collapse --> - </b-navbar> - <div id="wrapper"> + <Navbar/> + <div id="wrapper" :class="$store.state.show_sidebar ? 'squished' : null"> <div id="page-content-wrapper"> <div class="container"> <b-breadcrumb :items="breadcrumbs"/> - <router-view/> - <footer> - <hr> - <p class="pull-right d-print-none"> - <a target="_blank" href="https://www-net-doku.scc.kit.edu/webapi/release/dnscfg-perms/"><font-awesome-icon :icon="['far', 'life-ring']"></font-awesome-icon> Hilfe/Dokumentation</a> | - <b-link to="/swagger"><font-awesome-icon icon="code"></font-awesome-icon> API</b-link> | - <a target="_blank" href="https://git.scc.kit.edu/scc-net/net-suite/net-suite/issues"><font-awesome-icon icon="bug"></font-awesome-icon> Fehler melden</a> | - Kontakt: <a href="mailto:dns-betrieb@scc.kit.edu">dns-betrieb∂scc.kit.edu</a> - </p> - <p class="pull-left">Instanz: {{$sysinfo.host_oper_mode.mode}} | <b-link v-b-modal.net-suite-version>Version</b-link></p> - <b-modal class="text-center" id="net-suite-version" hide-footer hide-header> - <img alt="SCC" src="@/assets/img/scc_logo_small.png"/> - <h3>NET-Suite</h3> - <p> - Version <a :href="`https://git.scc.kit.edu/scc-net/net-suite/net-suite/commit/${$sysinfo.version}`" target="_blank">{{$sysinfo.version}}</a> - </p> - Module: - <ul> - <li v-for="m in $sysinfo.mods" :key="m.mod_path">MOD_{{m.mod_path}}: - <a target="_blank" :href="`${m.gitlab_url}/commit/${m.version}`">{{m.version}}</a></li> - </ul> - </b-modal> - </footer> + <router-view v-bind:key="$store.state.reload_count"/> + <Footer/> </div> </div> + <b-card id="sidebar-wrapper" no-body :class="$store.state.show_sidebar ? 'hide' : null"> + <Sidebar/> + </b-card> </div> </div> </template> -<style lang="scss"> - @import '../node_modules/bootstrap/scss/bootstrap.scss'; - @import '../node_modules/bootstrap-vue/dist/bootstrap-vue.css'; - @import 'assets/css/net-suite.css'; - @import 'assets/css/net-suite-devel.css'; - @import 'assets/css/net-suite-test.css'; -</style> - <script> - import LoginService from '@/api-services/login.service' + import Navbar from "./components/Navbar"; + import Footer from "./components/Footer"; + import Sidebar from "./components/Sidebar"; export default { + components: {Sidebar, Footer, Navbar}, data() { return { - breadcrumbs: [], + breadcrumbs: [] } }, watch: { $route() { - var m = this.$router.currentRoute.matched + let m = this.$router.currentRoute.matched m = m[m.length - 1] - this.breadcrumbs = this.gen_bread(m) + this.breadcrumbs = this.getBreadcrumbs(m) } }, methods: { - gen_bread(m) { - var res = [{text: m.meta.resolveName(this.$route.params), path: m.path}] + getBreadcrumbs(m) { + let res = [{text: m.meta.resolveName(this.$route.params), path: m.path}] while ((m.meta && m.meta.resolveParents) || m.parent) { if (m.meta && m.meta.resolveParents) { let parents = m.meta.resolveParents(this.$route.params) - for(let i=0;i<parents.length;i++) { - if(typeof parents[i] === 'object' && 'text' in parents[i] && 'to' in parents[i]) { + for (let i = 0; i < parents.length; i++) { + if (typeof parents[i] === 'object' && 'text' in parents[i] && 'to' in parents[i]) { res.unshift(parents[i]) continue } @@ -137,11 +57,62 @@ } return res }, - logout() { - LoginService.logout(this.$store.state.token.pk) - this.$store.commit('logout') - this.$router.push('/login') - } + }, + mounted() { + window.console.log('%c ', `font-size:0px; padding: 200px; background:url(${window.location.protocol}//${window.location.hostname}:${window.location.port}/important.webp) no-repeat; background-position: center; background-size: contain;`); } } </script> + +<style lang="scss"> + @import '../node_modules/bootstrap/scss/bootstrap.scss'; + @import '../node_modules/bootstrap-vue/dist/bootstrap-vue.css'; + @import 'assets/css/net-suite.css'; + @import 'assets/css/net-suite-devel.css'; + @import 'assets/css/net-suite-test.css'; + + $sidebar-width: 380px; + + @media screen and (min-width: 981px) { + #wrapper { + transition: padding-right .5s; + } + + #wrapper.squished { + padding-right: $sidebar-width; + } + + #sidebar-wrapper { + height: 100%; + width: $sidebar-width; + position: fixed; + z-index: 1; + top: 0; + right: -$sidebar-width; + transition: right .5s; + padding-top: 50px; + background: #F7F7F7; + } + + #sidebar-wrapper.hide { + right: 0px; + } + } + + @media screen and (max-width: 980px) { + #sidebar-wrapper { + height: 100%; + width: 100%; + position: fixed; + z-index: 999; + top: -100%; + transition: top .5s; + padding-top: 50px; + background: #F7F7F7; + } + + #sidebar-wrapper.hide { + top: 0; + } + } +</style> diff --git a/frontend/src/api-services/account_token.service.js b/frontend/src/api-services/account_token.service.js index 6f51a97c307f2fbc4ef6bdbd8f10705106bb0ace..2784d27a261ddd24eace244c0cec5e78271f6e1e 100644 --- a/frontend/src/api-services/account_token.service.js +++ b/frontend/src/api-services/account_token.service.js @@ -4,9 +4,28 @@ export default { list(config) { let ta = [ {"name": "cntl.mgr.list", "old": {"is_own": true}}, // Accounts - {"name": "cntl.wapi_auth.list", "join": {"0": "cntl.wapi_auth.fkey_cntl_wapi_auth_mgr"}}, // Tokens - {"name": "cntl.mgr2role.list", "join": {"0": "cntl.wapi_auth.fkey_cntl_wapi_auth_mgr"}}, // Roles + {"name": "cntl.wapi_auth.list", "join": {"0": "api_fkey_cntl_wapi_auth_mgr"}}, // Tokens + {"name": "cntl.mgr2role.list", "join": {"0": "api_fkey_cntl_wapi_auth_mgr"}}, // Roles ] - return TransactionService.execute(config, ta); + return TransactionService.execute(config, ta) + }, + update(config, {login_name_old, login_name_new, description_new, allow_data_manipulation_new, role_fq_name_list_new}) { + let ta = [ + { + "name": "cntl.mgr.update", + "new": { + 'login_name': login_name_new, + 'description': description_new, + 'allow_data_manipulation': allow_data_manipulation_new, + }, + "old": {'login_name': login_name_old} + }, + { + "name": "cntl.mgr2role.bulk_update", + "new": {'role_fq_name_list': role_fq_name_list_new, }, + "old": {'mgr_login_name': login_name_new} + } + ] + return TransactionService.execute(config, ta) } -}; \ No newline at end of file +} diff --git a/frontend/src/api-services/colnames.service.js b/frontend/src/api-services/colnames.service.js deleted file mode 100644 index 6af54ae67f634f9d3c0f3ef65d9886d76b6500e1..0000000000000000000000000000000000000000 --- a/frontend/src/api-services/colnames.service.js +++ /dev/null @@ -1,10 +0,0 @@ -import Axios from 'axios'; - -const RESOURCE_NAME = '/api/colnames'; - -export default { - getAll() { - return Axios.get(RESOURCE_NAME) - } -}; - diff --git a/frontend/src/api-services/dns_bcd.service.js b/frontend/src/api-services/dns_bcd.service.js index 5fbfa9ba0a55a7ab579dd28dad96b921beb2671a..2ae1a99bb64358122a0c4a0a2d7cb8ef7afaa186 100644 --- a/frontend/src/api-services/dns_bcd.service.js +++ b/frontend/src/api-services/dns_bcd.service.js @@ -4,9 +4,9 @@ export default { getOverview(config) { let ta = [ {"name": "nd.bcd.list", "old": {"is_own": true}}, - {"name": "vw.ou.list", "join": {"0": "nd.bcd.fkey_nd_bcd_oe"}}, - {"name": "nd.ip_subnet.list", "join": {"0": "nd.ip_subnet.fkey_nd_ip_subnet_bcd"}}, - {"name": "nd.vlan.list", "join": {"0": "nd.vlan.fkey_nd_vlan_bcd"}}, + {"name": "org.unit.list", "join": {"0": "api_fkey_nd_bcd_oe"}}, + {"name": "nd.ip_subnet.list", "join": {"0": "api_fkey_nd_ip_subnet_bcd"}}, + {"name": "nd.vlan.list", "join": {"0": "api_fkey_nd_vlan_bcd"}}, ] return TransactionService.execute(config, ta); }, @@ -17,7 +17,7 @@ export default { {"name": "dns.mgr2bcd.list", "join": {"0": "dns.mgr2bcd.fkey_dns_mgr2bcd_bcd"}}, {"name": "cntl.mgr.list", "join": {"1": "dns.mgr2bcd.fkey_dns_mgr2bcd_mgr"}}, {"name": "dns.domain2bcd.list", "join": {"0": "dns.domain2bcd.fkey_dns_domain2bcd_bcd"}}, - {"name": "vw.ou.list", "join": {"0": "nd.bcd.fkey_nd_bcd_oe"}}, + {"name": "org.unit.list", "join": {"0": "nd.bcd.fkey_nd_bcd_oe"}}, {"name": "nd.ip_subnet.list", "join": {"0": "nd.ip_subnet.fkey_nd_ip_subnet_bcd"}} ] return TransactionService.execute(config, ta); diff --git a/frontend/src/api-services/kit_map_data.js b/frontend/src/api-services/kit_map_data.js new file mode 100644 index 0000000000000000000000000000000000000000..ea8a9ac059cb367e40d54fd6599864bd2541fe92 --- /dev/null +++ b/frontend/src/api-services/kit_map_data.js @@ -0,0 +1,5656 @@ +export default { + name: 'kit_map_data', + kit_campus_mapping() { + return [{ + "id": "1", + "title": "Eiermann-H\u00f6rsaal (20.40)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01097", "8.41095"]], + "url": null + }, { + "id": "2", + "title": "Sportinstitut-H\u00f6rsaal (40.40)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01580", "8.41636"]], + "url": null + }, { + "id": "3", + "title": "Hochspannungs-Technik-H\u00f6rsaal (30.35)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01191", "8.41252"]], + "url": null + }, { + "id": "4", + "title": "Tulla-H\u00f6rsaal (11.40)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01019", "8.41166"]], + "url": null + }, { + "id": "5", + "title": "Fasanengarten-H\u00f6rsaal (50.35)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01472", "8.42042"]], + "url": null + }, { + "id": "6", + "title": "Lehmann-H\u00f6rsaal (30.22)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01242", "8.41073"]], + "url": null + }, { + "id": "7", + "title": "Engesser-H\u00f6rsaal (10.81)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01014", "8.41554"]], + "url": null + }, { + "id": "8", + "title": "Kollegium am Schloss H\u00f6rsaal (20.13 001)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01234", "8.40708"]], + "url": null + }, { + "id": "9", + "title": "Elektrotechnik, kleiner H\u00f6rsaal (11.10)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01065", "8.41281"]], + "url": null + }, { + "id": "10", + "title": "Lichttechnik-H\u00f6rsaal (30.34)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01212", "8.41304"]], + "url": null + }, { + "id": "11", + "title": "Bauingenieure, gro\u00dfer und kleiner H\u00f6rsaal (10.50)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.00962", "8.41700"]], + "url": null + }, { + "id": "12", + "title": "Benz-H\u00f6rsaal (10.21)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.00946", "8.41343"]], + "url": null + }, { + "id": "13", + "title": "Grashof-H\u00f6rsaal (10.91)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.00994", "8.41329"]], + "url": null + }, { + "id": "14", + "title": "Architektur-H\u00f6rs\u00e4le 9 und 37 (20.40)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01097", "8.41095"]], + "url": null + }, { + "id": "15", + "title": "Engelbert-Arnold-H\u00f6rsaal (11.10)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01064", "8.41281"]], + "url": null + }, { + "id": "16", + "title": "Redtenbacher-H\u00f6rsaal (10.91)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.00992", "8.41283"]], + "url": null + }, { + "id": "17", + "title": "NTI-H\u00f6rsaal (30.10)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01271", "8.40944"]], + "url": null + }, { + "id": "18", + "title": "Engler-Bunte-H\u00f6rsaal (40.11)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01400", "8.41488"]], + "url": null + }, { + "id": "19", + "title": "Messtechnik-H\u00f6rsaal (30.33)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01221", "8.41308"]], + "url": null + }, { + "id": "20", + "title": "Gerthsen-H\u00f6rsaal (30.21)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01243", "8.41157"]], + "url": null + }, { + "id": "21", + "title": "Daimler-H\u00f6rsaal (10.21)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.00946", "8.41343"]], + "url": null + }, { + "id": "22", + "title": "Audimax (30.95)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01271", "8.41573"]], + "url": null + }, { + "id": "23", + "title": "Rehbock-H\u00f6rsaal (10.81)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01013", "8.41555"]], + "url": null + }, { + "id": "24", + "title": "Gaede-H\u00f6rsaal (30.22)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01256", "8.41039"]], + "url": null + }, { + "id": "25", + "title": "Physik-H\u00f6rs\u00e4le (30.22)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01242", "8.41071"]], + "url": null + }, { + "id": "26", + "title": "Hertz-H\u00f6rsaal (10.11)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.00948", "8.41292"]], + "url": null + }, { + "id": "27", + "title": "Nusselt-H\u00f6rsaal (10.23)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.00946", "8.41390"]], + "url": null + }, { + "id": "28", + "title": "Chemie-H\u00f6rs\u00e4le I-III (30.41)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01260", "8.41385"]], + "url": null + }, { + "id": "29", + "title": "Criegee-H\u00f6rsaal (30.41)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01260", "8.41385"]], + "url": null + }, { + "id": "30", + "title": "Plank-H\u00f6rsaal (40.32)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.01457", "8.41734"]], + "url": null + }, { + "id": "31", + "title": "10.21", + "category": "building", + "aliasList": [], + "positionList": [["49.00945", "8.41346"]], + "url": null + }, { + "id": "32", + "title": "10.23", + "category": "building", + "aliasList": [], + "positionList": [["49.00937", "8.41428"]], + "url": null + }, { + "id": "33", + "title": "40.27", + "category": "building", + "aliasList": [], + "positionList": [["49.01437", "8.41573"]], + "url": null + }, { + "id": "34", + "title": "30.43", + "category": "building", + "aliasList": [], + "positionList": [["49.01237", "8.41451"]], + "url": null + }, { + "id": "35", + "title": "40.18", + "category": "building", + "aliasList": [], + "positionList": [["49.01550", "8.41484"]], + "url": null + }, { + "id": "36", + "title": "40.19", + "category": "building", + "aliasList": [], + "positionList": [["49.01448", "8.41445"]], + "url": null + }, { + "id": "37", + "title": "20.54", + "category": "building", + "aliasList": [], + "positionList": [["49.01195", "8.40923"]], + "url": null + }, { + "id": "38", + "title": "20.52", + "category": "building", + "aliasList": [], + "positionList": [["49.01224", "8.40929"]], + "url": null + }, { + "id": "39", + "title": "20.53", + "category": "building", + "aliasList": [], + "positionList": [["49.01210", "8.40938"]], + "url": null + }, { + "id": "40", + "title": "20.50", + "category": "building", + "aliasList": [], + "positionList": [["49.01240", "8.40874"]], + "url": null + }, { + "id": "41", + "title": "20.51", + "category": "building", + "aliasList": [], + "positionList": [["49.01230", "8.40904"]], + "url": null + }, { + "id": "42", + "title": "40.11", + "category": "building", + "aliasList": [], + "positionList": [["49.01400", "8.41489"]], + "url": null + }, { + "id": "43", + "title": "40.12", + "category": "building", + "aliasList": [], + "positionList": [["49.01436", "8.41486"]], + "url": null + }, { + "id": "44", + "title": "40.13", + "category": "building", + "aliasList": [], + "positionList": [["49.01471", "8.41518"]], + "url": null + }, { + "id": "45", + "title": "40.14", + "category": "building", + "aliasList": [], + "positionList": [["49.01478", "8.41453"]], + "url": null + }, { + "id": "46", + "title": "30.12", + "category": "building", + "aliasList": [], + "positionList": [["49.01312", "8.40918"]], + "url": null + }, { + "id": "47", + "title": "30.11", + "category": "building", + "aliasList": [], + "positionList": [["49.01310", "8.40976"]], + "url": null + }, { + "id": "48", + "title": "30.10", + "category": "building", + "aliasList": [], + "positionList": [["49.01288", "8.40949"]], + "url": null + }, { + "id": "49", + "title": "08.03", + "category": "building", + "aliasList": [], + "positionList": [["49.00761", "8.40435"]], + "url": null + }, { + "id": "50", + "title": "30.96", + "category": "building", + "aliasList": [], + "positionList": [["49.01300", "8.41598"]], + "url": null + }, { + "id": "51", + "title": "30.95", + "category": "building", + "aliasList": [], + "positionList": [["49.01268", "8.41569"]], + "url": null + }, { + "id": "52", + "title": "30.93", + "category": "building", + "aliasList": [], + "positionList": [["49.01273", "8.41333"]], + "url": null + }, { + "id": "53", + "title": "30.29", + "category": "building", + "aliasList": [], + "positionList": [["49.01192", "8.41168"]], + "url": null + }, { + "id": "54", + "title": "30.91", + "category": "building", + "aliasList": [], + "positionList": [["49.01328", "8.41374"]], + "url": null + }, { + "id": "55", + "title": "30.90", + "category": "building", + "aliasList": [], + "positionList": [["49.01328", "8.41426"]], + "url": null + }, { + "id": "56", + "title": "40.21", + "category": "building", + "aliasList": [], + "positionList": [["49.01407", "8.41570"]], + "url": null + }, { + "id": "57", + "title": "11.40", + "category": "building", + "aliasList": [], + "positionList": [["49.01017", "8.41184"]], + "url": null + }, { + "id": "58", + "title": "10.95", + "category": "building", + "aliasList": [], + "positionList": [["49.01006", "8.41419"]], + "url": null + }, { + "id": "59", + "title": "10.94", + "category": "building", + "aliasList": [], + "positionList": [["49.01029", "8.41380"]], + "url": null + }, { + "id": "60", + "title": "01.52", + "category": "building", + "aliasList": [], + "positionList": [["49.01307", "8.40839"]], + "url": null + }, { + "id": "61", + "title": "01.51", + "category": "building", + "aliasList": [], + "positionList": [["49.01320", "8.40771"]], + "url": null + }, { + "id": "62", + "title": "10.50", + "category": "building", + "aliasList": [], + "positionList": [["49.00951", "8.41695"]], + "url": null + }, { + "id": "63", + "title": "06.46", + "category": "building", + "aliasList": [], + "positionList": [["49.02042", "8.36752"]], + "url": null + }, { + "id": "64", + "title": "30.80", + "category": "building", + "aliasList": [], + "positionList": [["49.01327", "8.41485"]], + "url": null + }, { + "id": "65", + "title": "30.81", + "category": "building", + "aliasList": [], + "positionList": [["49.01109", "8.41467"]], + "url": null + }, { + "id": "66", + "title": "30.82", + "category": "building", + "aliasList": [], + "positionList": [["49.01112", "8.41530"]], + "url": null + }, { + "id": "67", + "title": "50.38", + "category": "building", + "aliasList": [], + "positionList": [["49.01491", "8.42104"]], + "url": null + }, { + "id": "68", + "title": "40.23", + "category": "building", + "aliasList": [], + "positionList": [["49.01416", "8.41626"]], + "url": null + }, { + "id": "69", + "title": "50.10", + "category": "building", + "aliasList": [], + "positionList": [["49.01286", "8.41928"]], + "url": null + }, { + "id": "70", + "title": "50.12", + "category": "building", + "aliasList": [], + "positionList": [["49.01289", "8.41956"]], + "url": null + }, { + "id": "71", + "title": "40.22", + "category": "building", + "aliasList": [], + "positionList": [["49.01405", "8.41610"]], + "url": null + }, { + "id": "72", + "title": "40.16", + "category": "building", + "aliasList": [], + "positionList": [["49.01530", "8.41501"]], + "url": null + }, { + "id": "73", + "title": "20.12", + "category": "building", + "aliasList": [], + "positionList": [["49.01257", "8.40664"]], + "url": null + }, { + "id": "74", + "title": "10.40", + "category": "building", + "aliasList": [], + "positionList": [["49.00924", "8.41664"]], + "url": null + }, { + "id": "76", + "title": "30.79", + "category": "building", + "aliasList": [], + "positionList": [["49.01330", "8.41711"]], + "url": null + }, { + "id": "77", + "title": "05.20", + "category": "building", + "aliasList": [], + "positionList": [["49.00900", "8.40958"]], + "url": null + }, { + "id": "78", + "title": "30.70", + "category": "building", + "aliasList": [], + "positionList": [["49.01300", "8.41709"]], + "url": null + }, { + "id": "79", + "title": "40.15", + "category": "building", + "aliasList": [], + "positionList": [["49.01508", "8.41500"]], + "url": null + }, { + "id": "80", + "title": "10.62", + "category": "building", + "aliasList": [], + "positionList": [["49.01055", "8.41748"]], + "url": null + }, { + "id": "81", + "title": "40.17", + "category": "building", + "aliasList": [], + "positionList": [["49.01546", "8.41451"]], + "url": null + }, { + "id": "82", + "title": "30.46", + "category": "building", + "aliasList": [], + "positionList": [["49.01168", "8.41384"]], + "url": null + }, { + "id": "83", + "title": "50.24", + "category": "building", + "aliasList": [], + "positionList": [["49.01009", "8.41938"]], + "url": null + }, { + "id": "84", + "title": "40.24", + "category": "building", + "aliasList": [], + "positionList": [["49.01428", "8.41624"]], + "url": null + }, { + "id": "85", + "title": "02.95", + "category": "building", + "aliasList": [], + "positionList": [["49.01066", "8.40254"]], + "url": null + }, { + "id": "86", + "title": "40.26", + "category": "building", + "aliasList": [], + "positionList": [["49.01450", "8.41598"]], + "url": null + }, { + "id": "87", + "title": "20.14", + "category": "building", + "aliasList": [], + "positionList": [["49.01196", "8.40750"]], + "url": null + }, { + "id": "88", + "title": "40.43", + "category": "building", + "aliasList": [], + "positionList": [["49.01653", "8.41585"]], + "url": null + }, { + "id": "89", + "title": "40.41", + "category": "building", + "aliasList": [], + "positionList": [["49.01795", "8.41420"]], + "url": null + }, { + "id": "90", + "title": "40.40", + "category": "building", + "aliasList": [], + "positionList": [["49.01579", "8.41638"]], + "url": null + }, { + "id": "91", + "title": "30.60", + "category": "building", + "aliasList": [], + "positionList": [["49.01233", "8.41669"]], + "url": null + }, { + "id": "92", + "title": "30.61", + "category": "building", + "aliasList": [], + "positionList": [["49.01229", "8.41729"]], + "url": null + }, { + "id": "93", + "title": "10.70", + "category": "building", + "aliasList": [], + "positionList": [["49.00986", "8.41629"]], + "url": null + }, { + "id": "94", + "title": "50.33", + "category": "building", + "aliasList": [], + "positionList": [["49.01459", "8.42128"]], + "url": null + }, { + "id": "95", + "title": "50.32", + "category": "building", + "aliasList": [], + "positionList": [["49.01395", "8.42157"]], + "url": null + }, { + "id": "96", + "title": "50.31", + "category": "building", + "aliasList": [], + "positionList": [["49.01413", "8.42077"]], + "url": null + }, { + "id": "97", + "title": "50.36", + "category": "building", + "aliasList": [], + "positionList": [["49.01493", "8.41964"]], + "url": null + }, { + "id": "98", + "title": "50.35", + "category": "building", + "aliasList": [], + "positionList": [["49.01469", "8.42042"]], + "url": null + }, { + "id": "99", + "title": "50.34", + "category": "building", + "aliasList": [], + "positionList": [["49.01389", "8.41951"]], + "url": null + }, { + "id": "100", + "title": "06.31", + "category": "building", + "aliasList": [], + "positionList": [["49.02243", "8.36692"]], + "url": null + }, { + "id": "101", + "title": "06.32", + "category": "building", + "aliasList": [], + "positionList": [["49.02208", "8.36703"]], + "url": null + }, { + "id": "102", + "title": "06.33", + "category": "building", + "aliasList": [], + "positionList": [["49.02144", "8.36683"]], + "url": null + }, { + "id": "103", + "title": "06.34", + "category": "building", + "aliasList": [], + "positionList": [["49.02103", "8.36681"]], + "url": null + }, { + "id": "104", + "title": "06.35", + "category": "building", + "aliasList": [], + "positionList": [["49.02179", "8.36620"]], + "url": null + }, { + "id": "105", + "title": "06.36", + "category": "building", + "aliasList": [], + "positionList": [["49.02109", "8.36599"]], + "url": null + }, { + "id": "106", + "title": "06.38", + "category": "building", + "aliasList": [], + "positionList": [["49.02180", "8.36824"]], + "url": null + }, { + "id": "107", + "title": "11.10", + "category": "building", + "aliasList": [], + "positionList": [["49.01078", "8.41282"]], + "url": null + }, { + "id": "108", + "title": "11.11", + "category": "building", + "aliasList": [], + "positionList": [["49.01105", "8.41261"]], + "url": null + }, { + "id": "109", + "title": "07.07", + "category": "building", + "aliasList": [], + "positionList": [["49.01313", "8.42424"]], + "url": null + }, { + "id": "110", + "title": "07.01", + "category": "building", + "aliasList": [], + "positionList": [["49.01450", "8.42461"]], + "url": null + }, { + "id": "111", + "title": "10.64", + "category": "building", + "aliasList": [], + "positionList": [["49.00993", "8.41741"]], + "url": null + }, { + "id": "112", + "title": "20.13", + "category": "building", + "aliasList": [], + "positionList": [["49.01227", "8.40707"]], + "url": null + }, { + "id": "113", + "title": "20.11", + "category": "building", + "aliasList": [], + "positionList": [["49.01296", "8.40643"]], + "url": null + }, { + "id": "114", + "title": "10.61", + "category": "building", + "aliasList": [], + "positionList": [["49.01016", "8.41743"]], + "url": null + }, { + "id": "115", + "title": "07.08", + "category": "building", + "aliasList": [], + "positionList": [["49.01367", "8.42420"]], + "url": null + }, { + "id": "116", + "title": "10.63", + "category": "building", + "aliasList": [], + "positionList": [["49.01048", "8.41707"]], + "url": null + }, { + "id": "117", + "title": "40.29", + "category": "building", + "aliasList": [], + "positionList": [["49.01468", "8.41574"]], + "url": null + }, { + "id": "118", + "title": "50.25", + "category": "building", + "aliasList": [], + "positionList": [["49.00995", "8.41917"]], + "url": null + }, { + "id": "119", + "title": "50.20", + "category": "building", + "aliasList": [], + "positionList": [["49.01025", "8.41890"]], + "url": null + }, { + "id": "120", + "title": "50.21", + "category": "building", + "aliasList": [], + "positionList": [["49.01087", "8.41900"]], + "url": null + }, { + "id": "121", + "title": "50.22", + "category": "building", + "aliasList": [], + "positionList": [["49.01082", "8.41959"]], + "url": null + }, { + "id": "122", + "title": "50.23", + "category": "building", + "aliasList": [], + "positionList": [["49.01007", "8.41969"]], + "url": null + }, { + "id": "123", + "title": "30.51", + "category": "building", + "aliasList": [], + "positionList": [["49.01099", "8.41697"]], + "url": null + }, { + "id": "124", + "title": "30.50", + "category": "building", + "aliasList": [], + "positionList": [["49.01134", "8.41642"]], + "url": null + }, { + "id": "125", + "title": "05.01", + "category": "building", + "aliasList": [], + "positionList": [["49.00904", "8.40535"]], + "url": null + }, { + "id": "126", + "title": "70.26", + "category": "building", + "aliasList": [], + "positionList": [["49.02274", "8.43366"]], + "url": null + }, { + "id": "127", + "title": "20.21", + "category": "building", + "aliasList": [], + "positionList": [["49.01210", "8.40808"]], + "url": null + }, { + "id": "128", + "title": "20.20", + "category": "building", + "aliasList": [], + "positionList": [["49.01242", "8.40811"]], + "url": null + }, { + "id": "129", + "title": "11.23", + "category": "building", + "aliasList": [], + "positionList": [["49.01074", "8.41339"]], + "url": null + }, { + "id": "130", + "title": "11.22", + "category": "building", + "aliasList": [], + "positionList": [["49.01059", "8.41404"]], + "url": null + }, { + "id": "131", + "title": "11.21", + "category": "building", + "aliasList": [], + "positionList": [["49.01079", "8.41405"]], + "url": null + }, { + "id": "132", + "title": "11.20", + "category": "building", + "aliasList": [], + "positionList": [["49.01103", "8.41217"]], + "url": null + }, { + "id": "133", + "title": "06.45", + "category": "building", + "aliasList": [], + "positionList": [["49.02033", "8.36771"]], + "url": null + }, { + "id": "134", + "title": "30.45", + "category": "building", + "aliasList": [], + "positionList": [["49.01140", "8.41380"]], + "url": null + }, { + "id": "135", + "title": "06.47", + "category": "building", + "aliasList": [], + "positionList": [["49.02025", "8.36731"]], + "url": null + }, { + "id": "136", + "title": "07.30", + "category": "building", + "aliasList": [], + "positionList": [["49.01414", "8.42578"]], + "url": null + }, { + "id": "137", + "title": "06.41", + "category": "building", + "aliasList": [], + "positionList": [["49.02129", "8.36819"]], + "url": null + }, { + "id": "138", + "title": "06.40", + "category": "building", + "aliasList": [], + "positionList": [["49.02165", "8.36765"]], + "url": null + }, { + "id": "139", + "title": "30.42", + "category": "building", + "aliasList": [], + "positionList": [["49.01296", "8.41423"]], + "url": null + }, { + "id": "140", + "title": "06.42", + "category": "building", + "aliasList": [], + "positionList": [["49.02056", "8.36729"]], + "url": null + }, { + "id": "141", + "title": "10.11", + "category": "building", + "aliasList": [], + "positionList": [["49.00933", "8.41223"]], + "url": null + }, { + "id": "142", + "title": "40.28", + "category": "building", + "aliasList": [], + "positionList": [["49.01509", "8.41592"]], + "url": null + }, { + "id": "143", + "title": "10.12", + "category": "building", + "aliasList": [], + "positionList": [["49.00960", "8.41179"]], + "url": null + }, { + "id": "144", + "title": "40.32", + "category": "building", + "aliasList": [], + "positionList": [["49.01453", "8.41733"]], + "url": null + }, { + "id": "145", + "title": "40.31", + "category": "building", + "aliasList": [], + "positionList": [["49.01405", "8.41722"]], + "url": null + }, { + "id": "146", + "title": "20.30", + "category": "building", + "aliasList": [], + "positionList": [["49.01114", "8.40930"]], + "url": null + }, { + "id": "147", + "title": "30.31", + "category": "building", + "aliasList": [], + "positionList": [["49.01242", "8.41319"]], + "url": null + }, { + "id": "148", + "title": "40.33", + "category": "building", + "aliasList": [], + "positionList": [["49.01495", "8.41716"]], + "url": null + }, { + "id": "149", + "title": "30.33", + "category": "building", + "aliasList": [], + "positionList": [["49.01226", "8.41320"]], + "url": null + }, { + "id": "150", + "title": "30.32", + "category": "building", + "aliasList": [], + "positionList": [["49.01239", "8.41271"]], + "url": null + }, { + "id": "151", + "title": "30.35", + "category": "building", + "aliasList": [], + "positionList": [["49.01198", "8.41267"]], + "url": null + }, { + "id": "152", + "title": "30.34", + "category": "building", + "aliasList": [], + "positionList": [["49.01171", "8.41303"]], + "url": null + }, { + "id": "153", + "title": "30.36", + "category": "building", + "aliasList": [], + "positionList": [["49.01193", "8.41234"]], + "url": null + }, { + "id": "154", + "title": "07.21", + "category": "building", + "aliasList": [], + "positionList": [["49.01272", "8.42534"]], + "url": null + }, { + "id": "155", + "title": "70.13", + "category": "building", + "aliasList": [], + "positionList": [["49.02333", "8.43157"]], + "url": null + }, { + "id": "156", + "title": "50.40", + "category": "building", + "aliasList": [], + "positionList": [["49.01547", "8.42037"]], + "url": null + }, { + "id": "157", + "title": "50.41", + "category": "building", + "aliasList": [], + "positionList": [["49.01569", "8.41946"]], + "url": null + }, { + "id": "158", + "title": "70.12", + "category": "building", + "aliasList": [], + "positionList": [["49.02429", "8.43218"]], + "url": null + }, { + "id": "159", + "title": "01.96", + "category": "building", + "aliasList": [], + "positionList": [["49.00890", "8.41130"]], + "url": null + }, { + "id": "160", + "title": "01.94", + "category": "building", + "aliasList": [], + "positionList": [["49.00814", "8.40898"]], + "url": null + }, { + "id": "161", + "title": "01.93", + "category": "building", + "aliasList": [], + "positionList": [["49.00843", "8.40875"]], + "url": null + }, { + "id": "162", + "title": "01.92", + "category": "building", + "aliasList": [], + "positionList": [["49.00845", "8.40891"]], + "url": null + }, { + "id": "163", + "title": "Ostendorfhaus", + "category": "building", + "aliasList": [], + "positionList": [["49.01419", "8.38327"]], + "url": null + }, { + "id": "164", + "title": "10.91", + "category": "building", + "aliasList": [], + "positionList": [["49.00990", "8.41322"]], + "url": null + }, { + "id": "165", + "title": "10.93", + "category": "building", + "aliasList": [], + "positionList": [["49.01033", "8.41342"]], + "url": null + }, { + "id": "166", + "title": "10.92", + "category": "building", + "aliasList": [], + "positionList": [["49.01033", "8.41301"]], + "url": null + }, { + "id": "167", + "title": "01.13", + "category": "building", + "aliasList": [], + "positionList": [["49.01192", "8.41690"]], + "url": null + }, { + "id": "168", + "title": "01.12", + "category": "building", + "aliasList": [], + "positionList": [["49.01153", "8.41739"]], + "url": null + }, { + "id": "169", + "title": "10.96", + "category": "building", + "aliasList": [], + "positionList": [["49.00983", "8.41417"]], + "url": null + }, { + "id": "170", + "title": "10.86", + "category": "building", + "aliasList": [], + "positionList": [["49.01011", "8.41636"]], + "url": null + }, { + "id": "171", + "title": "70.22", + "category": "building", + "aliasList": [], + "positionList": [["49.02390", "8.43246"]], + "url": null + }, { + "id": "172", + "title": "70.16", + "category": "building", + "aliasList": [], + "positionList": [["49.02186", "8.43111"]], + "url": null + }, { + "id": "173", + "title": "10.34", + "category": "building", + "aliasList": [], + "positionList": [["49.00921", "8.41600"]], + "url": null + }, { + "id": "174", + "title": "10.33", + "category": "building", + "aliasList": [], + "positionList": [["49.00937", "8.41602"]], + "url": null + }, { + "id": "175", + "title": "10.32", + "category": "building", + "aliasList": [], + "positionList": [["49.00923", "8.41502"]], + "url": null + }, { + "id": "176", + "title": "10.31", + "category": "building", + "aliasList": [], + "positionList": [["49.00920", "8.41372"]], + "url": null + }, { + "id": "177", + "title": "10.30", + "category": "building", + "aliasList": [], + "positionList": [["49.00958", "8.41548"]], + "url": null + }, { + "id": "178", + "title": "70.14", + "category": "building", + "aliasList": [], + "positionList": [["49.02393", "8.43245"]], + "url": null + }, { + "id": "179", + "title": "30.22", + "category": "building", + "aliasList": [], + "positionList": [["49.01257", "8.41068"]], + "url": null + }, { + "id": "180", + "title": "30.23", + "category": "building", + "aliasList": [], + "positionList": [["49.01293", "8.41110"]], + "url": null + }, { + "id": "181", + "title": "06.60", + "category": "building", + "aliasList": [], + "positionList": [["49.02355", "8.36775"]], + "url": null + }, { + "id": "182", + "title": "20.44", + "category": "building", + "aliasList": [], + "positionList": [["49.01111", "8.41109"]], + "url": null + }, { + "id": "183", + "title": "30.24", + "category": "building", + "aliasList": [], + "positionList": [["49.01318", "8.41076"]], + "url": null + }, { + "id": "184", + "title": "30.25", + "category": "building", + "aliasList": [], + "positionList": [["49.01288", "8.41168"]], + "url": null + }, { + "id": "185", + "title": "40.04", + "category": "building", + "aliasList": [], + "positionList": [["49.01519", "8.41450"]], + "url": null + }, { + "id": "186", + "title": "40.02", + "category": "building", + "aliasList": [], + "positionList": [["49.01429", "8.41519"]], + "url": null + }, { + "id": "187", + "title": "30.44", + "category": "building", + "aliasList": [], + "positionList": [["49.01187", "8.41442"]], + "url": null + }, { + "id": "188", + "title": "07.31", + "category": "building", + "aliasList": [], + "positionList": [["49.01420", "8.42627"]], + "url": null + }, { + "id": "189", + "title": "10.82", + "category": "building", + "aliasList": [], + "positionList": [["49.01022", "8.41555"]], + "url": null + }, { + "id": "190", + "title": "10.83", + "category": "building", + "aliasList": [], + "positionList": [["49.01065", "8.41518"]], + "url": null + }, { + "id": "191", + "title": "70.11", + "category": "building", + "aliasList": [], + "positionList": [["49.02379", "8.43115"]], + "url": null + }, { + "id": "192", + "title": "10.81", + "category": "building", + "aliasList": [], + "positionList": [["49.01027", "8.41561"]], + "url": null + }, { + "id": "193", + "title": "11.30", + "category": "building", + "aliasList": ["adolf-w\u00fcrth-geb\u00e4ude", "senatssaal"], + "positionList": [["49.01027", "8.41252"]], + "url": null + }, { + "id": "194", + "title": "10.87", + "category": "building", + "aliasList": [], + "positionList": [["49.01009", "8.41686"]], + "url": null + }, { + "id": "195", + "title": "10.84", + "category": "building", + "aliasList": [], + "positionList": [["49.01068", "8.41578"]], + "url": null + }, { + "id": "196", + "title": "10.85", + "category": "building", + "aliasList": [], + "positionList": [["49.01065", "8.41646"]], + "url": null + }, { + "id": "197", + "title": "40.25", + "category": "building", + "aliasList": [], + "positionList": [["49.01451", "8.41627"]], + "url": null + }, { + "id": "198", + "title": "10.88", + "category": "building", + "aliasList": [], + "positionList": [["49.01031", "8.41638"]], + "url": null + }, { + "id": "199", + "title": "10.89", + "category": "building", + "aliasList": [], + "positionList": [["49.01037", "8.41656"]], + "url": null + }, { + "id": "200", + "title": "30.21", + "category": "building", + "aliasList": [], + "positionList": [["49.01239", "8.41158"]], + "url": null + }, { + "id": "201", + "title": "30.41", + "category": "building", + "aliasList": [], + "positionList": [["49.01234", "8.41383"]], + "url": null + }, { + "id": "202", + "title": "101", + "category": "building", + "aliasList": [], + "positionList": [["49.09136", "8.42731"]], + "url": null + }, { + "id": "203", + "title": "103", + "category": "building", + "aliasList": [], + "positionList": [["49.09184", "8.42696"]], + "url": null + }, { + "id": "204", + "title": "121", + "category": "building", + "aliasList": [], + "positionList": [["49.09200", "8.42816"]], + "url": null + }, { + "id": "205", + "title": "122", + "category": "building", + "aliasList": [], + "positionList": [["49.09211", "8.42778"]], + "url": null + }, { + "id": "206", + "title": "123", + "category": "building", + "aliasList": [], + "positionList": [["49.09233", "8.42800"]], + "url": null + }, { + "id": "207", + "title": "124", + "category": "building", + "aliasList": [], + "positionList": [["49.09248", "8.42721"]], + "url": null + }, { + "id": "208", + "title": "126", + "category": "building", + "aliasList": [], + "positionList": [["49.09272", "8.42677"]], + "url": null + }, { + "id": "209", + "title": "131", + "category": "building", + "aliasList": [], + "positionList": [["49.09232", "8.42664"]], + "url": null + }, { + "id": "210", + "title": "141", + "category": "building", + "aliasList": [], + "positionList": [["49.09297", "8.42784"]], + "url": null + }, { + "id": "211", + "title": "142", + "category": "building", + "aliasList": [], + "positionList": [["49.09339", "8.42757"]], + "url": null + }, { + "id": "212", + "title": "144", + "category": "building", + "aliasList": [], + "positionList": [["49.09368", "8.42773"]], + "url": null + }, { + "id": "213", + "title": "151", + "category": "building", + "aliasList": [], + "positionList": [["49.09457", "8.42548"]], + "url": null + }, { + "id": "214", + "title": "152", + "category": "building", + "aliasList": [], + "positionList": [["49.09402", "8.42629"]], + "url": null + }, { + "id": "215", + "title": "210", + "category": "building", + "aliasList": [], + "positionList": [["49.09148", "8.42960"]], + "url": null + }, { + "id": "216", + "title": "211", + "category": "building", + "aliasList": [], + "positionList": [["49.09105", "8.42943"]], + "url": null + }, { + "id": "217", + "title": "212", + "category": "building", + "aliasList": [], + "positionList": [["49.09096", "8.42980"]], + "url": null + }, { + "id": "218", + "title": "213", + "category": "building", + "aliasList": [], + "positionList": [["49.09221", "8.43097"]], + "url": null + }, { + "id": "219", + "title": "220", + "category": "building", + "aliasList": [], + "positionList": [["49.09221", "8.43097"]], + "url": null + }, { + "id": "220", + "title": "221", + "category": "building", + "aliasList": [], + "positionList": [["49.09200", "8.42897"]], + "url": null + }, { + "id": "221", + "title": "222", + "category": "building", + "aliasList": [], + "positionList": [["49.09180", "8.42934"]], + "url": null + }, { + "id": "222", + "title": "223", + "category": "building", + "aliasList": [], + "positionList": [["49.09191", "8.42966"]], + "url": null + }, { + "id": "223", + "title": "224", + "category": "building", + "aliasList": [], + "positionList": [["49.09169", "8.43002"]], + "url": null + }, { + "id": "224", + "title": "225", + "category": "building", + "aliasList": [], + "positionList": [["49.09194", "8.43033"]], + "url": null + }, { + "id": "225", + "title": "226", + "category": "building", + "aliasList": [], + "positionList": [["49.09161", "8.43049"]], + "url": null + }, { + "id": "226", + "title": "227", + "category": "building", + "aliasList": [], + "positionList": [["49.09178", "8.43090"]], + "url": null + }, { + "id": "227", + "title": "228", + "category": "building", + "aliasList": [], + "positionList": [["49.09146", "8.43139"]], + "url": null + }, { + "id": "228", + "title": "230", + "category": "building", + "aliasList": [], + "positionList": [["49.09285", "8.43058"]], + "url": null + }, { + "id": "229", + "title": "231", + "category": "building", + "aliasList": [], + "positionList": [["49.09154", "8.43301"]], + "url": null + }, { + "id": "230", + "title": "232", + "category": "building", + "aliasList": [], + "positionList": [["49.09112", "8.43287"]], + "url": null + }, { + "id": "231", + "title": "234", + "category": "building", + "aliasList": [], + "positionList": [["49.09112", "8.43473"]], + "url": null + }, { + "id": "232", + "title": "235", + "category": "building", + "aliasList": [], + "positionList": [["49.09317", "8.43264"]], + "url": null + }, { + "id": "233", + "title": "237", + "category": "building", + "aliasList": [], + "positionList": [["49.09295", "8.43260"]], + "url": null + }, { + "id": "234", + "title": "238", + "category": "building", + "aliasList": [], + "positionList": [["49.09338", "8.43117"]], + "url": null + }, { + "id": "235", + "title": "239", + "category": "building", + "aliasList": [], + "positionList": [["49.09322", "8.43152"]], + "url": null + }, { + "id": "236", + "title": "240", + "category": "building", + "aliasList": [], + "positionList": [["49.09341", "8.43050"]], + "url": null + }, { + "id": "237", + "title": "241", + "category": "building", + "aliasList": [], + "positionList": [["49.09275", "8.43012"]], + "url": null + }, { + "id": "238", + "title": "242", + "category": "building", + "aliasList": [], + "positionList": [["49.09253", "8.43087"]], + "url": null + }, { + "id": "239", + "title": "243", + "category": "building", + "aliasList": [], + "positionList": [["49.09249", "8.43135"]], + "url": null + }, { + "id": "240", + "title": "244", + "category": "building", + "aliasList": [], + "positionList": [["49.09280", "8.43137"]], + "url": null + }, { + "id": "241", + "title": "245", + "category": "building", + "aliasList": [], + "positionList": [["49.09279", "8.43224"]], + "url": null + }, { + "id": "242", + "title": "246", + "category": "building", + "aliasList": [], + "positionList": [["49.09200", "8.43170"]], + "url": null + }, { + "id": "243", + "title": "247", + "category": "building", + "aliasList": [], + "positionList": [["49.09296", "8.43104"]], + "url": null + }, { + "id": "244", + "title": "248", + "category": "building", + "aliasList": [], + "positionList": [["49.09287", "8.43164"]], + "url": null + }, { + "id": "245", + "title": "249", + "category": "building", + "aliasList": [], + "positionList": [["49.09280", "8.43132"]], + "url": null + }, { + "id": "246", + "title": "250", + "category": "building", + "aliasList": [], + "positionList": [["49.09217", "8.43178"]], + "url": null + }, { + "id": "247", + "title": "251", + "category": "building", + "aliasList": [], + "positionList": [["49.09245", "8.43313"]], + "url": null + }, { + "id": "248", + "title": "252", + "category": "building", + "aliasList": [], + "positionList": [["49.09193", "8.43407"]], + "url": null + }, { + "id": "249", + "title": "253", + "category": "building", + "aliasList": [], + "positionList": [["49.09156", "8.43476"]], + "url": null + }, { + "id": "250", + "title": "254", + "category": "building", + "aliasList": [], + "positionList": [["49.09161", "8.43514"]], + "url": null + }, { + "id": "251", + "title": "255", + "category": "building", + "aliasList": [], + "positionList": [["49.09219", "8.43513"]], + "url": null + }, { + "id": "252", + "title": "256", + "category": "building", + "aliasList": [], + "positionList": [["49.09200", "8.43320"]], + "url": null + }, { + "id": "253", + "title": "257", + "category": "building", + "aliasList": [], + "positionList": [["49.09235", "8.43350"]], + "url": null + }, { + "id": "254", + "title": "258", + "category": "building", + "aliasList": [], + "positionList": [["49.09205", "8.43578"]], + "url": null + }, { + "id": "255", + "title": "259", + "category": "building", + "aliasList": [], + "positionList": [["49.09200", "8.43505"]], + "url": null + }, { + "id": "256", + "title": "260", + "category": "building", + "aliasList": [], + "positionList": [["49.09241", "8.43435"]], + "url": null + }, { + "id": "257", + "title": "261", + "category": "building", + "aliasList": [], + "positionList": [["49.09258", "8.43343"]], + "url": null + }, { + "id": "258", + "title": "272", + "category": "building", + "aliasList": [], + "positionList": [["49.09271", "8.43541"]], + "url": null + }, { + "id": "259", + "title": "273", + "category": "building", + "aliasList": [], + "positionList": [["49.09266", "8.43471"]], + "url": null + }, { + "id": "260", + "title": "274", + "category": "building", + "aliasList": [], + "positionList": [["49.09261", "8.43509"]], + "url": null + }, { + "id": "261", + "title": "276", + "category": "building", + "aliasList": [], + "positionList": [["49.09287", "8.43409"]], + "url": null + }, { + "id": "262", + "title": "277", + "category": "building", + "aliasList": [], + "positionList": [["49.09252", "8.43572"]], + "url": null + }, { + "id": "263", + "title": "278", + "category": "building", + "aliasList": [], + "positionList": [["49.09248", "8.43603"]], + "url": null + }, { + "id": "264", + "title": "300", + "category": "building", + "aliasList": [], + "positionList": [["49.09425", "8.42918"]], + "url": null + }, { + "id": "265", + "title": "301", + "category": "building", + "aliasList": [], + "positionList": [["49.09452", "8.42965"]], + "url": null + }, { + "id": "266", + "title": "302", + "category": "building", + "aliasList": [], + "positionList": [["49.09467", "8.42911"]], + "url": null + }, { + "id": "267", + "title": "303", + "category": "building", + "aliasList": [], + "positionList": [["49.09467", "8.42857"]], + "url": null + }, { + "id": "268", + "title": "304", + "category": "building", + "aliasList": [], + "positionList": [["49.09482", "8.42743"]], + "url": null + }, { + "id": "269", + "title": "305", + "category": "building", + "aliasList": [], + "positionList": [["49.09500", "8.42795"]], + "url": null + }, { + "id": "270", + "title": "306", + "category": "building", + "aliasList": [], + "positionList": [["49.09501", "8.42721"]], + "url": null + }, { + "id": "271", + "title": "307", + "category": "building", + "aliasList": [], + "positionList": [["49.09435", "8.42883"]], + "url": null + }, { + "id": "272", + "title": "308", + "category": "building", + "aliasList": [], + "positionList": [["49.09468", "8.42935"]], + "url": null + }, { + "id": "273", + "title": "309", + "category": "building", + "aliasList": [], + "positionList": [["49.09411", "8.42910"]], + "url": null + }, { + "id": "274", + "title": "310", + "category": "building", + "aliasList": [], + "positionList": [["49.09466", "8.42887"]], + "url": null + }, { + "id": "275", + "title": "311", + "category": "building", + "aliasList": [], + "positionList": [["49.09517", "8.42633"]], + "url": null + }, { + "id": "276", + "title": "312", + "category": "building", + "aliasList": [], + "positionList": [["49.09467", "8.42700"]], + "url": null + }, { + "id": "277", + "title": "313", + "category": "building", + "aliasList": [], + "positionList": [["49.09436", "8.42755"]], + "url": null + }, { + "id": "278", + "title": "314", + "category": "building", + "aliasList": [], + "positionList": [["49.09479", "8.42934"]], + "url": null + }, { + "id": "279", + "title": "315", + "category": "building", + "aliasList": [], + "positionList": [["49.09585", "8.42655"]], + "url": null + }, { + "id": "280", + "title": "316", + "category": "building", + "aliasList": [], + "positionList": [["49.09475", "8.42656"]], + "url": null + }, { + "id": "281", + "title": "317", + "category": "building", + "aliasList": [], + "positionList": [["49.09445", "8.42718"]], + "url": null + }, { + "id": "282", + "title": "318", + "category": "building", + "aliasList": [], + "positionList": [["49.09481", "8.42923"]], + "url": null + }, { + "id": "283", + "title": "320", + "category": "building", + "aliasList": [], + "positionList": [["49.09562", "8.42907"]], + "url": null + }, { + "id": "284", + "title": "321", + "category": "building", + "aliasList": [], + "positionList": [["49.09514", "8.42984"]], + "url": null + }, { + "id": "285", + "title": "322", + "category": "building", + "aliasList": [], + "positionList": [["49.09541", "8.42940"]], + "url": null + }, { + "id": "286", + "title": "324", + "category": "building", + "aliasList": [], + "positionList": [["49.09593", "8.42827"]], + "url": null + }, { + "id": "287", + "title": "326", + "category": "building", + "aliasList": [], + "positionList": [["49.09538", "8.42897"]], + "url": null + }, { + "id": "288", + "title": "327", + "category": "building", + "aliasList": [], + "positionList": [["49.09576", "8.42928"]], + "url": null + }, { + "id": "289", + "title": "328", + "category": "building", + "aliasList": [], + "positionList": [["49.09511", "8.42943"]], + "url": null + }, { + "id": "290", + "title": "329", + "category": "building", + "aliasList": [], + "positionList": [["49.09598", "8.42891"]], + "url": null + }, { + "id": "291", + "title": "330", + "category": "building", + "aliasList": [], + "positionList": [["49.09630", "8.42593"]], + "url": null + }, { + "id": "292", + "title": "332", + "category": "building", + "aliasList": [], + "positionList": [["49.09616", "8.42633"]], + "url": null + }, { + "id": "293", + "title": "333", + "category": "building", + "aliasList": [], + "positionList": [["49.09600", "8.42612"]], + "url": null + }, { + "id": "294", + "title": "341", + "category": "building", + "aliasList": [], + "positionList": [["49.09673", "8.43008"]], + "url": null + }, { + "id": "295", + "title": "343", + "category": "building", + "aliasList": [], + "positionList": [["49.09657", "8.42936"]], + "url": null + }, { + "id": "296", + "title": "345", + "category": "building", + "aliasList": [], + "positionList": [["49.09624", "8.42980"]], + "url": null + }, { + "id": "297", + "title": "348", + "category": "building", + "aliasList": [], + "positionList": [["49.09675", "8.42863"]], + "url": null + }, { + "id": "298", + "title": "349", + "category": "building", + "aliasList": [], + "positionList": [["49.09694", "8.42919"]], + "url": null + }, { + "id": "299", + "title": "351", + "category": "building", + "aliasList": [], + "positionList": [["49.09730", "8.42677"]], + "url": null + }, { + "id": "300", + "title": "352", + "category": "building", + "aliasList": [], + "positionList": [["49.09704", "8.42750"]], + "url": null + }, { + "id": "301", + "title": "353", + "category": "building", + "aliasList": [], + "positionList": [["49.09673", "8.42636"]], + "url": null + }, { + "id": "302", + "title": "400", + "category": "building", + "aliasList": [], + "positionList": [["49.09290", "8.43620"]], + "url": null + }, { + "id": "303", + "title": "401", + "category": "building", + "aliasList": [], + "positionList": [["49.09415", "8.43074"]], + "url": null + }, { + "id": "304", + "title": "402", + "category": "building", + "aliasList": [], + "positionList": [["49.09439", "8.43120"]], + "url": null + }, { + "id": "305", + "title": "403", + "category": "building", + "aliasList": [], + "positionList": [["49.09412", "8.43185"]], + "url": null + }, { + "id": "306", + "title": "404", + "category": "building", + "aliasList": [], + "positionList": [["49.09377", "8.43215"]], + "url": null + }, { + "id": "307", + "title": "405", + "category": "building", + "aliasList": [], + "positionList": [["49.09352", "8.43211"]], + "url": null + }, { + "id": "308", + "title": "406", + "category": "building", + "aliasList": [], + "positionList": [["49.09403", "8.43307"]], + "url": null + }, { + "id": "309", + "title": "407", + "category": "building", + "aliasList": [], + "positionList": [["49.09374", "8.43178"]], + "url": null + }, { + "id": "310", + "title": "408", + "category": "building", + "aliasList": [], + "positionList": [["49.09394", "8.43248"]], + "url": null + }, { + "id": "311", + "title": "409", + "category": "building", + "aliasList": [], + "positionList": [["49.09408", "8.43340"]], + "url": null + }, { + "id": "312", + "title": "410", + "category": "building", + "aliasList": [], + "positionList": [["49.09364", "8.43377"]], + "url": null + }, { + "id": "313", + "title": "411", + "category": "building", + "aliasList": [], + "positionList": [["49.09412", "8.43251"]], + "url": null + }, { + "id": "314", + "title": "412", + "category": "building", + "aliasList": [], + "positionList": [["49.09288", "8.43591"]], + "url": null + }, { + "id": "315", + "title": "413", + "category": "building", + "aliasList": [], + "positionList": [["49.09306", "8.43534"]], + "url": null + }, { + "id": "316", + "title": "414", + "category": "building", + "aliasList": [], + "positionList": [["49.09348", "8.43479"]], + "url": null + }, { + "id": "317", + "title": "415", + "category": "building", + "aliasList": [], + "positionList": [["49.09339", "8.43537"]], + "url": null + }, { + "id": "318", + "title": "416", + "category": "building", + "aliasList": [], + "positionList": [["49.09327", "8.43397"]], + "url": null + }, { + "id": "319", + "title": "417", + "category": "building", + "aliasList": [], + "positionList": [["49.09350", "8.43441"]], + "url": null + }, { + "id": "320", + "title": "418", + "category": "building", + "aliasList": [], + "positionList": [["49.09388", "8.43420"]], + "url": null + }, { + "id": "321", + "title": "419", + "category": "building", + "aliasList": [], + "positionList": [["49.09378", "8.43489"]], + "url": null + }, { + "id": "322", + "title": "420", + "category": "building", + "aliasList": [], + "positionList": [["49.09359", "8.43577"]], + "url": null + }, { + "id": "323", + "title": "421", + "category": "building", + "aliasList": [], + "positionList": [["49.09502", "8.43111"]], + "url": null + }, { + "id": "324", + "title": "422", + "category": "building", + "aliasList": [], + "positionList": [["49.09490", "8.43163"]], + "url": null + }, { + "id": "325", + "title": "423", + "category": "building", + "aliasList": [], + "positionList": [["49.09498", "8.43216"]], + "url": null + }, { + "id": "326", + "title": "424", + "category": "building", + "aliasList": [], + "positionList": [["49.09477", "8.43271"]], + "url": null + }, { + "id": "327", + "title": "425", + "category": "building", + "aliasList": [], + "positionList": [["49.09482", "8.43335"]], + "url": null + }, { + "id": "328", + "title": "426", + "category": "building", + "aliasList": [], + "positionList": [["49.09517", "8.43325"]], + "url": null + }, { + "id": "329", + "title": "427", + "category": "building", + "aliasList": [], + "positionList": [["49.09493", "8.43261"]], + "url": null + }, { + "id": "330", + "title": "428", + "category": "building", + "aliasList": [], + "positionList": [["49.09528", "8.43230"]], + "url": null + }, { + "id": "331", + "title": "429", + "category": "building", + "aliasList": [], + "positionList": [["49.09533", "8.43181"]], + "url": null + }, { + "id": "332", + "title": "430", + "category": "building", + "aliasList": [], + "positionList": [["49.09375", "8.43128"]], + "url": null + }, { + "id": "333", + "title": "432", + "category": "building", + "aliasList": [], + "positionList": [["49.09434", "8.43436"]], + "url": null + }, { + "id": "334", + "title": "433", + "category": "building", + "aliasList": [], + "positionList": [["49.09462", "8.43414"]], + "url": null + }, { + "id": "335", + "title": "434", + "category": "building", + "aliasList": [], + "positionList": [["49.09520", "8.43298"]], + "url": null + }, { + "id": "336", + "title": "435", + "category": "building", + "aliasList": [], + "positionList": [["49.09391", "8.43650"]], + "url": null + }, { + "id": "337", + "title": "436", + "category": "building", + "aliasList": [], + "positionList": [["49.09485", "8.43473"]], + "url": null + }, { + "id": "338", + "title": "438", + "category": "building", + "aliasList": [], + "positionList": [["49.09457", "8.43518"]], + "url": null + }, { + "id": "339", + "title": "439", + "category": "building", + "aliasList": [], + "positionList": [["49.09409", "8.43590"]], + "url": null + }, { + "id": "340", + "title": "441", + "category": "building", + "aliasList": [], + "positionList": [["49.09590", "8.43195"]], + "url": null + }, { + "id": "341", + "title": "442", + "category": "building", + "aliasList": [], + "positionList": [["49.09589", "8.43237"]], + "url": null + }, { + "id": "342", + "title": "443", + "category": "building", + "aliasList": [], + "positionList": [["49.09505", "8.43385"]], + "url": null + }, { + "id": "343", + "title": "444", + "category": "building", + "aliasList": [], + "positionList": [["49.09421", "8.43485"]], + "url": null + }, { + "id": "344", + "title": "445", + "category": "building", + "aliasList": [], + "positionList": [["49.09575", "8.43372"]], + "url": null + }, { + "id": "345", + "title": "446", + "category": "building", + "aliasList": [], + "positionList": [["49.09434", "8.43605"]], + "url": null + }, { + "id": "346", + "title": "447", + "category": "building", + "aliasList": [], + "positionList": [["49.09502", "8.43385"]], + "url": null + }, { + "id": "347", + "title": "448", + "category": "building", + "aliasList": [], + "positionList": [["49.09452", "8.43666"]], + "url": null + }, { + "id": "348", + "title": "450", + "category": "building", + "aliasList": [], + "positionList": [["49.09521", "8.43489"]], + "url": null + }, { + "id": "349", + "title": "451", + "category": "building", + "aliasList": [], + "positionList": [["49.09554", "8.43457"]], + "url": null + }, { + "id": "350", + "title": "452", + "category": "building", + "aliasList": [], + "positionList": [["49.09534", "8.43568"]], + "url": null + }, { + "id": "351", + "title": "453", + "category": "building", + "aliasList": [], + "positionList": [["49.09533", "8.43658"]], + "url": null + }, { + "id": "352", + "title": "454", + "category": "building", + "aliasList": [], + "positionList": [["49.09511", "8.43628"]], + "url": null + }, { + "id": "353", + "title": "456", + "category": "building", + "aliasList": [], + "positionList": [["49.09536", "8.43621"]], + "url": null + }, { + "id": "354", + "title": "458", + "category": "building", + "aliasList": [], + "positionList": [["49.09517", "8.43674"]], + "url": null + }, { + "id": "355", + "title": "459", + "category": "building", + "aliasList": [], + "positionList": [["49.09500", "8.43640"]], + "url": null + }, { + "id": "356", + "title": "460", + "category": "building", + "aliasList": [], + "positionList": [["49.09582", "8.43599"]], + "url": null + }, { + "id": "357", + "title": "461", + "category": "building", + "aliasList": [], + "positionList": [["49.09568", "8.43643"]], + "url": null + }, { + "id": "358", + "title": "462", + "category": "building", + "aliasList": [], + "positionList": [["49.09582", "8.43635"]], + "url": null + }, { + "id": "359", + "title": "464", + "category": "building", + "aliasList": [], + "positionList": [["49.09553", "8.43643"]], + "url": null + }, { + "id": "360", + "title": "500", + "category": "building", + "aliasList": [], + "positionList": [["49.09820", "8.42690"]], + "url": null + }, { + "id": "361", + "title": "510", + "category": "building", + "aliasList": [], + "positionList": [["49.09796", "8.42789"]], + "url": null + }, { + "id": "362", + "title": "511", + "category": "building", + "aliasList": [], + "positionList": [["49.09769", "8.42716"]], + "url": null + }, { + "id": "363", + "title": "512", + "category": "building", + "aliasList": [], + "positionList": [["49.09858", "8.42767"]], + "url": null + }, { + "id": "364", + "title": "513", + "category": "building", + "aliasList": [], + "positionList": [["49.09889", "8.42735"]], + "url": null + }, { + "id": "365", + "title": "514", + "category": "building", + "aliasList": [], + "positionList": [["49.09904", "8.42685"]], + "url": null + }, { + "id": "366", + "title": "515", + "category": "building", + "aliasList": [], + "positionList": [["49.09864", "8.42673"]], + "url": null + }, { + "id": "367", + "title": "516", + "category": "building", + "aliasList": [], + "positionList": [["49.09874", "8.42807"]], + "url": null + }, { + "id": "368", + "title": "517", + "category": "building", + "aliasList": [], + "positionList": [["49.09833", "8.42662"]], + "url": null + }, { + "id": "369", + "title": "518", + "category": "building", + "aliasList": [], + "positionList": [["49.09792", "8.42698"]], + "url": null + }, { + "id": "370", + "title": "519", + "category": "building", + "aliasList": [], + "positionList": [["49.09772", "8.42894"]], + "url": null + }, { + "id": "371", + "title": "521", + "category": "building", + "aliasList": [], + "positionList": [["49.09839", "8.43092"]], + "url": null + }, { + "id": "372", + "title": "522", + "category": "building", + "aliasList": [], + "positionList": [["49.09873", "8.43113"]], + "url": null + }, { + "id": "373", + "title": "523", + "category": "building", + "aliasList": [], + "positionList": [["49.09885", "8.43061"]], + "url": null + }, { + "id": "374", + "title": "526", + "category": "building", + "aliasList": [], + "positionList": [["49.09779", "8.43037"]], + "url": null + }, { + "id": "375", + "title": "527", + "category": "building", + "aliasList": [], + "positionList": [["49.09864", "8.43008"]], + "url": null + }, { + "id": "376", + "title": "528", + "category": "building", + "aliasList": [], + "positionList": [["49.09837", "8.42898"]], + "url": null + }, { + "id": "377", + "title": "532", + "category": "building", + "aliasList": [], + "positionList": [["49.09899", "8.42796"]], + "url": null + }, { + "id": "378", + "title": "535", + "category": "building", + "aliasList": [], + "positionList": [["49.09947", "8.42821"]], + "url": null + }, { + "id": "379", + "title": "536", + "category": "building", + "aliasList": [], + "positionList": [["49.09970", "8.42721"]], + "url": null + }, { + "id": "380", + "title": "541", + "category": "building", + "aliasList": [], + "positionList": [["49.09932", "8.43138"]], + "url": null + }, { + "id": "381", + "title": "542", + "category": "building", + "aliasList": [], + "positionList": [["49.09936", "8.43100"]], + "url": null + }, { + "id": "382", + "title": "544", + "category": "building", + "aliasList": [], + "positionList": [["49.09986", "8.43156"]], + "url": null + }, { + "id": "383", + "title": "545", + "category": "building", + "aliasList": [], + "positionList": [["49.09978", "8.43055"]], + "url": null + }, { + "id": "384", + "title": "546", + "category": "building", + "aliasList": [], + "positionList": [["49.10014", "8.43101"]], + "url": null + }, { + "id": "385", + "title": "547", + "category": "building", + "aliasList": [], + "positionList": [["49.10026", "8.43040"]], + "url": null + }, { + "id": "386", + "title": "548", + "category": "building", + "aliasList": [], + "positionList": [["49.10065", "8.43067"]], + "url": null + }, { + "id": "387", + "title": "549", + "category": "building", + "aliasList": [], + "positionList": [["49.09959", "8.43003"]], + "url": null + }, { + "id": "388", + "title": "551", + "category": "building", + "aliasList": [], + "positionList": [["49.09972", "8.42927"]], + "url": null + }, { + "id": "389", + "title": "553", + "category": "building", + "aliasList": [], + "positionList": [["49.10038", "8.42969"]], + "url": null + }, { + "id": "390", + "title": "556", + "category": "building", + "aliasList": [], + "positionList": [["49.10088", "8.43074"]], + "url": null + }, { + "id": "391", + "title": "559", + "category": "building", + "aliasList": [], + "positionList": [["49.10104", "8.42978"]], + "url": null + }, { + "id": "392", + "title": "560", + "category": "building", + "aliasList": [], + "positionList": [["49.10098", "8.43025"]], + "url": null + }, { + "id": "393", + "title": "561", + "category": "building", + "aliasList": [], + "positionList": [["49.10005", "8.42877"]], + "url": null + }, { + "id": "394", + "title": "562", + "category": "building", + "aliasList": [], + "positionList": [["49.10081", "8.42957"]], + "url": null + }, { + "id": "395", + "title": "563", + "category": "building", + "aliasList": [], + "positionList": [["49.10012", "8.42834"]], + "url": null + }, { + "id": "396", + "title": "570", + "category": "building", + "aliasList": [], + "positionList": [["49.10042", "8.42868"]], + "url": null + }, { + "id": "397", + "title": "571", + "category": "building", + "aliasList": [], + "positionList": [["49.10083", "8.42881"]], + "url": null + }, { + "id": "398", + "title": "572", + "category": "building", + "aliasList": [], + "positionList": [["49.10052", "8.42835"]], + "url": null + }, { + "id": "399", + "title": "573", + "category": "building", + "aliasList": [], + "positionList": [["49.10057", "8.42793"]], + "url": null + }, { + "id": "400", + "title": "574", + "category": "building", + "aliasList": [], + "positionList": [["49.10087", "8.42806"]], + "url": null + }, { + "id": "401", + "title": "575", + "category": "building", + "aliasList": [], + "positionList": [["49.10114", "8.42769"]], + "url": null + }, { + "id": "402", + "title": "576", + "category": "building", + "aliasList": [], + "positionList": [["49.10021", "8.42934"]], + "url": null + }, { + "id": "403", + "title": "577", + "category": "building", + "aliasList": [], + "positionList": [["49.10063", "8.42949"]], + "url": null + }, { + "id": "404", + "title": "580", + "category": "building", + "aliasList": [], + "positionList": [["49.09953", "8.43034"]], + "url": null + }, { + "id": "405", + "title": "581", + "category": "building", + "aliasList": [], + "positionList": [["49.09942", "8.43029"]], + "url": null + }, { + "id": "406", + "title": "601", + "category": "building", + "aliasList": [], + "positionList": [["49.09684", "8.43233"]], + "url": null + }, { + "id": "407", + "title": "602", + "category": "building", + "aliasList": [], + "positionList": [["49.09674", "8.43296"]], + "url": null + }, { + "id": "408", + "title": "603", + "category": "building", + "aliasList": [], + "positionList": [["49.09685", "8.43333"]], + "url": null + }, { + "id": "409", + "title": "604", + "category": "building", + "aliasList": [], + "positionList": [["49.09653", "8.43412"]], + "url": null + }, { + "id": "410", + "title": "605", + "category": "building", + "aliasList": [], + "positionList": [["49.09716", "8.43201"]], + "url": null + }, { + "id": "411", + "title": "606", + "category": "building", + "aliasList": [], + "positionList": [["49.09729", "8.43239"]], + "url": null + }, { + "id": "412", + "title": "607", + "category": "building", + "aliasList": [], + "positionList": [["49.09718", "8.43305"]], + "url": null + }, { + "id": "413", + "title": "608", + "category": "building", + "aliasList": [], + "positionList": [["49.09702", "8.43454"]], + "url": null + }, { + "id": "414", + "title": "611", + "category": "building", + "aliasList": [], + "positionList": [["49.09838", "8.43287"]], + "url": null + }, { + "id": "415", + "title": "614", + "category": "building", + "aliasList": [], + "positionList": [["49.09870", "8.43206"]], + "url": null + }, { + "id": "416", + "title": "615", + "category": "building", + "aliasList": [], + "positionList": [["49.09859", "8.43319"]], + "url": null + }, { + "id": "417", + "title": "618", + "category": "building", + "aliasList": [], + "positionList": [["49.09805", "8.43475"]], + "url": null + }, { + "id": "418", + "title": "620", + "category": "building", + "aliasList": [], + "positionList": [["49.09706", "8.43674"]], + "url": null + }, { + "id": "419", + "title": "622", + "category": "building", + "aliasList": [], + "positionList": [["49.09685", "8.43675"]], + "url": null + }, { + "id": "420", + "title": "629", + "category": "building", + "aliasList": [], + "positionList": [["49.09719", "8.43553"]], + "url": null + }, { + "id": "421", + "title": "630", + "category": "building", + "aliasList": [], + "positionList": [["49.09691", "8.43555"]], + "url": null + }, { + "id": "422", + "title": "631", + "category": "building", + "aliasList": [], + "positionList": [["49.09646", "8.43629"]], + "url": null + }, { + "id": "423", + "title": "633", + "category": "building", + "aliasList": [], + "positionList": [["49.09678", "8.43503"]], + "url": null + }, { + "id": "424", + "title": "640", + "category": "building", + "aliasList": [], + "positionList": [["49.09787", "8.43300"]], + "url": null + }, { + "id": "425", + "title": "648", + "category": "building", + "aliasList": [], + "positionList": [["49.10083", "8.43467"]], + "url": null + }, { + "id": "426", + "title": "650", + "category": "building", + "aliasList": [], + "positionList": [["49.09833", "8.43515"]], + "url": null + }, { + "id": "427", + "title": "660", + "category": "building", + "aliasList": [], + "positionList": [["49.09899", "8.43461"]], + "url": null + }, { + "id": "428", + "title": "663", + "category": "building", + "aliasList": [], + "positionList": [["49.09892", "8.43519"]], + "url": null + }, { + "id": "429", + "title": "670", + "category": "building", + "aliasList": [], + "positionList": [["49.09945", "8.43485"]], + "url": null + }, { + "id": "430", + "title": "679", + "category": "building", + "aliasList": [], + "positionList": [["49.10070", "8.43372"]], + "url": null + }, { + "id": "431", + "title": "681", + "category": "building", + "aliasList": [], + "positionList": [["49.10050", "8.43398"]], + "url": null + }, { + "id": "432", + "title": "682", + "category": "building", + "aliasList": [], + "positionList": [["49.10022", "8.43385"]], + "url": null + }, { + "id": "433", + "title": "686", + "category": "building", + "aliasList": [], + "positionList": [["49.10120", "8.43414"]], + "url": null + }, { + "id": "434", + "title": "688", + "category": "building", + "aliasList": [], + "positionList": [["49.10080", "8.43652"]], + "url": null + }, { + "id": "435", + "title": "689", + "category": "building", + "aliasList": [], + "positionList": [["49.10069", "8.43632"]], + "url": null + }, { + "id": "436", + "title": "690", + "category": "building", + "aliasList": [], + "positionList": [["49.10011", "8.43600"]], + "url": null + }, { + "id": "437", + "title": "691", + "category": "building", + "aliasList": [], + "positionList": [["49.10021", "8.43523"]], + "url": null + }, { + "id": "438", + "title": "692", + "category": "building", + "aliasList": [], + "positionList": [["49.09967", "8.43563"]], + "url": null + }, { + "id": "439", + "title": "693", + "category": "building", + "aliasList": [], + "positionList": [["49.10050", "8.43593"]], + "url": null + }, { + "id": "440", + "title": "695", + "category": "building", + "aliasList": [], + "positionList": [["49.09993", "8.43350"]], + "url": null + }, { + "id": "441", + "title": "696", + "category": "building", + "aliasList": [], + "positionList": [["49.09970", "8.43405"]], + "url": null + }, { + "id": "442", + "title": "701", + "category": "building", + "aliasList": [], + "positionList": [["49.10091", "8.43171"]], + "url": null + }, { + "id": "443", + "title": "702", + "category": "building", + "aliasList": [], + "positionList": [["49.10141", "8.43149"]], + "url": null + }, { + "id": "444", + "title": "704", + "category": "building", + "aliasList": [], + "positionList": [["49.10151", "8.43181"]], + "url": null + }, { + "id": "445", + "title": "705", + "category": "building", + "aliasList": [], + "positionList": [["49.10149", "8.43237"]], + "url": null + }, { + "id": "446", + "title": "706", + "category": "building", + "aliasList": [], + "positionList": [["49.10156", "8.43203"]], + "url": null + }, { + "id": "447", + "title": "707", + "category": "building", + "aliasList": [], + "positionList": [["49.10174", "8.43143"]], + "url": null + }, { + "id": "448", + "title": "708", + "category": "building", + "aliasList": [], + "positionList": [["49.10097", "8.43265"]], + "url": null + }, { + "id": "449", + "title": "712", + "category": "building", + "aliasList": [], + "positionList": [["49.10182", "8.42906"]], + "url": null + }, { + "id": "450", + "title": "713", + "category": "building", + "aliasList": [], + "positionList": [["49.10128", "8.43000"]], + "url": null + }, { + "id": "451", + "title": "714", + "category": "building", + "aliasList": [], + "positionList": [["49.10151", "8.42858"]], + "url": null + }, { + "id": "452", + "title": "715", + "category": "building", + "aliasList": [], + "positionList": [["49.10211", "8.42885"]], + "url": null + }, { + "id": "453", + "title": "716", + "category": "building", + "aliasList": [], + "positionList": [["49.10223", "8.42905"]], + "url": null + }, { + "id": "454", + "title": "717", + "category": "building", + "aliasList": [], + "positionList": [["49.10170", "8.43084"]], + "url": null + }, { + "id": "455", + "title": "718", + "category": "building", + "aliasList": [], + "positionList": [["49.10253", "8.42817"]], + "url": null + }, { + "id": "456", + "title": "719", + "category": "building", + "aliasList": [], + "positionList": [["49.10121", "8.43084"]], + "url": null + }, { + "id": "457", + "title": "721", + "category": "building", + "aliasList": [], + "positionList": [["49.10281", "8.43261"]], + "url": null + }, { + "id": "458", + "title": "723", + "category": "building", + "aliasList": [], + "positionList": [["49.10269", "8.43175"]], + "url": null + }, { + "id": "459", + "title": "724", + "category": "building", + "aliasList": [], + "positionList": [["49.10293", "8.43197"]], + "url": null + }, { + "id": "460", + "title": "725", + "category": "building", + "aliasList": [], + "positionList": [["49.10298", "8.43322"]], + "url": null + }, { + "id": "461", + "title": "726", + "category": "building", + "aliasList": [], + "positionList": [["49.10227", "8.43219"]], + "url": null + }, { + "id": "462", + "title": "727", + "category": "building", + "aliasList": [], + "positionList": [["49.10222", "8.43292"]], + "url": null + }, { + "id": "463", + "title": "729", + "category": "building", + "aliasList": [], + "positionList": [["49.10265", "8.43313"]], + "url": null + }, { + "id": "464", + "title": "730", + "category": "building", + "aliasList": [], + "positionList": [["49.10253", "8.43335"]], + "url": null + }, { + "id": "465", + "title": "732", + "category": "building", + "aliasList": [], + "positionList": [["49.10215", "8.43241"]], + "url": null + }, { + "id": "466", + "title": "733", + "category": "building", + "aliasList": [], + "positionList": [["49.10325", "8.43217"]], + "url": null + }, { + "id": "467", + "title": "736", + "category": "building", + "aliasList": [], + "positionList": [["49.10199", "8.43207"]], + "url": null + }, { + "id": "468", + "title": "739", + "category": "building", + "aliasList": [], + "positionList": [["49.10336", "8.43076"]], + "url": null + }, { + "id": "469", + "title": "740", + "category": "building", + "aliasList": [], + "positionList": [["49.10241", "8.43079"]], + "url": null + }, { + "id": "470", + "title": "741", + "category": "building", + "aliasList": [], + "positionList": [["49.10343", "8.42945"]], + "url": null + }, { + "id": "471", + "title": "742", + "category": "building", + "aliasList": [], + "positionList": [["49.10333", "8.42982"]], + "url": null + }, { + "id": "472", + "title": "744", + "category": "building", + "aliasList": [], + "positionList": [["49.10307", "8.42952"]], + "url": null + }, { + "id": "473", + "title": "745", + "category": "building", + "aliasList": [], + "positionList": [["49.10317", "8.42991"]], + "url": null + }, { + "id": "474", + "title": "752", + "category": "building", + "aliasList": [], + "positionList": [["49.10402", "8.42868"]], + "url": null + }, { + "id": "475", + "title": "754", + "category": "building", + "aliasList": [], + "positionList": [["49.10291", "8.42841"]], + "url": null + }, { + "id": "476", + "title": "755", + "category": "building", + "aliasList": [], + "positionList": [["49.10281", "8.42889"]], + "url": null + }, { + "id": "477", + "title": "757", + "category": "building", + "aliasList": [], + "positionList": [["49.10365", "8.42979"]], + "url": null + }, { + "id": "478", + "title": "758", + "category": "building", + "aliasList": [], + "positionList": [["49.10286", "8.42983"]], + "url": null + }, { + "id": "479", + "title": "760", + "category": "building", + "aliasList": [], + "positionList": [["49.10358", "8.42899"]], + "url": null + }, { + "id": "480", + "title": "768", + "category": "building", + "aliasList": [], + "positionList": [["49.10355", "8.42996"]], + "url": null + }, { + "id": "481", + "title": "769", + "category": "building", + "aliasList": [], + "positionList": [["49.10337", "8.43009"]], + "url": null + }, { + "id": "482", + "title": "801", + "category": "building", + "aliasList": [], + "positionList": [["49.10251", "8.43543"]], + "url": null + }, { + "id": "483", + "title": "802", + "category": "building", + "aliasList": [], + "positionList": [["49.10227", "8.43649"]], + "url": null + }, { + "id": "484", + "title": "803", + "category": "building", + "aliasList": [], + "positionList": [["49.10288", "8.43598"]], + "url": null + }, { + "id": "485", + "title": "804", + "category": "building", + "aliasList": [], + "positionList": [["49.10289", "8.43672"]], + "url": null + }, { + "id": "486", + "title": "805", + "category": "building", + "aliasList": [], + "positionList": [["49.10335", "8.43573"]], + "url": null + }, { + "id": "487", + "title": "806", + "category": "building", + "aliasList": [], + "positionList": [["49.10340", "8.43683"]], + "url": null + }, { + "id": "488", + "title": "807", + "category": "building", + "aliasList": [], + "positionList": [["49.10416", "8.43618"]], + "url": null + }, { + "id": "489", + "title": "808", + "category": "building", + "aliasList": [], + "positionList": [["49.10307", "8.43500"]], + "url": null + }, { + "id": "490", + "title": "809", + "category": "building", + "aliasList": [], + "positionList": [["49.10394", "8.43490"]], + "url": null + }, { + "id": "491", + "title": "901", + "category": "building", + "aliasList": [], + "positionList": [["49.10423", "8.43250"]], + "url": null + }, { + "id": "492", + "title": "902", + "category": "building", + "aliasList": [], + "positionList": [["49.10427", "8.43210"]], + "url": null + }, { + "id": "493", + "title": "903", + "category": "building", + "aliasList": [], + "positionList": [["49.10443", "8.43258"]], + "url": null + }, { + "id": "494", + "title": "904", + "category": "building", + "aliasList": [], + "positionList": [["49.10456", "8.43254"]], + "url": null + }, { + "id": "495", + "title": "905", + "category": "building", + "aliasList": [], + "positionList": [["49.10475", "8.43260"]], + "url": null + }, { + "id": "496", + "title": "907", + "category": "building", + "aliasList": [], + "positionList": [["49.10483", "8.43132"]], + "url": null + }, { + "id": "497", + "title": "908", + "category": "building", + "aliasList": [], + "positionList": [["49.10494", "8.43104"]], + "url": null + }, { + "id": "498", + "title": "910", + "category": "building", + "aliasList": [], + "positionList": [["49.10520", "8.43311"]], + "url": null + }, { + "id": "499", + "title": "911", + "category": "building", + "aliasList": [], + "positionList": [["49.10482", "8.43337"]], + "url": null + }, { + "id": "500", + "title": "912", + "category": "building", + "aliasList": [], + "positionList": [["49.10470", "8.43335"]], + "url": null + }, { + "id": "501", + "title": "913", + "category": "building", + "aliasList": [], + "positionList": [["49.10452", "8.43357"]], + "url": null + }, { + "id": "502", + "title": "914", + "category": "building", + "aliasList": [], + "positionList": [["49.10442", "8.43315"]], + "url": null + }, { + "id": "503", + "title": "915", + "category": "building", + "aliasList": [], + "positionList": [["49.10407", "8.43320"]], + "url": null + }, { + "id": "504", + "title": "916", + "category": "building", + "aliasList": [], + "positionList": [["49.10402", "8.43287"]], + "url": null + }, { + "id": "505", + "title": "917", + "category": "building", + "aliasList": [], + "positionList": [["49.10381", "8.43260"]], + "url": null + }, { + "id": "506", + "title": "918", + "category": "building", + "aliasList": [], + "positionList": [["49.10373", "8.43298"]], + "url": null + }, { + "id": "507", + "title": "920", + "category": "building", + "aliasList": [], + "positionList": [["49.10424", "8.43141"]], + "url": null + }, { + "id": "508", + "title": "935", + "category": "building", + "aliasList": [], + "positionList": [["49.10416", "8.42909"]], + "url": null + }, { + "id": "509", + "title": "937", + "category": "building", + "aliasList": [], + "positionList": [["49.10299", "8.43101"]], + "url": null + }, { + "id": "510", + "title": "9607", + "category": "building", + "aliasList": [], + "positionList": [["49.09860", "8.42964"]], + "url": null + }, { + "id": "511", + "title": "9608", + "category": "building", + "aliasList": [], + "positionList": [["49.09908", "8.42986"]], + "url": null + }, { + "id": "512", + "title": "9611", + "category": "building", + "aliasList": [], + "positionList": [["49.09727", "8.43456"]], + "url": null + }, { + "id": "513", + "title": "9612", + "category": "building", + "aliasList": [], + "positionList": [["49.09726", "8.43480"]], + "url": null + }, { + "id": "514", + "title": "9627", + "category": "building", + "aliasList": [], + "positionList": [["49.09516", "8.43268"]], + "url": null + }, { + "id": "515", + "title": "9637", + "category": "building", + "aliasList": [], + "positionList": [["49.09913", "8.42732"]], + "url": null + }, { + "id": "516", + "title": "9642", + "category": "building", + "aliasList": [], + "positionList": [["49.09641", "8.42843"]], + "url": null + }, { + "id": "517", + "title": "9644", + "category": "building", + "aliasList": [], + "positionList": [["49.09613", "8.42701"]], + "url": null + }, { + "id": "518", + "title": "9645", + "category": "building", + "aliasList": [], + "positionList": [["49.09925", "8.42758"]], + "url": null + }, { + "id": "519", + "title": "9652", + "category": "building", + "aliasList": [], + "positionList": [["49.09540", "8.43536"]], + "url": null + }, { + "id": "520", + "title": "9653", + "category": "building", + "aliasList": [], + "positionList": [["49.09515", "8.43509"]], + "url": null + }, { + "id": "521", + "title": "9657", + "category": "building", + "aliasList": [], + "positionList": [["49.09972", "8.42981"]], + "url": null + }, { + "id": "522", + "title": "9670", + "category": "building", + "aliasList": [], + "positionList": [["49.10268", "8.42953"]], + "url": null + }, { + "id": "523", + "title": "B524", + "category": "building", + "aliasList": [], + "positionList": [["49.09899", "8.42903"]], + "url": null + }, { + "id": "524", + "title": "223/1", + "category": "building", + "aliasList": [], + "positionList": [["49.09210", "8.42962"]], + "url": null + }, { + "id": "525", + "title": "919 A", + "category": "building", + "aliasList": [], + "positionList": [["49.10362", "8.43258"]], + "url": null + }, { + "id": "526", + "title": "B568", + "category": "building", + "aliasList": [], + "positionList": [["49.10068", "8.42836"]], + "url": null + }, { + "id": "527", + "title": "260/1", + "category": "building", + "aliasList": [], + "positionList": [["49.09245", "8.43414"]], + "url": null + }, { + "id": "528", + "title": "B934", + "category": "building", + "aliasList": [], + "positionList": [["49.10375", "8.43120"]], + "url": null + }, { + "id": "529", + "title": "B569", + "category": "building", + "aliasList": [], + "positionList": [["49.10062", "8.42849"]], + "url": null + }, { + "id": "530", + "title": "B254", + "category": "building", + "aliasList": [], + "positionList": [["49.09188", "8.43565"]], + "url": null + }, { + "id": "531", + "title": "B404", + "category": "building", + "aliasList": [], + "positionList": [["49.09404", "8.43218"]], + "url": null + }, { + "id": "532", + "title": "B402", + "category": "building", + "aliasList": [], + "positionList": [["49.09410", "8.43129"]], + "url": null + }, { + "id": "533", + "title": "9633 B", + "category": "building", + "aliasList": [], + "positionList": [["49.09333", "8.43613"]], + "url": null + }, { + "id": "534", + "title": "441/1", + "category": "building", + "aliasList": [], + "positionList": [["49.09644", "8.43172"]], + "url": null + }, { + "id": "535", + "title": "B131", + "category": "building", + "aliasList": [], + "positionList": [["49.09184", "8.42620"]], + "url": null + }, { + "id": "536", + "title": "919 B", + "category": "building", + "aliasList": [], + "positionList": [["49.10356", "8.43302"]], + "url": null + }, { + "id": "537", + "title": "B621", + "category": "building", + "aliasList": [], + "positionList": [["49.09701", "8.43633"]], + "url": null + }, { + "id": "538", + "title": "9633 A", + "category": "building", + "aliasList": [], + "positionList": [["49.09320", "8.43592"]], + "url": null + }, { + "id": "539", + "title": "B523", + "category": "building", + "aliasList": [], + "positionList": [["49.09903", "8.43074"]], + "url": null + }, { + "id": "540", + "title": "B252", + "category": "building", + "aliasList": [], + "positionList": [["49.09181", "8.43317"]], + "url": null + }, { + "id": "541", + "title": "406/2", + "category": "building", + "aliasList": [], + "positionList": [["49.09409", "8.43305"]], + "url": null + }, { + "id": "542", + "title": "401 A", + "category": "building", + "aliasList": [], + "positionList": [["49.09430", "8.43075"]], + "url": null + }, { + "id": "543", + "title": "Technische Thermodynamik und K\u00e4ltetechnik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01453", "8.41733"]], + "url": null + }, { + "id": "544", + "title": "Nanotechnologie (INT), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09786", "8.43289"]], + "url": "http://www.int.kit.edu" + }, { + "id": "545", + "title": "Prozessrechentechnik, Automation und Robotik (IPR), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01389", "8.41951"]], + "url": "http://rob.ipr.kit.edu" + }, { + "id": "546", + "title": "Kunst- und Baugeschichte (IKB), Institut", + "category": "institute", + "aliasList": [], + "positionList": [["49.01111", "8.41109"]], + "url": "http://www.arch.kit.edu/institute/ikb.php" + }, { + "id": "547", + "title": "Hydromechanik, Institut f\u00fcr (IFH)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01027", "8.41561"]], + "url": "http://www.ifh.kit.edu" + }, { + "id": "548", + "title": "Bodenmechanik und Felsmechanik (IBF) , Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01407", "8.41570"]], + "url": "http://ibf.webarchiv.kit.edu" + }, { + "id": "549", + "title": "Physikalische Chemie, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01206", "8.41444"]], + "url": "http://www.ipc.kit.edu" + }, { + "id": "550", + "title": "Deutsch-Franz\u00f6sisches Institut f\u00fcr Umweltforschung (DFIU)", + "category": "institute", + "aliasList": [], + "positionList": [["49.02144", "8.36683"]], + "url": "http://www.dfiu.kit.edu" + }, { + "id": "551", + "title": "Produktionstechnik (wbk), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01493", "8.41964"]], + "url": "http://www.wbk.kit.edu" + }, { + "id": "552", + "title": "Regelungs- und Steuerungssysteme, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01103", "8.41217"]], + "url": "http://www.irs.kit.edu/" + }, { + "id": "554", + "title": "Thermische Str\u00f6mungsmaschinen, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00990", "8.41322"], ["49.01253", "8.41661"]], + "url": "http://www.its.kit.edu" + }, { + "id": "555", + "title": "Funktionelle Grenzfl\u00e4chen (IFG), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09637", "8.42575"]], + "url": "http://www.ifg.kit.edu" + }, { + "id": "556", + "title": "Experimentelle Teilchenphysik (ETP), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01293", "8.41110"]], + "url": "http://www.etp.kit.edu/index.php" + }, { + "id": "557", + "title": "Institut f\u00fcr Biologische und Chemische Systeme (IBCS), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09496", "8.42757"]], + "url": "http://www.itg.kit.edu/" + }, { + "id": "558", + "title": "Engler-Bunte-Institut Bereich Verbrennungstechnik (EBI-VBT)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01400", "8.41489"]], + "url": "http://www.vbt.uni-karlsruhe.de" + }, { + "id": "559", + "title": "Technische Thermodynamik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00990", "8.41322"]], + "url": "http://www.itt.kit.edu" + }, { + "id": "560", + "title": "Biomedizinische Technik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01226", "8.41320"]], + "url": "http://www.ibt.kit.edu" + }, { + "id": "561", + "title": "Fahrzeugsystemtechnik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.02189", "8.42923"]], + "url": "http://www.fast.kit.edu" + }, { + "id": "562", + "title": "Mikrostrukturtechnik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09449", "8.42954"]], + "url": "http://www.imt.kit.edu" + }, { + "id": "563", + "title": "Geophysikalisches Institut (GPI)", + "category": "institute", + "aliasList": [], + "positionList": [["49.02109", "8.36599"]], + "url": "http://www.gpi.kit.edu" + }, { + "id": "565", + "title": "Programmstrukturen und Datenorganisation (IPD), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01389", "8.41951"]], + "url": "http://www.informatik.kit.edu/257.php" + }, { + "id": "567", + "title": "Angewandte Informatik und Formale Beschreibungsverfahren (AIFB), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00894", "8.40949"]], + "url": "http://www.aifb.kit.edu/web/Hauptseite" + }, { + "id": "568", + "title": "Analysis, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01125", "8.40903"]], + "url": "http://www.math.kit.edu/iana" + }, { + "id": "569", + "title": "Wasser und Gew\u00e4sserentwicklung, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01065", "8.41518"]], + "url": "http://www.iwg.kit.edu/" + }, { + "id": "570", + "title": "Meteorologie und Klimaforschung, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01293", "8.41110"]], + "url": "http://www.imk.kit.edu" + }, { + "id": "571", + "title": "Photonik und Quantenelektronik (IPQ), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01288", "8.40949"]], + "url": "http://www.ipq.kit.edu" + }, { + "id": "572", + "title": "Bio- und Lebensmitteltechnik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01415", "8.42662"]], + "url": "http://lvt.blt.kit.edu" + }, { + "id": "574", + "title": "Mechanische Verfahrenstechnik und Mechanik (MVM), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01413", "8.42077"]], + "url": "http://www.mvm.kit.edu" + }, { + "id": "576", + "title": "Baustatik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00951", "8.41695"]], + "url": "http://www.ibs.kit.edu" + }, { + "id": "577", + "title": "Anthropomatik und Robotik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01389", "8.41951"]], + "url": "http://www.informatik.kit.edu/1323.php" + }, { + "id": "578", + "title": "Geod\u00e4tisches Institut (GIK)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01111", "8.41109"]], + "url": "http://www.gik.kit.edu" + }, { + "id": "579", + "title": "Hochfrequenztechnik und Elektronik (IHE), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01288", "8.40949"]], + "url": "http://www.ihe.kit.edu/" + }, { + "id": "580", + "title": "Entwerfen, Kunst und Theorie (EKUT), Institut", + "category": "institute", + "aliasList": [], + "positionList": [["49.01111", "8.41109"]], + "url": "http://www.arch.kit.edu/institute/ekut.php" + }, { + "id": "581", + "title": "Technikzuk\u00fcnfte - Philosophie, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01257", "8.40664"], ["49.00948", "8.39325"]], + "url": "http://www.philosophie.kit.edu/" + }, { + "id": "582", + "title": "Karlsruhe Service Research Institute (KSRI)", + "category": "institute", + "aliasList": [], + "positionList": [["49.00914", "8.40940"]], + "url": "http://www.ksri.kit.edu/" + }, { + "id": "583", + "title": "Sport und Sportwissenschaft, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01579", "8.41638"]], + "url": "http://www.sport.kit.edu/" + }, { + "id": "584", + "title": "Theoretische Elektrotechnik und Systemoptimierung (ITE), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01226", "8.41320"]], + "url": "http://www.ite.kit.edu/" + }, { + "id": "585", + "title": "Angewandte Physik, Institut f\u00fcr (AP)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01293", "8.41110"]], + "url": "http://www.aph.kit.edu" + }, { + "id": "586", + "title": "Technik der Informationsverarbeitung (ITIV), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01288", "8.40949"]], + "url": "http://www.itiv.kit.edu/" + }, { + "id": "587", + "title": "Str\u00f6mungsmechanik (ISTM), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00937", "8.41428"]], + "url": "http://www.istm.kit.edu" + }, { + "id": "588", + "title": "Technische Physik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09373", "8.43394"]], + "url": "http://www.itep.kit.edu" + }, { + "id": "589", + "title": "Regionalwissenschaft (IfR) , Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00951", "8.41695"]], + "url": "http://www.ifr.kit.edu/" + }, { + "id": "590", + "title": "Mikroverfahrenstechnik (IMVT) , Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09714", "8.43186"]], + "url": "http://www.imvt.kit.edu" + }, { + "id": "591", + "title": "Stra\u00dfen- und Eisenbahnwesen, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01027", "8.41561"]], + "url": "http://www.ise.kit.edu/" + }, { + "id": "592", + "title": "Technologie und Management im Baubetrieb (TMB) , Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01413", "8.42077"]], + "url": "http://www.tmb.kit.edu" + }, { + "id": "593", + "title": "Biologische Grenzfl\u00e4chen (IBG), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09685", "8.43205"]], + "url": "http://www.ibg.kit.edu" + }, { + "id": "594", + "title": "Botanisches Institut", + "category": "institute", + "aliasList": [], + "positionList": [["49.01246", "8.41443"]], + "url": "http://www.botanik.kit.edu/" + }, { + "id": "595", + "title": "Bio- und Lebensmitteltechnik, Bereich IV: Molekulare Aufarbeitung von Bioprodukten , Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01547", "8.42037"]], + "url": "http://mab.blt.kit.edu" + }, { + "id": "596", + "title": "Theoretische Informatik (ITI), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01389", "8.41951"]], + "url": "http://www.informatik.kit.edu/259.php" + }, { + "id": "597", + "title": "Thermische Verfahrenstechnik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00990", "8.41322"]], + "url": "http://www.tvt.kit.edu/" + }, { + "id": "598", + "title": "Institut f\u00fcr Wirtschaftsinformatik und Marketing (IISM), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01210", "8.40808"]], + "url": "http://www.iism.kit.edu/" + }, { + "id": "599", + "title": "Algebra und Geometrie, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01104", "8.40909"]], + "url": "http://www.math.kit.edu/iag" + }, { + "id": "600", + "title": "Entwerfen von Stadt und Landschaft (IESL), Institut", + "category": "institute", + "aliasList": [], + "positionList": [["49.00951", "8.41695"]], + "url": "http://www.arch.kit.edu/institute/iesl.php" + }, { + "id": "601", + "title": "Finanzwirtschaft, Banken und Versicherungen (FBV), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01298", "8.37536"]], + "url": "http://www.fbv.kit.edu/" + }, { + "id": "604", + "title": "Lichttechnisches Institut (LTI)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01171", "8.41303"]], + "url": "http://www.lti.kit.edu" + }, { + "id": "605", + "title": "Berufsp\u00e4dagogik und Allgemeine P\u00e4dagogik (IBAP), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.02129", "8.36819"]], + "url": "http://www.ibap.kit.edu" + }, { + "id": "606", + "title": "Engler-Bunte-Institut, Bereich I, Chemische Energietr\u00e4ger - Brennstofftechnologie (EBI-CEB)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01400", "8.41489"]], + "url": "http://ceb.ebi.kit.edu" + }, { + "id": "607", + "title": "Angewandte Biowissenschaften (IAB), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01569", "8.41946"]], + "url": "http://www.iab.kit.edu/" + }, { + "id": "609", + "title": "Technikzuk\u00fcnfte - Geschichte, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00948", "8.39327"]], + "url": "http://www.geschichte.kit.edu/" + }, { + "id": "610", + "title": "Kernphysik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09435", "8.43073"]], + "url": "http://www.ikp.kit.edu" + }, { + "id": "611", + "title": "Telecooperation Office (TecO)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01304", "8.42419"]], + "url": null + }, { + "id": "612", + "title": "Automation und Angewandte Informatik (IAI), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09589", "8.43363"]], + "url": "https://www.iai.kit.edu/index.php" + }, { + "id": "613", + "title": "Informationsmanagement im Ingenieurwesen (IMI) , Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01242", "8.40811"]], + "url": "https://www.imi.kit.edu/" + }, { + "id": "614", + "title": "Thermische Energietechnik und Sicherheit (ITES), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09354", "8.43506"]], + "url": "http://www.iket.kit.edu" + }, { + "id": "615", + "title": "Interfakultatives Institut f\u00fcr Anwendungen der Informatik", + "category": "institute", + "aliasList": [], + "positionList": [["49.01293", "8.41110"]], + "url": "http://www.iiai.kit.edu/" + }, { + "id": "616", + "title": "Nachrichtentechnik , Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00904", "8.40535"]], + "url": "https://www.cel.kit.edu" + }, { + "id": "617", + "title": "Hochleistungsimpuls- und Mikrowellentechnik (IHM), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09505", "8.43078"]], + "url": "http://www.ihm.kit.edu" + }, { + "id": "618", + "title": "Zentrum f\u00fcr Angewandte Kulturwissenschaft und Studium Generale (ZAK)", + "category": "institute", + "aliasList": ["zak"], + "positionList": [["49.00517", "8.41177"]], + "url": "http://www.zak.kit.edu" + }, { + "id": "619", + "title": "Versuchsanstalt f\u00fcr Stahl, Holz und Steine", + "category": "institute", + "aliasList": [], + "positionList": [["49.00986", "8.41629"]], + "url": "http://stahl.vaka.kit.edu" + }, { + "id": "620", + "title": "Telematik (ITM), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01213", "8.40812"]], + "url": "https://telematics.tm.kit.edu" + }, { + "id": "621", + "title": "Technische Chemie (ITC), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09414", "8.43161"]], + "url": "http://www.itc.kit.edu" + }, { + "id": "622", + "title": "Katalyseforschung und -Technologie (IKFT), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.10259", "8.43291"]], + "url": "http://www.ikft.kit.edu/" + }, { + "id": "623", + "title": "Volkswirtschaftslehre, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00897", "8.41109"]], + "url": "http://www.econ.kit.edu/" + }, { + "id": "625", + "title": "Mess- und Regelungstechnik MRT, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01453", "8.41733"]], + "url": "http://www.mrt.kit.edu/" + }, { + "id": "626", + "title": "Industrielle Informationstechnik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.02179", "8.36620"]], + "url": "http://www.iiit.kit.edu" + }, { + "id": "628", + "title": "Geographie und Geo\u00f6kologie, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00951", "8.41695"]], + "url": "http://www.ifgg.kit.edu/" + }, { + "id": "629", + "title": "Physikalisches Institut (PI)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01293", "8.41110"]], + "url": "http://www.phi.kit.edu" + }, { + "id": "630", + "title": "Angewandte Geowissenschaften, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01547", "8.42037"]], + "url": "http://www.agw.kit.edu" + }, { + "id": "632", + "title": "Engler-Bunte-Institut, Bereich Wasserchemie", + "category": "institute", + "aliasList": [], + "positionList": [["49.01400", "8.41489"]], + "url": "https://wasserchemie.ebi.kit.edu" + }, { + "id": "633", + "title": "Mikro- und Nanoelektronische Systeme (IMS), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.02129", "8.36819"]], + "url": "http://www.ims.kit.edu" + }, { + "id": "637", + "title": "Angewandte und Numerische Mathematik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01104", "8.40903"]], + "url": "http://www.math.kit.edu/ianm" + }, { + "id": "638", + "title": "Mechanik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00958", "8.41548"]], + "url": "http://www.ifm.kit.edu" + }, { + "id": "639", + "title": "Zentrum f\u00fcr Angewandte Rechtswissenschaft (ZAR)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01386", "8.42415"]], + "url": "http://www.zar.kit.edu/" + }, { + "id": "640", + "title": "Massivbau und Baustofftechnologie, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01413", "8.42077"]], + "url": "http://www.imb.kit.edu" + }, { + "id": "641", + "title": "Neutronenphysik und Reaktortechnik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09846", "8.43076"]], + "url": "http://www.inr.kit.edu" + }, { + "id": "642", + "title": "Organische Chemie, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01296", "8.41423"]], + "url": "http://www.ioc.kit.edu/" + }, { + "id": "643", + "title": "Angewandte Thermofluidik (IATF), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01386", "8.42415"]], + "url": "https://www.ifrt.kit.edu" + }, { + "id": "644", + "title": "Nukleare Entsorgung (INE), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.10143", "8.42875"]], + "url": "http://www.ine.kit.edu" + }, { + "id": "645", + "title": "Theoretische Teilchenphysik (TTP), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01293", "8.41110"]], + "url": "http://www.ttp.kit.edu/" + }, { + "id": "646", + "title": "Theoretische Informatik, Arbeitsgruppe Kryptographie und Sicherheit (IKS), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01389", "8.41951"]], + "url": "http://crypto.iti.kit.edu/?id=iti-crypto&L=0" + }, { + "id": "647", + "title": "Arbeitswissenschaft und Betriebsorganisation, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01468", "8.41574"]], + "url": "http://www.ifab.kit.edu/" + }, { + "id": "648", + "title": "Theoretische Physik (TP), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01293", "8.42907"]], + "url": "https://www.itp.kit.edu/index.de.shtml" + }, { + "id": "649", + "title": "Festk\u00f6rperphysik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09462", "8.43306"]], + "url": "http://www.ifp.kit.edu/" + }, { + "id": "650", + "title": "Zoologisches Institut", + "category": "institute", + "aliasList": [], + "positionList": [["49.01237", "8.41451"]], + "url": "http://www.zoo.kit.edu" + }, { + "id": "651", + "title": "Chemische Verfahrenstechnik (CVT), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01187", "8.41442"]], + "url": null + }, { + "id": "652", + "title": "Stochastik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01105", "8.40903"]], + "url": "http://www.math.kit.edu/stoch/de" + }, { + "id": "653", + "title": "Prozessdatenverarbeitung und Elektronik (IPE), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09237", "8.43075"]], + "url": "http://www.ipe.kit.edu/" + }, { + "id": "654", + "title": "Photogrammetrie und Fernerkundung (IPF), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01111", "8.41109"]], + "url": "http://www.ipf.kit.edu/" + }, { + "id": "655", + "title": "Elektroenergiesysteme und Hochspannungstechnik , Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01193", "8.41234"]], + "url": "http://www.ieh.kit.edu/" + }, { + "id": "656", + "title": "Industriebetriebslehre und Industrielle Produktion (IIP), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.02144", "8.36683"]], + "url": "http://www.iip.kit.edu" + }, { + "id": "657", + "title": "Produktentwicklung (IPEK), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00937", "8.41428"]], + "url": "http://www.ipek.kit.edu" + }, { + "id": "658", + "title": "Technische Chemie und Polymerchemie, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01079", "8.41405"]], + "url": "http://www.itcp.kit.ed" + }, { + "id": "659", + "title": "Anorganische Chemie, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01140", "8.41380"]], + "url": "http://www.aoc.kit.edu" + }, { + "id": "661", + "title": "Theoretische Festk\u00f6rperphysik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01293", "8.41110"]], + "url": "http://www.tfp.kit.edu/" + }, { + "id": "663", + "title": "Entwerfen und Bautechnik, Institut", + "category": "institute", + "aliasList": [], + "positionList": [["49.01111", "8.41109"]], + "url": "http://www.arch.kit.edu/institute/ieb.php" + }, { + "id": "664", + "title": "Entrepreneurship, Technologie-Management und Innovation (EnTechnon), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00906", "8.41030"]], + "url": "https://www.entechnon.kit.edu" + }, { + "id": "666", + "title": "Technische Informatik (ITEC), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01389", "8.41951"]], + "url": "http://www.informatik.kit.edu/260.php" + }, { + "id": "667", + "title": "Elektrotechnisches Institut (ETI)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01078", "8.41282"]], + "url": "http://www.eti.kit.edu" + }, { + "id": "668", + "title": "Photonenforschung und Synchrotronstrahlung (IPS), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09599", "8.42888"]], + "url": "http://www.ips.kit.edu/index.php" + }, { + "id": "670", + "title": "Technische Mechanik, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00937", "8.41428"]], + "url": "http://www.itm.kit.edu" + }, { + "id": "671", + "title": "Verkehrswesen (IfV), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00958", "8.41548"]], + "url": "https://www.ifv.kit.edu/" + }, { + "id": "672", + "title": "Technikfolgenabsch\u00e4tzung und Systemanalyse (ITAS), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01119", "8.39534"]], + "url": "http://www.itas.kit.edu" + }, { + "id": "673", + "title": "F\u00f6rdertechnik und Logistiksysteme, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01491", "8.42104"]], + "url": "http://www.ifl.kit.edu/" + }, { + "id": "674", + "title": "Kolbenmaschinen, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.02186", "8.43111"]], + "url": "http://www.ifkm.kit.edu/" + }, { + "id": "675", + "title": "KITA nanos (Campus Nord)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09088", "8.43081"]], + "url": null + }, { + "id": "676", + "title": "Pressestelle (SEK)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00943", "8.41195"]], + "url": "http://www.sek.kit.edu/presse.php" + }, { + "id": "677", + "title": "Studienkolleg f\u00fcr ausl\u00e4ndische Studierende (STK)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01031", "8.41878"]], + "url": "http://www.stk.kit.edu" + }, { + "id": "678", + "title": "Forschungsf\u00f6rderung (FOR) CS", + "category": "facility", + "aliasList": ["for_cs"], + "positionList": [["49.00906", "8.41030"]], + "url": "http://www.for.kit.edu/" + }, { + "id": "683", + "title": "Forschungsf\u00f6rderung (FOR) CN", + "category": "facility", + "aliasList": ["for_cn"], + "positionList": [["49.09304", "8.42786"]], + "url": "http://www.for.kit.edu/" + }, { + "id": "685", + "title": "Gastdozentenhaus", + "category": "facility", + "aliasList": [], + "positionList": [["49.01306", "8.40840"]], + "url": "http://www.gdh.kit.edu/" + }, { + "id": "688", + "title": "AKK (Studierendenzentrum)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01112", "8.41487"]], + "url": null + }, { + "id": "689", + "title": "Sportanlagen", + "category": "facility", + "aliasList": [], + "positionList": [["49.01638", "8.41589"]], + "url": "http://www.sport.kit.edu/Institut_Sportstaetten.php" + }, { + "id": "690", + "title": "Medizinische Dienste (MED) CN", + "category": "facility", + "aliasList": [], + "positionList": [["49.09243", "8.42706"]], + "url": "http://www.med.kit.edu/" + }, { + "id": "691", + "title": "Karlsruhe House of Young Scientists (KHYS)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01307", "8.41603"]], + "url": "http://www.khys.kit.edu" + }, { + "id": "692", + "title": "Finanzmanagement (FIMA)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00941", "8.41206"]], + "url": "http://www.fima.kit.edu" + }, { + "id": "693", + "title": "KIT-Archiv", + "category": "facility", + "aliasList": [], + "positionList": [["49.00942", "8.41278"]], + "url": "http://www.archiv.kit.edu" + }, { + "id": "694", + "title": "Kantine (Campus Nord)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09319", "8.42913"]], + "url": "http://www.aserv.kit.edu/casino.php" + }, { + "id": "695", + "title": "Personalentwicklung und Berufliche Ausbildung (PEBA)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01304", "8.42419"]], + "url": "http://www.peba.kit.edu" + }, { + "id": "696", + "title": "Werkfeuerwehr", + "category": "facility", + "aliasList": [], + "positionList": [["49.09592", "8.42674"]], + "url": "http://www.aserv.kit.edu/56.php" + }, { + "id": "697", + "title": "KIT-Shuttle (Haltestelle Campus Nord, S\u00fcdtor)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09132", "8.42808"]], + "url": null + }, { + "id": "698", + "title": "Rechtsangelegenheiten (RECHT)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09304", "8.42786"]], + "url": "http://www.recht.kit.edu" + }, { + "id": "699", + "title": "Medizinische Dienste (MED) CS", + "category": "facility", + "aliasList": [], + "positionList": [["49.01191", "8.40927"]], + "url": null + }, { + "id": "700", + "title": "KIT-Shuttle (Haltestelle Campus Ost)", + "category": "facility", + "aliasList": [], + "positionList": [["49.02099", "8.43105"]], + "url": null + }, { + "id": "701", + "title": "Bibliothek (Campus Nord)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09464", "8.42830"]], + "url": "http://www.bibliothek.kit.edu" + }, { + "id": "703", + "title": "Fortbildungszentrum f\u00fcr Technik und Umwelt", + "category": "facility", + "aliasList": [], + "positionList": [["49.09137", "8.42730"]], + "url": "http://www.fortbildung.kit.edu/" + }, { + "id": "704", + "title": "Studierendenservice", + "category": "facility", + "aliasList": [], + "positionList": [["49.00976", "8.41180"]], + "url": "http://www.sle.kit.edu" + }, { + "id": "705", + "title": "Personalservice (PSE) CN", + "category": "facility", + "aliasList": [], + "positionList": [["49.09304", "8.42786"]], + "url": "http://www.pse.kit.edu" + }, { + "id": "707", + "title": "Einkauf, Verkauf und Materialwirtschaft (EVM)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09347", "8.42796"]], + "url": "http://www.evm.kit.edu" + }, { + "id": "711", + "title": "Personalservice (PSE) CS", + "category": "facility", + "aliasList": [], + "positionList": [["49.00943", "8.41154"]], + "url": "http://www.pse.kit.edu" + }, { + "id": "712", + "title": "Bibliothek (Campus S\u00fcd)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01101", "8.41642"]], + "url": "http://www.bibliothek.kit.edu/cms/" + }, { + "id": "715", + "title": "House of Competence (HOC)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01307", "8.41603"]], + "url": "http://www.hoc.kit.edu/" + }, { + "id": "716", + "title": "Studentenwerk", + "category": "facility", + "aliasList": [], + "positionList": [["49.01188", "8.41756"]], + "url": null + }, { + "id": "717", + "title": "Steinbuch Centre for Computing (SCC), CS", + "category": "facility", + "aliasList": ["scc", "iwr", "rz", "rechenzentrum", "hik"], + "positionList": [["49.01227", "8.40809"]], + "url": "https://www.scc.kit.edu" + }, { + "id": "718", + "title": "Internationales (INTL)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01031", "8.41889"]], + "url": "http://www.intl.kit.edu/intl/" + }, { + "id": "720", + "title": "International Students Office (INTL)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01031", "8.41889"]], + "url": "http://www.intl.kit.edu/istudent/" + }, { + "id": "721", + "title": "International Scholars & Welcome Office (Campus Nord)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09309", "8.42787"]], + "url": "http://www.intl.kit.edu/iforscher/" + }, { + "id": "723", + "title": "Facility Management (FM)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00943", "8.41195"]], + "url": "http://www.fm.kit.edu/" + }, { + "id": "724", + "title": "International Scholars & Welcome Office (Campus S\u00fcd)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00994", "8.41921"]], + "url": "http://www.intl.kit.edu/iforscher/" + }, { + "id": "725", + "title": "Mensa", + "category": "facility", + "aliasList": [], + "positionList": [["49.01196", "8.41684"]], + "url": "http://www.studentenwerk-karlsruhe.de/de/essen/" + }, { + "id": "726", + "title": "S\u00fcdwestdeutsches Archiv f\u00fcr Architektur und Ingenieurbau (saai)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00923", "8.41506"]], + "url": "http://www.saai.kit.edu/" + }, { + "id": "727", + "title": "Sicherheit und Umwelt (SUM)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09417", "8.43605"]], + "url": "http://www.sum.kit.edu/" + }, { + "id": "728", + "title": "Studienzentrum f\u00fcr Sehgesch\u00e4digte (SZS)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01194", "8.41019"]], + "url": "https://www.szs.kit.edu" + }, { + "id": "729", + "title": "Laboratorium f\u00fcr Elektronenmikroskopie (LEM)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01254", "8.41049"]], + "url": "https://www.lem.kit.edu" + }, { + "id": "730", + "title": "KIT-Shuttle (Haltestelle Campus S\u00fcd)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01101", "8.41412"]], + "url": null + }, { + "id": "732", + "title": "Zukunftscampus", + "category": "facility", + "aliasList": [], + "positionList": [["49.00937", "8.41179"]], + "url": "http://www.zukunftscampus.kit.edu/" + }, { + "id": "734", + "title": "Lernzentrum am Fasanenschl\u00f6sschen (Geb. 30.28)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01274", "8.41250"]], + "url": null + }, { + "id": "736", + "title": "Meteorologie und Klimaforschung - Atmosph\u00e4rische Aerosolforschung (IMK-AAF) ", + "category": "institute", + "aliasList": [], + "positionList": [["49.09546", "8.42938"]], + "url": null + }, { + "id": "739", + "title": "Meteorologie und Klimaforschung - Atmosph\u00e4rische Spurenstoffe und Fernerkundung (IMK-ASF)", + "category": "institute", + "aliasList": [], + "positionList": [["49.09394", "8.43644"]], + "url": "http://www.imk-asf.kit.edu/" + }, { + "id": "741", + "title": "Meteorologie und Klimaforschung - Forschungsbereich Troposph\u00e4re (IMK-TRO)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01295", "8.41103"]], + "url": "http://www.imk-tro.kit.edu/" + }, { + "id": "743", + "title": "Schwerbehindertenvertretung (SBV) Campus S\u00fcd", + "category": "facility", + "aliasList": [], + "positionList": [["49.01025", "8.41179"]], + "url": "http://www.sbv.kit.edu/" + }, { + "id": "745", + "title": "Zentrum f\u00fcr Mediales Lernen (ZML)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00751", "8.40425"]], + "url": "http://www.zml.kit.edu/" + }, { + "id": "746", + "title": "MINT-Kolleg Unterrichtsgeb\u00e4ude (Kapellenstra\u00dfe 17)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00644", "8.41367"]], + "url": null + }, { + "id": "747", + "title": "Materialpr\u00fcfungsanstalt (MPA)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01392", "8.42155"]], + "url": "http://www.mpa.kit.edu/" + }, { + "id": "748", + "title": "Steinbuch Centre for Computing (SCC), CN", + "category": "facility", + "aliasList": [], + "positionList": [["49.09577", "8.43297"]], + "url": "http://www.scc.kit.edu/" + }, { + "id": "749", + "title": "Sprachenzentrum (Geb. 50.20)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01035", "8.41879"]], + "url": "https://www.spz.kit.edu/" + }, { + "id": "750", + "title": "MINT-Kolleg (Geb. 50.20)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01035", "8.41879"]], + "url": "http://www.mint-kolleg.kit.edu/" + }, { + "id": "751", + "title": "Programmleitungen", + "category": "facility", + "aliasList": [], + "positionList": [["49.09314", "8.43626"]], + "url": null + }, { + "id": "752", + "title": "PTKA - Produktion und Fertigungstechnologien (PFT) 436 C 08", + "category": "institute", + "aliasList": [], + "positionList": [["49.09489", "8.43471"]], + "url": "http://www.ptka.kit.edu/pft/" + }, { + "id": "753", + "title": "PTKA - Baden-W\u00fcrttemberg Programme (BWP) 438 C/D 08", + "category": "institute", + "aliasList": [], + "positionList": [["49.09460", "8.43509"]], + "url": "http://www.ptka.kit.edu/bwp/" + }, { + "id": "754", + "title": "PTKA - Wassertechnologie und Entsorgung (WTE) 9675 C/D 08", + "category": "institute", + "aliasList": [], + "positionList": [["49.09435", "8.43502"]], + "url": "http://www.ptka.kit.edu/wte/" + }, { + "id": "755", + "title": "AStA (im Mensageb\u00e4ude)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01196", "8.41684"]], + "url": "http://www.asta-kit.de/" + }, { + "id": "756", + "title": "Fachschaft Architektur", + "category": "institute", + "aliasList": [], + "positionList": [["49.01096", "8.41084"]], + "url": "http://www.fsarchkit.de/wordpress/" + }, { + "id": "757", + "title": "Fachschaft Bauingenieurwesen", + "category": "institute", + "aliasList": [], + "positionList": [["49.01025", "8.41548"]], + "url": "http://www.fs-bau.kit.edu/" + }, { + "id": "758", + "title": "Fachschaft Chemie und Biowissenschaften", + "category": "institute", + "aliasList": [], + "positionList": [["49.01266", "8.41389"]], + "url": "http://fs-chembio.usta.de/index.html" + }, { + "id": "759", + "title": "Fachschaft Elektro- und Informationstechnik", + "category": "institute", + "aliasList": [], + "positionList": [["49.01070", "8.41277"]], + "url": "https://fachschaft.etec.uni-karlsruhe.de/" + }, { + "id": "760", + "title": "Fachschaft Geistes- und Sozialwissenschaften", + "category": "institute", + "aliasList": [], + "positionList": [["49.01351", "8.41345"]], + "url": "http://www.geistsoz.de/" + }, { + "id": "761", + "title": "Fachschaft Geod\u00e4sie und Geoinformatik", + "category": "institute", + "aliasList": [], + "positionList": [["49.01096", "8.41084"]], + "url": "http://www.fachschaft-gug.de/" + }, { + "id": "762", + "title": "Fachschaft Geowissenschaften", + "category": "institute", + "aliasList": [], + "positionList": [["49.00970", "8.41693"]], + "url": "http://fs-geo.bio-geo.uni-karlsruhe.de/" + }, { + "id": "763", + "title": "Fachschaft Informatik", + "category": "institute", + "aliasList": [], + "positionList": [["49.01386", "8.41949"]], + "url": "http://www.fsmi.uni-karlsruhe.de/" + }, { + "id": "764", + "title": "Fachschaft Kunstgeschichte", + "category": "institute", + "aliasList": [], + "positionList": [["49.01096", "8.41084"]], + "url": "http://kg.ikb.kit.edu/68.php" + }, { + "id": "765", + "title": "Fachschaft Maschinenbau/Chemieingenieurwesen", + "category": "institute", + "aliasList": [], + "positionList": [["49.00954", "8.41430"]], + "url": "http://www.fs-fmc.kit.edu/" + }, { + "id": "766", + "title": "Fachschaft Mathematik und Informatik", + "category": "institute", + "aliasList": [], + "positionList": [["49.01386", "8.41949"]], + "url": "http://www.fsmi.uni-karlsruhe.de/" + }, { + "id": "767", + "title": "Fachschaft Physik", + "category": "institute", + "aliasList": [], + "positionList": [["49.01240", "8.41089"]], + "url": "http://fachschaft.physik.kit.edu/drupal/" + }, { + "id": "768", + "title": "Fachschaft Sport", + "category": "institute", + "aliasList": [], + "positionList": [["49.01565", "8.41632"]], + "url": "http://www.sport.kit.edu/fachschaft/" + }, { + "id": "769", + "title": "Fachschaft WiWi", + "category": "institute", + "aliasList": [], + "positionList": [["49.01265", "8.40663"], ["49.00918", "8.40966"]], + "url": "http://www.fachschaft.org/" + }, { + "id": "770", + "title": "KinderUniversum", + "category": "facility", + "aliasList": [], + "positionList": [["49.01079", "8.41938"]], + "url": null + }, { + "id": "771", + "title": "Germanistik: Literatur, Sprache, Medien (GER), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01322", "8.41354"]], + "url": "https://www.geistsoz.kit.edu/germanistik/" + }, { + "id": "772", + "title": "Zentrum f\u00fcr Information und Beratung (zib)", + "category": "facility", + "aliasList": [], + "positionList": [["49.01038", "8.41248"]], + "url": "http://www.sle.kit.edu/vorstudium/zib.php" + }, { + "id": "773", + "title": "Angewandte Materialien - Angewandte Werkstoffphysik (IAM-AWP), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.10080", "8.43394"]], + "url": "http://www.iam.kit.edu/awp/" + }, { + "id": "774", + "title": "Angewandte Materialien - Werkstoff- und Biomechanik (IAM-WBM), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09970", "8.43420"]], + "url": "http://www.iam.kit.edu/wbm/" + }, { + "id": "775", + "title": "Angewandte Materialien -\u00a0Werkstoffkunde (IAM-WK)\u00a0Geb\u00e4ude 10.91, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00999", "8.41346"]], + "url": "http://www.iam.kit.edu/wk/" + }, { + "id": "776", + "title": "Angewandte Materialien -\u00a0Werkstoffkunde (IAM-WK)\u00a0Geb\u00e4ude 10.96, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00986", "8.41411"]], + "url": null + }, { + "id": "777", + "title": "Angewandte Materialien \u2013 Keramische Werkstoffe und Technologien (IAM-KWT), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01244", "8.42549"]], + "url": "http://www.iam.kit.edu/km/" + }, { + "id": "778", + "title": "Angewandte Materialien \u2013 Computational Materials Science (IAM-CMS)\u00a0, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00999", "8.41346"]], + "url": "http://www.iam.kit.edu/cms/" + }, { + "id": "779", + "title": "Angewandte Materialien - Energiespeichersysteme (IAM-ESS)\u00a0, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.09652", "8.43166"]], + "url": "http://www.iam.kit.edu/ess/" + }, { + "id": "781", + "title": "449", + "category": "building", + "aliasList": [], + "positionList": [["49.09577", "8.43297"]], + "url": "" + }, { + "id": "782", + "title": "01.87", + "category": "building", + "aliasList": [], + "positionList": [["49.00510", "8.41154"]], + "url": null + }, { + "id": "783", + "title": "05.02", + "category": "building", + "aliasList": [], + "positionList": [["49.00644", "8.41367"]], + "url": null + }, { + "id": "784", + "title": "Maschinenbau, oberer und mittlerer H\u00f6rsaal (10.91)", + "category": "lecturehall", + "aliasList": [], + "positionList": [["49.00992", "8.41285"]], + "url": null + }, { + "id": "785", + "title": "30.28", + "category": "building", + "aliasList": [], + "positionList": [["49.01296", "8.41222"]], + "url": null + }, { + "id": "786", + "title": "01.85", + "category": "building", + "aliasList": [], + "positionList": [["49.00887", "8.41043"]], + "url": null + }, { + "id": "787", + "title": "Karlsruhe Decision and Design Laboratory", + "category": "facility", + "aliasList": [], + "positionList": [["49.00887", "8.41043"]], + "url": "http://csl.anthropomatik.kit.edu/2434.php" + }, { + "id": "788", + "title": "3300", + "category": "building", + "aliasList": [], + "positionList": [["49.01121", "8.39536"]], + "url": null + }, { + "id": "789", + "title": "01.86", + "category": "building", + "aliasList": [], + "positionList": [["49.00631", "8.41061"]], + "url": null + }, { + "id": "790", + "title": "Bereich I \u2013 Biologie, Chemie und Verfahrenstechnik (Campus S\u00fcd)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00947", "8.41175"]], + "url": "http://www.kit.edu/b1/index.php" + }, { + "id": "791", + "title": "Bereich I - Biologie, Chemie und Verfahrenstechnik (Campus Nord)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09451", "8.43404"]], + "url": "http://www.kit.edu/b1/index.php" + }, { + "id": "792", + "title": "Bereich II - Informatik, Wirtschaft und Gesellschaft (CS)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00949", "8.41163"]], + "url": "http://www.kit.edu/b2/index.php" + }, { + "id": "793", + "title": "Bereich II - Informatik, Wirtschaft und Gesellschaft (CN)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09483", "8.43473"]], + "url": "http://www.kit.edu/b2/index.php" + }, { + "id": "794", + "title": "Bereich III - Maschinenbau und Elektrotechnik (CS)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00949", "8.41163"]], + "url": "http://www.kit.edu/b3/index.php" + }, { + "id": "795", + "title": "Bereich III - Maschinenbau und Elektrotechnik (CN)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09461", "8.43408"]], + "url": "http://www.kit.edu/b3/index.php" + }, { + "id": "796", + "title": "Bereich IV - Nat\u00fcrliche und gebaute Umwelt (CS)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00948", "8.41162"]], + "url": "http://www.kit.edu/b4/index.php" + }, { + "id": "797", + "title": "Bereich IV - Nat\u00fcrliche und gebaute Umwelt (CN)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09387", "8.43643"]], + "url": "http://www.kit.edu/b4/index.php" + }, { + "id": "798", + "title": "Bereich V - Physik und Mathematik (CS)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00948", "8.41162"]], + "url": "http://www.kit.edu/b5/index.php" + }, { + "id": "799", + "title": "Bereich V - Physik und Mathematik (CN)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09484", "8.43468"]], + "url": "http://www.kit.edu/b5/index.php" + }, { + "id": "800", + "title": "440", + "category": "building", + "aliasList": [], + "positionList": [["49.09308", "8.43615"]], + "url": null + }, { + "id": "801", + "title": "Programm BioGrenzfl\u00e4chen", + "category": "facility", + "aliasList": [], + "positionList": [["49.09308", "8.43620"]], + "url": "http://www.kit.edu/forschen/1303.php" + }, { + "id": "804", + "title": "9675", + "category": "building", + "aliasList": ["containergeb\u00e4ude"], + "positionList": [["49.09428", "8.43507"]], + "url": null + }, { + "id": "805", + "title": "KIT-Zentrum f\u00fcr Klima und Umwelt", + "category": "facility", + "aliasList": [], + "positionList": [["49.09428", "8.43509"]], + "url": "http://www.klima-umwelt.kit.edu/index.php" + }, { + "id": "806", + "title": "KIT-Zentrum Energie", + "category": "facility", + "aliasList": [], + "positionList": [["49.09429", "8.43509"]], + "url": "http://www.energie.kit.edu/index.php" + }, { + "id": "807", + "title": "Projekttr\u00e4ger Karlsruhe (PTKA)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09429", "8.43509"]], + "url": "http://www.ptka.kit.edu/" + }, { + "id": "808", + "title": "01.80", + "category": "building", + "aliasList": [], + "positionList": [["49.00987", "8.41098"]], + "url": null + }, { + "id": "809", + "title": "20.40", + "category": "building", + "aliasList": [], + "positionList": [["49.01126", "8.41137"]], + "url": null + }, { + "id": "810", + "title": "30.48", + "category": "building", + "aliasList": [], + "positionList": [["49.01317", "8.41478"]], + "url": null + }, { + "id": "811", + "title": "30.49", + "category": "building", + "aliasList": [], + "positionList": [["49.01351", "8.41538"]], + "url": null + }, { + "id": "812", + "title": "Theorie der Kondensierten Materie, Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.01307", "8.41076"]], + "url": "https://www.tkm.kit.edu/" + }, { + "id": "813", + "title": "Fachbibliothek WIWI", + "category": "facility", + "aliasList": [], + "positionList": [["49.01303", "8.37530"]], + "url": "https://www.wiwi.kit.edu/bib.php" + }, { + "id": "814", + "title": "Lehrstuhl f\u00fcr Industrie\u00f6konomik, Institut f\u00fcr Volkswirtschaftslehre (ECON)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01302", "8.37533"]], + "url": "http://io.econ.kit.edu/" + }, { + "id": "815", + "title": "Lehrstuhl f\u00fcr Finanzwissenschaft und Public Management, Institut f\u00fcr Volkswirtschaftslehre (ECON)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01301", "8.37530"]], + "url": "http://fiwi.econ.kit.edu/index.php" + }, { + "id": "816", + "title": "Lehrstuhl f\u00fcr Makro\u00f6konomik, Institut f\u00fcr Volkswirtschaftslehre (ECON)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01302", "8.37529"]], + "url": "http://macro.econ.kit.edu/" + }, { + "id": "817", + "title": "Lehrstuhl f\u00fcr Netzwerk\u00f6konomie, Institut f\u00fcr Volkswirtschaftslehre (ECON", + "category": "institute", + "aliasList": [], + "positionList": [["49.00891", "8.41131"]], + "url": "http://netze.econ.kit.edu/" + }, { + "id": "818", + "title": "Lehrstuhl f\u00fcr \u00d6konometrie, Institut f\u00fcr Volkswirtschaftslehre (ECON)", + "category": "institute", + "aliasList": [], + "positionList": [["49.01303", "8.37528"]], + "url": "http://statistik.econ.kit.edu/" + }, { + "id": "819", + "title": "Lehrstuhl f\u00fcr Politische \u00d6konomie, Institut f\u00fcr Volkswirtschaftslehre (ECON)", + "category": "institute", + "aliasList": [], + "positionList": [["49.00895", "8.41037"]], + "url": "http://polit.econ.kit.edu/deutsch/index.php" + }, { + "id": "820", + "title": "Lehrstuhl f\u00fcr Wirtschaftspolitik, Institut f\u00fcr Volkswirtschaftslehre (ECON)", + "category": "institute", + "aliasList": [], + "positionList": [["49.00494", "8.41088"]], + "url": "http://wipo.econ.kit.edu/" + }, { + "id": "822", + "title": "\u00d6konomie und \u00d6kologie des Wohnungsbaus (OEW), Fachgebiet Immobilienwirtschaft", + "category": "institute", + "aliasList": [], + "positionList": [["49.01237", "8.40929"]], + "url": "http://www.oew.kit.edu/" + }, { + "id": "823", + "title": "KIT-Fakult\u00e4t f\u00fcr Wirtschaftswissenschaften, Pr\u00fcfungssekretariat", + "category": "facility", + "aliasList": [], + "positionList": [["49.00915", "8.40929"]], + "url": "http://www.wiwi.kit.edu/Pruefungssekretariat.php" + }, { + "id": "824", + "title": "KIT-Fakult\u00e4t f\u00fcr Wirtschaftswissenschaften, Gesch\u00e4ftsstelle ", + "category": "facility", + "aliasList": [], + "positionList": [["49.00915", "8.40934"]], + "url": "http://www.wiwi.kit.edu/fakultaet.php" + }, { + "id": "825", + "title": "Soziologie, Medien- und Kulturwissenschaften (ISMK), Institut f\u00fcr ", + "category": "institute", + "aliasList": [], + "positionList": [["49.01025", "8.41176"]], + "url": "http://geistsoz.kit.edu/ismk/" + }, { + "id": "828", + "title": "Institut f\u00fcr Operations Research (IOR), Bereich Diskrete Optimierung und Logistik", + "category": "institute", + "aliasList": [], + "positionList": [["49.00914", "8.40928"]], + "url": "http://dol.ior.kit.edu/" + }, { + "id": "829", + "title": "Institut f\u00fcr Operations Research (IOR), Bereich Kontinuierliche Optimierung", + "category": "institute", + "aliasList": [], + "positionList": [["49.01300", "8.37529"]], + "url": "http://kop.ior.kit.edu/" + }, { + "id": "830", + "title": "Institut f\u00fcr Operations Research (IOR), Bereich Stochastische Modellierung und Optimierung", + "category": "institute", + "aliasList": [], + "positionList": [["49.01305", "8.37524"]], + "url": "http://smo.ior.kit.edu/" + }, { + "id": "831", + "title": "Institut f\u00fcr Operations Research (IOR), Bereich Analytics and Statistics", + "category": "institute", + "aliasList": [], + "positionList": [["49.00493", "8.41080"]], + "url": "http://as.ior.kit.edu/index.php" + }, { + "id": "832", + "title": "09.20", + "category": "building", + "aliasList": [], + "positionList": [["49.00944", "8.39324"]], + "url": null + }, { + "id": "833", + "title": "09.21", + "category": "building", + "aliasList": [], + "positionList": [["49.01305", "8.37527"]], + "url": null + }, { + "id": "834", + "title": "9651", + "category": "building", + "aliasList": [], + "positionList": [["49.09502", "8.43545"]], + "url": null + }, { + "id": "835", + "title": "Schwerbehindertenvertretung (SBV) Campus Nord", + "category": "facility", + "aliasList": [], + "positionList": [["49.09361", "8.42831"]], + "url": "http://www.sbv.kit.edu/" + }, { + "id": "836", + "title": "Strategische Entwicklung und Kommunikation (SEK)", + "category": "facility", + "aliasList": [], + "positionList": [["49.09365", "8.42834"]], + "url": "http://www.sek.kit.edu/index.php" + }, { + "id": "837", + "title": "Technikzuk\u00fcnfte, Institut f\u00fcr ", + "category": "institute", + "aliasList": [], + "positionList": [["49.00952", "8.39331"]], + "url": "http://www.itz.kit.edu/index.php" + }, { + "id": "838", + "title": "Angewandte Betriebswirtschaftslehre und Unternehmensf\u00fchrung (IBU), Institut f\u00fcr", + "category": "institute", + "aliasList": [], + "positionList": [["49.00905", "8.40956"]], + "url": "http://www.ibu.kit.edu/index.php" + }, { + "id": "839", + "title": "Maschinenbau, KIT-Fakult\u00e4t f\u00fcr", + "category": "facility", + "aliasList": [], + "positionList": [["49.00987", "8.41365"]], + "url": "http://www.mach.kit.edu/index.php" + }, { + "id": "840", + "title": "70.03", + "category": "building", + "aliasList": [], + "positionList": [["49.02215", "8.43354"]], + "url": null + }, { + "id": "841", + "title": "145", + "category": "building", + "aliasList": [], + "positionList": [["49.09323", "8.42917"]], + "url": null + }, { + "id": "842", + "title": "40.50", + "category": "building", + "aliasList": [], + "positionList": [["49.01418", "8.41438"], ["49.01418", "8.41438"]], + "url": null + }, { + "id": "843", + "title": "40.51", + "category": "building", + "aliasList": [], + "positionList": [["49.01414", "8.41491"], ["49.01414", "8.41491"]], + "url": null + }, { + "id": "844", + "title": "Evaluationsstelle (SEK-QM)", + "category": "facility", + "aliasList": [], + "positionList": [["49.00967", "8.41144"]], + "url": "https://www.sek.kit.edu/215.php" + }, { + "id": "845", + "title": "40.44", + "category": "building", + "aliasList": [], + "positionList": [["49.01615", "8.41488"]], + "url": null + }, { + "id": "846", + "title": "Hochschulsport", + "category": "facility", + "aliasList": [], + "positionList": [["49.01605", "8.41686"]], + "url": "http://www.sport.kit.edu/Hochschulsport.php" + }, { + "id": "847", + "title": "Botanischer Garten", + "category": "facility", + "aliasList": [], + "positionList": [["49.01325", "8.41928"]], + "url": "http://www.botanik.kit.edu/garten/index.php" + }, { + "id": "848", + "title": "20.29 (Containergeb\u00e4ude)", + "category": "building", + "aliasList": [], + "positionList": [["49.01230", "8.40858"]], + "url": null + }, { + "id": "849", + "title": "01.90", + "category": "building", + "aliasList": [], + "positionList": [["49.00965", "8.41101"]], + "url": null + }, { + "id": "850", + "title": "01.99", + "category": "building", + "aliasList": [], + "positionList": [["49.00966", "8.40757"]], + "url": null + }, { + "id": "851", + "title": "09.22", + "category": "building", + "aliasList": [], + "positionList": [["48.99330", "8.34448"]], + "url": null + }, { + "id": "852", + "title": "09.23", + "category": "building", + "aliasList": [], + "positionList": [["49.00519", "8.39072"]], + "url": null + }, { + "id": "853", + "title": "70.04", + "category": "building", + "aliasList": [], + "positionList": [["49.02272", "8.43344"]], + "url": null + }, { + "id": "854", + "title": "Mitfahrbank (Campus S\u00fcd): Bibliothek", + "category": "facility", + "aliasList": [], + "positionList": [["49.01086", "8.41658"]], + "url": null + }, { + "id": "855", + "title": "Mitfahrbank (Campus S\u00fcd): Schranke zur Westausfahrt", + "category": "facility", + "aliasList": [], + "positionList": [["49.01166", "8.40886"]], + "url": null + }, { + "id": "856", + "title": "Mitfahrbank (Campus Nord): S\u00fcdtor / FTU", + "category": "facility", + "aliasList": [], + "positionList": [["49.09126", "8.42776"]], + "url": null + }] + } +} + diff --git a/frontend/src/api-services/login.service.js b/frontend/src/api-services/login.service.js index 8291a2c513d058082ddbc92538d98adf22c486fb..e8be329d8b9883eeb57fb6ec836fbc77280bf407 100644 --- a/frontend/src/api-services/login.service.js +++ b/frontend/src/api-services/login.service.js @@ -1,10 +1,14 @@ import Axios from 'axios'; +import config from '@/../netvs.config' const LOGIN_RESOURCE = '/api/login'; const LOGOUT_RESOURCE = '/api/logout'; export default { login(username, password) { + if (config.ENABLE_OIC) { + return Axios.post(LOGIN_RESOURCE) + } return Axios.post(LOGIN_RESOURCE, {'username': username, 'password': password}) }, logout(token_pk) { diff --git a/frontend/src/api-services/macauth.service.js b/frontend/src/api-services/macauth.service.js new file mode 100644 index 0000000000000000000000000000000000000000..3e027f358fa88cb397c4203f9fe4045b739a48bb --- /dev/null +++ b/frontend/src/api-services/macauth.service.js @@ -0,0 +1,11 @@ +import TransactionService from './transaction.service' + +export default { + list(config) { + let ta = [ + {"name": "macauth.client.list", "old": {"is_own": true}}, // Clients + {"name": "nd.bcd.list", "old": {"is_own": true}} // BCDs + ] + return TransactionService.execute(config, ta) + } +} \ No newline at end of file diff --git a/frontend/src/api-services/transaction.service.js b/frontend/src/api-services/transaction.service.js index a3eb272e5dc80407ac4721172c8cd78ef4e6e879..1822b35f8e7404ec7a8b1d272149de0b6c208280 100644 --- a/frontend/src/api-services/transaction.service.js +++ b/frontend/src/api-services/transaction.service.js @@ -7,4 +7,7 @@ export default { execute(config, ta) { return Axios.post(RESOURCE_NAME_TA, ta, config); }, + executeDry(config, ta) { + return Axios.post(RESOURCE_NAME_TA+'?dry_mode=true', ta, config); + }, } diff --git a/frontend/src/assets/css/net-suite.css b/frontend/src/assets/css/net-suite.css index 9235383d909a3121ec3069312c8a47e0ef479ebd..ae9979e8f61bedb87b3054d49759ffe045566267 100644 --- a/frontend/src/assets/css/net-suite.css +++ b/frontend/src/assets/css/net-suite.css @@ -34,10 +34,6 @@ svg { color: #fff; } -.btn { - margin-right: .25em; -} - [class*="col-"] { margin-bottom: 25px; } @@ -245,52 +241,6 @@ table.collapse.in { margin-bottom: 15px; } -#wrapper { - padding-left: 0; - padding-right: 0; - transition: none; -} - -#wrapper.toggled { - padding-right: 380px; - padding-left: 0 !important; -} - -#sidebar-wrapper { - left: auto; - right: 0; - margin-top: -20px; - background: #efefef; - margin-left: 0; - margin-right: -380px; - padding-top: 25px; - width: 380px; - transition: none; -} - -.ease { - transition: all 0.5s ease !important; -} - -.sidebar_cont { - padding-bottom: 100px; -} - -#wrapper.toggled #sidebar-wrapper { - margin-right: 0; - width: 380px; -} - -#page-content-wrapper { - width: 100%; - position: absolute; - padding: 15px; -} - -#wrapper.toggled #page-content-wrapper { - margin-right: 0; -} - .cell-50 { width: 50%; } @@ -325,3 +275,12 @@ table.collapse.in { .pull-left { float: left; } + +.invisible-scrollbar::-webkit-scrollbar { + width: 0; + background: transparent; +} + +.popover-wide { + max-width: 100%; +} \ No newline at end of file diff --git a/frontend/src/components/CopyField.vue b/frontend/src/components/CopyField.vue new file mode 100644 index 0000000000000000000000000000000000000000..83899e590658bcaa68d93485ba68f00c677f3ef2 --- /dev/null +++ b/frontend/src/components/CopyField.vue @@ -0,0 +1,57 @@ +<template> + <b-input-group class="copy-field"> + <b-form-textarea v-if="multiline" rows="10" :id="'text-input' + id" ref="textInput" v-model="text" + readonly :class="`border-${variant} text-${variant} invisible-scrollbar ${code?'text-monospace':''}`"/> + <b-form-input v-else :id="'text-input' + id" ref="textInput" v-model="text" + readonly :class="`border-${variant} text-${variant} invisible-scrollbar ${code?'text-monospace':''}`"/> + <b-tooltip :target="'text-input' + id" :show.sync="text_copied" :disabled="!text_copied" placement="bottom" + :variant="variant" :class="`border-${variant} text-${variant}`"> + Kopiert. + </b-tooltip> + <b-input-group-append> + <b-button :variant="variant" @click="copyText"> + <font-awesome-icon :icon="['fas', 'copy']"/> + </b-button> + </b-input-group-append> + </b-input-group> +</template> + +<script> +export default { + name: "CopyField", + props: { + 'text': String, + 'variant': { + 'type': String, + 'default': 'primary' + }, + 'multiline': { + 'type': Boolean, + 'default': false + }, + 'code': { + 'type': Boolean, + 'default': false + } + }, + data() { + return { + id: null, + text_copied: false + } + }, + methods: { + copyText() { + // https://www.w3schools.com/howto/howto_js_copy_clipboard.asp + let text_input = this.$refs.textInput + text_input.select() + text_input.setSelectionRange(0, 99999) // For mobile devices + document.execCommand("copy") + this.text_copied = true + }, + }, + mounted() { + this.id = this._uid + } +} +</script> diff --git a/frontend/src/components/DBEditor.vue b/frontend/src/components/DBEditor.vue new file mode 100644 index 0000000000000000000000000000000000000000..5b56fc65704b8ed5bd4622572a2ec53ac2471895 --- /dev/null +++ b/frontend/src/components/DBEditor.vue @@ -0,0 +1,260 @@ +<template> + <b-modal v-if="object_definition != null" @ok="commit()" cancel-variant="outline-secondary" cancel-title="Abbrechen" + :ok-title="function2text(object_function)" + :ok-variant="function2variant(object_function)" size="lg" scrollable :busy="object_definition == null" + :id="modal_id" + :title="object_definition.name.replace(/^\w/, c => c.toUpperCase()) + ' ' + function2text(object_function)" + :static="false"> + <form :id="modal_id + '-dbeditform'" v-if="object_definition != null"> + <template v-if="!non_optionals_order"> + <template v-for="(data,attr) in object_functions[object_function].parameters"> + <DataEditField :object_attribute="data" :attribute_preset="presets[attr]" + :attribute_reference_name="object_definition_reference_names_by_attribute[attr]" + :attribute_referencing="object_definition_referencing_by_attribute[attr]" + :attribute_name="attr" + :input_reducer="input_reducer[attr]" + v-bind:key="attr" + v-if="data.new.isRequired || non_optionals.includes(attr)"></DataEditField> + </template> + <template> + <b-link v-b-toggle.collapse-optional>Optionale Parameter</b-link> + <b-collapse id="collapse-optional"> + <hr/> + <template v-for="(data,attr) in object_functions[object_function].parameters"> + <DataEditField :object_attribute="data" :attribute_preset="presets[attr]" + :attribute_reference_name="object_definition_reference_names_by_attribute[attr]" + :attribute_referencing="object_definition_referencing_by_attribute[attr]" + :attribute_name="attr" + :input_reducer="input_reducer[attr]" + v-bind:key="attr" + v-if="!data.new.isRequired && !non_optionals.includes(attr)"></DataEditField> + </template> + + </b-collapse> + </template> + </template> + <template v-else> + <template v-for="attr in non_optionals_order"> + <DataEditField :object_attribute="object_functions[object_function].parameters[attr]" + :attribute_preset="presets[attr]" + :attribute_reference_name="object_definition_reference_names_by_attribute[attr]" + :attribute_referencing="object_definition_referencing_by_attribute[attr]" + :attribute_name="attr" + :input_reducer="input_reducer[attr]" + v-bind:key="attr"></DataEditField> + </template> + <template> + <b-link v-b-toggle.collapse-optional>Optionale Parameter</b-link> + <b-collapse id="collapse-optional"> + <hr/> + <template v-for="(data,attr) in object_functions[object_function].parameters"> + <DataEditField :object_attribute="data" :attribute_preset="presets[attr]" + :attribute_reference_name="object_definition_reference_names_by_attribute[attr]" + :attribute_referencing="object_definition_referencing_by_attribute[attr]" + :attribute_name="attr" + :input_reducer="input_reducer[attr]" + v-bind:key="attr" + v-if="!non_optionals_order.includes(attr)"></DataEditField> + </template> + + </b-collapse> + </template> + </template> + </form> + </b-modal> +</template> + +<script> +import ObjectTypeService from '@/api-services.gen/wapi.object_type'; +import FunctionService from '@/api-services.gen/wapi.function'; +import ApiUtil from '@/util/apiutil' +import DataEditField from "./DataEditField"; +import TransactionUtil from '@/util/transactionutil'; +import {v4 as uuidv4} from 'uuid'; +import transactionutil from "@/util/transactionutil"; + +export default { + name: "DBEditor", + components: {DataEditField}, + data() { + return { + object_definition: null, + object_definition_referencing_by_attribute: null, + object_definition_reference_names_by_attribute: null, + object_functions: null, + } + }, + methods: { + commit() { + let form = new FormData(document.getElementById(this.modal_id + '-dbeditform')) + let elems = form.entries() + let ta = {'object_fq_name': this.object_fq_name, 'object_function': this.object_function} + let new_params = {} + for (let e of elems) { + new_params[e[0]] = e[1] + } + ta['parameters'] = { + 'new': transactionutil.remove_empty_data(this.object_functions[this.object_function].parameters, new_params), + 'old': this.old_data + } + ta['old_uuid'] = this.old_uuid + ta['uuid'] = uuidv4() + ta['object_fq_name'] = this.object_fq_name + ta['object_functions'] = this.object_functions + ta['object_function'] = this.object_function + ta['input_reducer'] = this.input_reducer + ta['non_optionals_order'] = this.non_optionals_order + ta['non_optionals'] = this.non_optionals + ta['func_descr'] = this.object_functions[this.object_function].parameters + ta['object_title'] = this.object_title + let prev_fields = this.preview_fields + if (prev_fields == null || this.object_function == 'update') { + prev_fields = [] + if(this.object_function == 'update') { + for (let data in this.object_functions[this.object_function].parameters) { + if(ta.parameters.old[data] != ta.parameters.new[data]) { + prev_fields.push(data) + } + } + } else { + for (let data in this.object_functions[this.object_function].parameters) { + prev_fields.push(data) + } + } + } + ta['preview_fields'] = prev_fields + this.$store.commit('addTransactionElement', ta) + this.$emit('commited', ta) + if (!this.isMobile() && !this.$store.state.show_sidebar) { + this.$store.state.show_sidebar = true + } + }, + async validateObjectFQName() { + let parts = this.object_fq_name.split('.') + let system = parts[0] + let name = parts[1] + let object_result = ObjectTypeService.list(this.$store.state.netdb_axios_config, { + name_list: [name], + system_list: [system] + }) + try { + let object_definition = await object_result + object_definition = object_definition.data[0] + if (object_definition.length !== 1) { + return false + } + let obj_functions = await FunctionService.list(this.$store.state.netdb_axios_config, { + object_type_list: [name], + system_list: [system] + }) + window.console.debug(ApiUtil.dict_by_value_of_array(obj_functions.data[0], 'name')) + return { + 'object_definition': object_definition[0], + 'object_functions': ApiUtil.dict_by_value_of_array(obj_functions.data[0], 'name') + } + } catch (e) { + return false + } + }, + function2variant: TransactionUtil.function2variant, + function2text: TransactionUtil.function2text, + async validateObjectFunction() { + // TODO + } + }, + props: { + object_fq_name: { + required: true + }, + modal_id: String, + object_function: { + type: String, + required: true + }, + presets: { + type: Object, + default() { + return {} + } + }, + input_reducer: { + type: Object, + default() { + return {} + } + }, + old_data: { + required: false, + default() { + return {} + }, + type: Object + }, + non_optionals: { + required: false, + default() { + return [] + }, + type: Array + }, + non_optionals_order: { + required: false, + type: Array + }, + old_uuid: { + required: false, + type: String, + default() { + return null + } + }, + preview_fields: { + required: false, + type: Array, + default() { + return null + } + }, + object_title: { + required: false, + default() { + return null + } + }, + }, + watch: { + $props: { + immediate: true, + deep: true, + async handler() { + window.console.debug("Watch update") + if (this.object_fq_name == null || (this.object_definition != null && this.object_fq_name == this.object_definition.fq_name)) { + window.console.debug("Skip object_fq_name check") + return + } + + let data = await this.validateObjectFQName() + if (data === false) { + window.console.error("Invalid object_fq_name!") + } else { + this.object_definition = data.object_definition + this.object_definition_referencing_by_attribute = {} + this.object_definition_reference_names_by_attribute = {} + for (let ref in this.object_definition.referencing) { + for (let attrib of this.object_definition.referencing[ref].attributes) { + this.object_definition_referencing_by_attribute[attrib] = this.object_definition.referencing[ref].references + this.object_definition_reference_names_by_attribute[attrib] = ref + } + } + this.object_functions = data.object_functions + this.$emit('ready') + } + } + } + } +} +</script> + +<style scoped> + +</style> diff --git a/frontend/src/components/DataEditField.vue b/frontend/src/components/DataEditField.vue new file mode 100644 index 0000000000000000000000000000000000000000..0381cb6826f6f06cf3380da7d26fb608ee0ccae8 --- /dev/null +++ b/frontend/src/components/DataEditField.vue @@ -0,0 +1,57 @@ +<template> + <div v-if="object_attribute"> + <b-form-group + :title="`${object_attribute.description_detail}\n\nName: ${attribute_name}\nReference: ${attribute_reference_name}\nReferencing: ${attribute_referencing}`" + :label="object_attribute.description_sys_scope"> + <b-form-input :value="attribute_preset || ''" + v-if="(input_reducer === null || input_reducer instanceof Boolean)&& + (object_attribute.data_type == 'text' || object_attribute.data_type == 'text_kw_lc_long' || object_attribute.data_type == 'text_long' || object_attribute.data_type == 'mac_address' || object_attribute.data_type == 'mac_address8' || object_attribute.data_type=='fqdn')" + :name="attribute_name" :disabled="input_reducer instanceof Boolean && !input_reducer" + ></b-form-input> + <b-form-input :value="attribute_preset || ''" + v-if="(input_reducer === null || input_reducer instanceof Boolean) && (object_attribute.data_type.includes('integer'))" + type="number" + :name="attribute_name" :disabled="input_reducer instanceof Boolean && !input_reducer" + ></b-form-input> + <b-checkbox :checked="attribute_preset || false" :name="attribute_name" + v-if="object_attribute.data_type=='boolean'" + :disabled="input_reducer instanceof Boolean && !input_reducer"></b-checkbox> + <b-form-select :name="attribute_name" v-if="input_reducer instanceof Object" v-model="attribute_preset"> + <template v-slot:first> + <b-form-select-option :value="null" disabled>-- Auswahl treffen --</b-form-select-option> + </template> + <template v-for="(data,key) in input_reducer"> + <b-form-select-option :key="key" :value="key">{{ data.display_name }}</b-form-select-option> + </template> + </b-form-select> + </b-form-group> + </div> +</template> + +<script> +export default { + name: "DataEditField", + props: { + object_attribute: { + required: true + }, + attribute_referencing: null, + attribute_reference_name: null, + attribute_preset: null, + attribute_name: { + type: String, + required: true + }, + input_reducer: { + type: Object, + default() { + return null + } + } + }, +} +</script> + +<style scoped> + +</style> diff --git a/frontend/src/components/date-time-picker.vue b/frontend/src/components/DateTimePicker.vue similarity index 95% rename from frontend/src/components/date-time-picker.vue rename to frontend/src/components/DateTimePicker.vue index 53868b4ffd879e69080d76ced6d165d5d7d71933..a29ed846d3cb05aeab815d0b971a4c667fad2949 100644 --- a/frontend/src/components/date-time-picker.vue +++ b/frontend/src/components/DateTimePicker.vue @@ -18,7 +18,7 @@ <script> export default { - name: "date-time-picker", + name: "DateTimePicker", props: ['label', 'model'], data () { return { diff --git a/frontend/src/components/FQDNRecordTable.vue b/frontend/src/components/FQDNRecordTable.vue new file mode 100644 index 0000000000000000000000000000000000000000..d97aca2292c15509495c76b34e7339352d9d84d2 --- /dev/null +++ b/frontend/src/components/FQDNRecordTable.vue @@ -0,0 +1,158 @@ +<template> + <div class="fqdn-record-table"> + <Loading :data="[fqdn_rrs]"> + <div> + <div class="net-filter-direct d-print-none"> + <div class="input-group"> + <div class="input-group-prepend"> + <span class="input-group-text"><font-awesome-icon icon="filter"/></span> + </div> + <input class="search form-control" id="filter-direct" placeholder="Filter" + autofocus="yes"/> + </div> + </div> + <b-table responsive class="shadow" :items="fqdn_rrs" :fields="fqdn_list_fields"> + <template v-slot:cell(info)="data"> + <b-dropdown> + <template v-slot:button-content> + <font-awesome-icon :icon="['fas', 'info-circle']"></font-awesome-icon> + </template> + <b-dropdown-item to="references">Referenzen auf FQDN</b-dropdown-item> + </b-dropdown> + </template> + <template v-slot:cell(data)="data"> + <code>{{ data.value }}</code> + </template> + <template v-slot:cell(actions)="data"> + <b-button variant="outline-primary" @click="editItem(data.item)"> + <font-awesome-icon :icon="['far', 'edit']"></font-awesome-icon> + </b-button> + <b-button variant="outline-danger" @click="deleteItem(data.item)"> + <font-awesome-icon :icon="['far', 'trash-alt']"></font-awesome-icon> + </b-button> + </template> + <template v-slot:cell(ttl)="data"> + <template v-if="data.item.ttl != null">{{data.item.ttl}}s</template> + <span v-else title="Geerbt von Zone" class="text-black-50">{{data.item.ttl_zone_default}}s</span> + <span v-if="data.item.ttl_reset_days" class="text-danger"><br/>Reset in {{data.item.ttl_reset_days}} Tagen</span> + </template> + </b-table> + + </div> + <DBEditor :presets="db_editor_presets" :input_reducer="create_record_reducer" modal_id="create_record" + :object_title="object_title" + :object_function="db_editor_function" object_fq_name="dns.record" :old_data="db_editor_old_data" + :non_optionals_order="['fqdn', 'type', 'data', 'fqdn_description', 'target_is_singleton', 'target_is_reverse_unique']" + ></DBEditor> + </Loading> + </div> +</template> + +<script> +import DBEditor from "./DBEditor"; +import RecordTypeService from "@/api-services.gen/dnscfg.record_type" +import RecordService from "@/api-services.gen/dns.record" +import Loading from "./Loading"; +import transactionutil from "../util/transactionutil"; + +export default { + name: "FQDNRecordTable", + components: { + Loading, + DBEditor + }, + props: { + fqdn_rrs: Array, + fqdn: { + type: String, + required: true + }, + }, + data() { + return { + object_title: null, + db_editor_function: 'create', + db_editor_presets: {'fqdn': this.fqdn}, + db_editor_old_data: {}, + fqdn_list_fields: [ + { + label: 'FQDN', + key: 'fqdn', + sortable: true + }, + { + label: 'Weitere Info', + key: 'info', + sortable: false + }, + { + label: 'Record-Typ', + key: 'type', + sortable: true + }, + { + label: 'Record-Data', + key: 'data', + sortable: true + }, + { + label: 'TTL', + key: 'ttl', + sortable: true + }, + { + label: 'FQDN-Beschreibung', + key: 'fqdn_description', + sortable: true + }, + { + label: 'Aktionen', + key: 'actions', + sortable: false + }, + ], + create_record_reducer: undefined + } + }, + created() { + let self = this + RecordTypeService.list(this.$store.state.netdb_axios_config, {is_intern: false}).then((response) => { + let types = response.data[0] + let selections = {} + for (let t of types) { + selections[t.name] = {'display_name': t.name} + } + self.create_record_reducer = { + 'type': selections + } + }) + }, + methods: { + deleteItem: function (item) { + let ta = transactionutil.generateDeleteElement('dns.record', RecordService.deleteParamsList(), item, item.type + '-Record auf FQDN ' + item.fqdn) + this.$store.commit('addTransactionElement', ta) + this.$emit('commited', ta) + if (!this.isMobile() && !this.$store.state.show_sidebar) { + this.$store.state.show_sidebar = true + } + }, + editItem: function (item) { + this.db_editor_function = 'update' + this.db_editor_old_data = item + this.db_editor_presets = item + this.object_title = item.type + '-Record auf FQDN ' + item.fqdn + this.$root.$emit('bv::show::modal', 'create_record') + }, + createItem: function () { + this.db_editor_function = 'create' + this.db_editor_old_data = {} + this.db_editor_presets = {'fqdn': this.fqdn} + this.$root.$emit('bv::show::modal', 'create_record') + } + } +} +</script> + +<style scoped> + +</style> diff --git a/frontend/src/components/FQDNTable.vue b/frontend/src/components/FQDNTable.vue new file mode 100644 index 0000000000000000000000000000000000000000..3adc0f1045fea29be0b480ce9ff253f72052cdd4 --- /dev/null +++ b/frontend/src/components/FQDNTable.vue @@ -0,0 +1,111 @@ +<template> + <Loading :data="[fqdns]"> + <div class="fqdn-table"> + <div> + <div class="net-filter-direct d-print-none"> + <div class="input-group"> + <div class="input-group-prepend"> + <span class="input-group-text"><font-awesome-icon icon="filter"/></span> + </div> + <input class="search form-control" id="filter-direct" placeholder="Filter" + autofocus="yes"/> + </div> + </div> + <b-table responsive class="shadow" :items="fqdns" :fields="fqdn_list_fields"> + <template v-slot:cell(value)="data"> + <router-link class="nowrap" :to="'/dnsvs/fqdns/'+data.value" v-if="data.item.is_nonterminal"> + {{ data.value }} + <b-badge variant="primary" :title="data.item.sub_fqdn_count + ' FQDNs unter diesem FQDN'"> + {{data.item.sub_fqdn_count}} + </b-badge> + <b-badge variant="primary" v-if="data.item.type == 'domain'">Domain</b-badge> + </router-link> + <template v-else>{{data.value}}</template> + <b-badge variant="danger" :to="'/dnsvs/fqdns/' + data.item.value + '/records'" v-if="data.item.has_rr" title="Resource-Records auf FQDN vorhanden"> + RRs vorhanden + </b-badge> + </template> + <template v-slot:cell(info)="data"> + <b-dropdown> + <template v-slot:button-content> + <font-awesome-icon :icon="['fas', 'info-circle']"></font-awesome-icon> + </template> + <b-dropdown-item :to="'/dnsvs/fqdns/' + data.item.value + '/records'">Records auf FQDN + </b-dropdown-item> + <b-dropdown-item :to="'/dnsvs/fqdns/' + data.item.value + '/references'">Referenzen auf FQDN + </b-dropdown-item> + </b-dropdown> + </template> + </b-table> + <DBEditor modal_id="create_fqdn" :input_reducer="create_fqdn_reducer" + object_function="create" object_fq_name="dns.fqdn"></DBEditor> + + </div> + </div> + </Loading> +</template> + +<script> + import DBEditor from "./DBEditor"; + import FQDNTypeService from "@/api-services.gen/dnscfg.fqdn_type" + import Loading from "./Loading"; + + export default { + name: "FQDNTable", + components: { + Loading, + DBEditor + }, + props: { + fqdns: null + }, + data() { + return { + create_fqdn_reducer: undefined, + fqdn_list_fields: [ + { + label: 'FQDN', + key: 'value', + sortable: true + }, + { + label: 'Weitere Info', + key: 'info', + sortable: false + }, + { + label: 'Beschreibung', + key: 'description', + sortable: true + }, + { + label: 'Aktionen', + key: 'actions', + sortable: false + }, + ] + } + }, + created() { + let self = this + FQDNTypeService.list(this.$store.state.netdb_axios_config, {'sorting_params_list': ['position']}).then((response) => { + let types = response.data[0] + let selections = {} + for (let t of types) { + let disp_name = t.description + disp_name += " [" + disp_name += t.is_nonterminal ? "nicht-terminal" : "terminal" + disp_name += "]" + selections[t.name] = {'display_name': disp_name} + } + self.create_fqdn_reducer = { + 'type': selections + } + }) + } + } +</script> + +<style scoped> + +</style> diff --git a/frontend/src/components/Footer.vue b/frontend/src/components/Footer.vue new file mode 100644 index 0000000000000000000000000000000000000000..5136ffec647ecac9212fc63f3ea91c660d851273 --- /dev/null +++ b/frontend/src/components/Footer.vue @@ -0,0 +1,45 @@ +<template> + <footer> + <hr> + <p class="pull-right d-print-none"> + <a target="_blank" href="https://www-net-doku.scc.kit.edu/webapi/release/dnscfg-perms/"> + <font-awesome-icon :icon="['far', 'life-ring']"/> + Hilfe/Dokumentation</a> | + <b-link to="/swagger"> + <font-awesome-icon icon="code"/> + API + </b-link> + | + <a target="_blank" href="https://git.scc.kit.edu/scc-net/net-suite/net-suite/issues"> + <font-awesome-icon icon="bug"/> + Fehler melden</a> | + Kontakt: <a href="mailto:dns-betrieb@scc.kit.edu">dns-betrieb∂scc.kit.edu</a> + </p> + <p class="pull-left">Instanz: {{$sysinfo.host_oper_mode.mode}} | + <b-link v-b-modal.net-suite-version>Version</b-link> + </p> + <b-modal content-class="text-center" id="net-suite-version" hide-footer hide-header> + <img alt="SCC" src="@/assets/img/scc_logo_small.png"/> + <h3>NET-Suite</h3> + <p> + Version <a :href="`https://git.scc.kit.edu/scc-net/net-suite/net-suite/commit/${$sysinfo.version}`" + target="_blank">{{$sysinfo.version}}</a> + </p> + Module: + <ul> + <li v-for="m in $sysinfo.mods" :key="m.mod_path">MOD_{{m.mod_path}}: + <a target="_blank" :href="`${m.gitlab_url}/commit/${m.version}`">{{m.version}}</a></li> + </ul> + </b-modal> + </footer> +</template> + +<script> + export default { + name: "Footer" + } +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/frontend/src/components/GlobalSearch.vue b/frontend/src/components/GlobalSearch.vue new file mode 100644 index 0000000000000000000000000000000000000000..80b63f3d970ce412f7f39907a7942ea8e202de44 --- /dev/null +++ b/frontend/src/components/GlobalSearch.vue @@ -0,0 +1,303 @@ +<template> + <b-form inline @submit="searchAction" class="mr-2"> + <transition name="slide"> + <b-form-group v-if="show_search || ($refs.navdropdown && $refs.navdropdown.show)" class="position-relative"> + <b-form-input + size="sm" placeholder="Suche & Schnellnavigation" id="search" ref="search" + v-model="search_input" class="mr-2 search" + @focus="search_has_focus = true" + @blur="searchLostFocus" + @keydown.tab="searchKeyboardTab($event)" + @keydown.down="searchKeyboardSelect($event,true)" + @keydown.up="searchKeyboardSelect($event,false)" + @keydown.enter="searchKeyboardSubmit($event)" + @update="keyboard_focus = -1" + /> + <b-button class="search-clear bg-transparent" size="sm" v-if="search_input !== ''" + @click="search_input = ''"> + <font-awesome-icon :icon="['fas','times']" class="text-secondary"/> + </b-button> + </b-form-group> + </transition> + <b-popover custom-class="popover-wide suggestions-popover shadow" + :show="search_input !== '' && search_has_focus" + target="search" placement="bottom"> + <div class="suggestions-wrapper"> + <div v-for="(suggestion, index) in suggestions" + :key="'search-suggestion-' + index" + class="suggestion p-3" + :class="index === keyboard_focus ? 'keyboard-focus':''" + @click="suggestionClicked($event, suggestion)"> + <font-awesome-icon class="text-secondary mr-2 suggestion-icon" + :icon="suggestion.type === 'page' ? 'link': 'question'"/> + <font-awesome-icon class="text-primary mr-2 suggestion-arrow" :icon="['fas', 'arrow-right']"/> + <b>{{ suggestion.name[0] }}</b>{{ suggestion.name[1] }}<b>{{ suggestion.name[2] }}</b> + </div> + <div v-if="suggestions && suggestions.length === 0" + class="font-italic text-center p-3"> + Keine Ergebnisse + </div> + </div> + </b-popover> + <b-button class="search-button" size="sm" @click="searchAction" + :variant="search_input === '' ? 'secondary' : 'success'"> + <font-awesome-icon :icon="['fas','search']"/> + </b-button> + <div class="search-cover-wrapper"> + <div class="search-cover"/> + </div> + </b-form> +</template> + +<script> +export default { + name: "GlobalSearch", + data() { + return { + show_search: false, + search_input: '', + search_has_focus: false, + pages: [ + { + 'name': 'DNSVS', + 'url': '/dnsvs' + }, + { + 'name': 'BCDs', + 'url': '/dnsvs/bcds' + }, + { + 'name': 'Accounts & Tokens', + 'url': '/user/tokens' + }, + { + 'name': 'API (Swagger)', + 'url': '/swagger' + }, + { + 'name': 'MACAuth', + 'url': '/macauth' + }, + ], + test_search_terms: [ + 'Easter Egg', + '00:DE:AD:BE:EF:00', + '127.0.0.1', + '100.124.99.212:25565', + 'Internet ist kaputt :(', + 'Wörter ausdenken ist mein Job.', + 'Sinn des Lebens', + 'Funktioniert die Suche überhaupt?', + 'Irgendwann wird Alles hier ersetzt.', + 'Lorem Ipsum', + 'What is love?', + 'Minecraft XOR Gate Redstone Tutorial', + 'Fortnite Epic Gamer Moments', + 'Where can I buy Gamer Girl Bathwater?', + 'How to fix ID-10-T error?', + '12345678?', + 'Is password a good password?', + 'Why my pc hacked?', + 'VIRUS HELP', + 'Why does my Windows support guy sound like his name is not George Smith?', + 'scc.fail', + 'Why internet not work?', + 'Help', + 'hellooooo?' + ], + keyboard_focus: -1 + } + }, + computed: { + suggestions() { + let suggestions = [] + this.pages.forEach(page => { + let index = page.name.toLowerCase().indexOf(this.search_input.toLowerCase()) + if (index !== -1) { + suggestions.push({ + 'name': + [page.name.substring(0, index), + page + .name.substring(index, index + this.search_input.length), + page + .name.substring(index + this.search_input.length) + ], + 'type': 'page', + 'url': page.url + }) + } + } + ) + this.test_search_terms.forEach(term => { + let index = term.toLowerCase().indexOf(this.search_input.toLowerCase()) + if (index !== -1) { + suggestions.push({ + 'name': + [term.substring(0, index), + term + .substring(index, index + this.search_input.length), + term + .substring(index + this.search_input.length) + ], + 'type': 'test' + }) + } + }) + return suggestions + } + }, + methods: { + searchAction(e) { + e.preventDefault() + if (this.search_input === '') { + this.show_search = !this.show_search + this.keyboard_focus = -1 + if (this.show_search) { + this.$nextTick(() => { + this.$refs.search.focus() + }) + } + } else { + // TODO: actually search stuff + window.console.log('Search: ' + this.search_input) + this.search_input = '' + } + }, + suggestionClicked(e, suggestion) { + if (suggestion.type === 'page' && this.$router.currentRoute !== suggestion.url) { + this.$router.push(suggestion.url) + } + if (suggestion.type === 'test') { + window.console.log('Clicked test suggestion: ' + suggestion.name[0] + suggestion.name[1] + suggestion.name[2]) + } + this.show_search = false + this.search_input = '' + }, + searchKeyboardSelect(e, down) { + e.preventDefault() + if (this.suggestions.length > 0) { + this.keyboard_focus += down ? 1 : -1 + this.keyboard_focus = Math.min(Math.max(this.keyboard_focus, -1), this.suggestions.length - 1); + } + }, + searchKeyboardTab(e) { + if (this.keyboard_focus < this.suggestions.length - 1) { + this.searchKeyboardSelect(e, true) + } + }, + searchKeyboardSubmit(e) { + if (this.keyboard_focus !== -1) { + e.preventDefault() + this.suggestionClicked(e, this.suggestions[this.keyboard_focus]) + } + }, + searchLostFocus() { + this.search_has_focus = false + this.keyboard_focus = -1 + } + } +} +</script> + +<style scoped> +.slide-enter-active, +.slide-leave-active { + transition: transform 250ms; + z-index: -10; +} + +.slide-enter, +.slide-leave-to { + transform: translateX(120%); +} + +.search-cover-wrapper { + position: relative; + width: 0; + height: 0; +} + +.search-cover { + z-index: -1; + position: absolute; + left: -30px; + top: -25px; + width: 300px; + height: 50px; + background: #343A40; +} + +.search { + max-width: 250px; +} + +.search-button { + z-index: 1; +} + +.suggestions-popover { + width: 300px; + max-height: 75vh; + overflow-y: scroll; + scrollbar-width: none; +} + +.suggestions-popover::-webkit-scrollbar { + display: none; +} + +.suggestions-wrapper { + margin: -0.5rem -0.75rem; +} + +.suggestion { + cursor: pointer; +} + +.keyboard-focus { + background: #b8b8b8 !important; +} + +.keyboard-focus > .suggestion-arrow { + display: initial; +} + +.keyboard-focus > .suggestion-icon { + display: none; +} + +.suggestion:nth-child(even) { + background: #f1f1f1; +} + +.suggestion-arrow { + display: none; + width: 16px; +} + +.suggestion-icon { + width: 16px; +} + +.suggestion:hover { + background: #d7d7d7; +} + +.suggestion:hover > .suggestion-arrow { + display: initial; +} + +.suggestion:hover > .suggestion-icon { + display: none; +} + +.search-clear, +.search-clear:focus, +.search-clear:hover, +.search-clear:active { + position: absolute; + right: 10px; + top: 1px; + border: none; +} +</style> diff --git a/frontend/src/components/Loading.vue b/frontend/src/components/Loading.vue new file mode 100644 index 0000000000000000000000000000000000000000..e27a7dc78237a6a6a579681a79ec90d02d4f6203 --- /dev/null +++ b/frontend/src/components/Loading.vue @@ -0,0 +1,34 @@ +<template> + <div class="loading-container"> + <div v-if="loaded"><slot/></div> + <div v-else class="text-center mt-3"> + <b-spinner variant="primary"/> + </div> + </div> +</template> + +<script> + export default { + name: "Loading", + props: {data: Array}, + data() { + return { + loaded: false + } + }, + watch: { + data(val) { + let loaded = true + val.forEach((item) => { + if (item == null) + loaded = false + }) + this.loaded = loaded + } + } + } +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/frontend/src/components/Navbar.vue b/frontend/src/components/Navbar.vue new file mode 100644 index 0000000000000000000000000000000000000000..28de31956cb4d8a98753ceef5d049042f24e5545 --- /dev/null +++ b/frontend/src/components/Navbar.vue @@ -0,0 +1,93 @@ +<template> + <b-navbar toggleable="lg" fixed="top" :type="$sysinfo.host_oper_mode.is_prod?'light':'dark'" + :variant="$sysinfo.host_oper_mode.is_prod?'light':'dark'" + :class="`bg-${$sysinfo.host_oper_mode.mode}` + ' shadow'"> + <!-- Brand and toggle get grouped for better mobile display --> + <b-navbar-brand to="/"> + <img class="d-inline-block align-top scc-img" alt="SCC" src="@/assets/img/scc_logo_small.png"/> + <span v-if="!$sysinfo.host_oper_mode.is_prod"> Instanz: {{ $sysinfo.host_oper_mode.mode }}</span> + </b-navbar-brand> + <b-navbar-toggle target="navbarNavDropdown"> + <font-awesome-icon icon="bars"/> + </b-navbar-toggle> + <!-- Collect the nav links, forms, and other content for toggling --> + <b-collapse is-nav id="navbarNavDropdown" ref="navdropdown"> + <b-navbar-nav> + <b-nav-item v-if="$sysinfo_js_mods.includes('dnsvs')" to="/dnsvs/" + :active="$route.path.startsWith('/dnsvs/')">DNSVS + </b-nav-item> + <b-nav-item v-if="$sysinfo_js_mods.includes('dnsvs')" to="/dhcpvs/" + :active="$route.path.startsWith('/dhcpvs/')">DHCPVS + </b-nav-item> + <b-nav-item v-if="$sysinfo_js_mods.includes('macauth')" to="/macauth/" + :active="$route.path.startsWith('/macauth')">MACAuth + </b-nav-item> + <b-nav-item v-if="$sysinfo_mods_by_name['dhcp_leases']" to="/dhcp-leases/" + :active="$route.path.startsWith('/dhcp-leases/')">DHCP-Leases + </b-nav-item> + <b-nav-item v-if="$sysinfo_js_mods.includes('usr_netdoc')" to="/usr_netdoc/" + :active="$route.path.startsWith('/usr_netdoc/')"> + NETDOC + </b-nav-item> + <b-nav-item :href="$sysinfo.host_oper_mode.is_prod?'https://www-net.scc.kit.edu/~netadmin/natvs/user/wrapper.cgi/':`https://www-net-${$sysinfo.host_oper_mode.mode}.scc.kit.edu/~netadmin/natvs/user/wrapper.cgi/`" target="_blank"> + NATVS+ + </b-nav-item> + </b-navbar-nav> + <b-navbar-nav class="ml-auto"> + <GlobalSearch/> + <b-nav-item :active="$store.state.show_sidebar" + @click.stop="$store.commit('showSidebar', !$store.state.show_sidebar)"> + <font-awesome-icon :icon="['fas', 'tasks']"/> + Geplante Aktionen + <b-badge variant="primary">{{ $store.state.ta_list ? $store.state.ta_list.length : 0 }}</b-badge> + </b-nav-item> + <b-nav-item-dropdown v-if="$store.state.user" right + :toggle-class="$route.path.startsWith('/user/')?'active':''"> + <template slot="button-content"> + <font-awesome-icon :icon="['fas', 'user']"/> + <span v-if="$store.state.user"> {{ $store.state.user.login_name }}</span> + </template> + <template v-if="$store.state.user"> + <b-dropdown-item to="/user/tokens" :active="$route.path === '/user/tokens'"> + <font-awesome-icon :icon="['fas', 'code']"/> + Accounts & Tokens + </b-dropdown-item> + <b-dropdown-divider/> + <b-dropdown-item @click="logout"> + <font-awesome-icon :icon="['fas', 'sign-out-alt']"/> + Abmelden + </b-dropdown-item> + </template> + </b-nav-item-dropdown> + <b-nav-item v-else to="/login"> + <font-awesome-icon :icon="['fas', 'sign-in-alt']"/> + <span>Anmelden</span> + </b-nav-item> + </b-navbar-nav> + </b-collapse><!-- /.navbar-collapse --> + </b-navbar> +</template> + +<script> +import LoginService from '@/api-services/login.service' +import GlobalSearch from "@/components/GlobalSearch"; + +export default { + name: "Navbar", + components: {GlobalSearch}, + data() { + return {} + }, + methods: { + async logout() { + if (this.$store.token == null) { + await LoginService.logout(null) + } else { + await LoginService.logout(this.$store.state.token.pk || null) + } + this.$store.commit('logout') + await this.$router.push('/login') + } + } +} +</script> diff --git a/frontend/src/components/Sidebar.vue b/frontend/src/components/Sidebar.vue new file mode 100644 index 0000000000000000000000000000000000000000..d8100650b4ccf98284b82cc1643748f5c5eb3251 --- /dev/null +++ b/frontend/src/components/Sidebar.vue @@ -0,0 +1,17 @@ +<template> + <div id="sidebar" style="height: 100%"> + <TransactionList style="height: 100%; overflow-y: auto"/> + </div> +</template> + +<script> + import TransactionList from "./TransactionList"; + export default { + name: "Sidebar", + components: {TransactionList} + } +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/frontend/src/components/TransactionList.vue b/frontend/src/components/TransactionList.vue new file mode 100644 index 0000000000000000000000000000000000000000..828744fd27d53af2da2e418acab1679a42668821 --- /dev/null +++ b/frontend/src/components/TransactionList.vue @@ -0,0 +1,250 @@ +<template> + <b-overlay spinner-variant="primary" opacity="0.6" :show="$store.state.executing_transaction"> + <div class="transaction-list invisible-scrollbar p-3"> + <b-button-toolbar justify> + <b-button-group class="mx-auto shadow"> + <b-button-group v-b-tooltip.hover title="Rückgängig machen"> + <b-button :disabled="!canUndo" @click="undo"> + <font-awesome-icon icon="undo"/> + </b-button> + </b-button-group> + <b-button-group v-b-tooltip.hover title="Wiederherstellen"> + <b-button :disabled="!canRedo" @click="redo"> + <font-awesome-icon icon="redo"/> + </b-button> + </b-button-group> + </b-button-group> + </b-button-toolbar> + <hr/> + <div v-if="$store.state.ta_list === null || $store.state.ta_list.length === 0" + class="font-italic text-center mt-3"> + Keine Aktionen geplant + </div> + <Draggable v-else v-model="$store.state.ta_list" @start="drag=true" @end="drag=false" handle=".handle"> + <b-card v-for="(element, index) in $store.state.ta_list" :key="element.id" + :border-variant="function2variant(element.object_function)" class="mb-3 shadow" no-body> + <div class="element-number handle" + :class="`badge badge-${function2variant(element.object_function)}`"> + {{ index + 1 }} + <!-- TODO: Mouse feedback on click --> + <div class="move-icons"> + <font-awesome-icon class="move-icon" + :icon="['fas','caret-up']" + @click="$store.state.ta_list.move(index, index - 1)"/> + <font-awesome-icon class="move-icon" + :icon="['fas','caret-down']" + @click="$store.state.ta_list.move(index, index + 1)"/> + </div> + </div> + <b-card-body class="element-content"> + {{ element.object_fq_name }} {{ function2text(element.object_function).toLowerCase() }}:<br/> + <span v-if="element.object_title">{{ element.object_title }}</span> + <ul> + <li v-for="field in element.preview_fields" v-bind:key="field"> + {{ element.func_descr[field].description_sys_scope }}: + <span v-if="element.object_function=='update'"><br/><s><code + class="text-danger">{{ element.parameters.old[field] }}</code></s><br/><code + class="text-success">{{ element.parameters.new[field] }}</code></span> + <code v-else>{{ element.parameters.new[field] }}</code> + </li> + </ul> + <div class="error-warning" + v-if="$store.state.transaction_result && $store.state.transaction_result.type === 'error' && $store.state.transaction_result.uuid === element.uuid"> + <font-awesome-icon :icon="['fas','exclamation-triangle']"/> + {{ $store.state.transaction_result.error.error.description }} + </div> + <b-button-group class="d-flex"> + <b-button + :disabled="should_edit || $store.state.executing_transaction || element.object_function == 'delete'" + variant="outline-primary" + :id="'button-edit-action-' + index" + @click="editElement(element)"> + <font-awesome-icon :icon="['far', 'edit']"/> + </b-button> + <b-tooltip placement="bottom" :target="'button-edit-action-' + index" + triggers="hover" variant="primary" container="sidebar"> + Aktion bearbeiten + </b-tooltip> + <b-button :disabled="should_edit || $store.state.executing_transaction" + variant="outline-danger" + :id="'button-delete-action-' + index" + @click="$store.commit('removeTransactionElement', element)"> + <font-awesome-icon :icon="['far', 'trash-alt']"/> + </b-button> + <b-tooltip placement="bottom" :target="'button-delete-action-' + index" + triggers="hover" variant="danger" container="sidebar"> + Aktion löschen + </b-tooltip> + </b-button-group> + </b-card-body> + </b-card> + </Draggable> + <hr/> + <b-button-group class="d-flex mb-3 shadow"> + <b-button + :disabled="$store.state.ta_list == null || $store.state.ta_list.length === 0 || $store.state.executing_transaction" + @click="$store.commit('emptyTransactionList')" variant="outline-danger"> + <font-awesome-icon :icon="['far', 'trash-alt']"/> + <span class="text-nowrap"> + Liste löschen + </span> + </b-button> + <b-button + :disabled="$store.state.ta_list == null || $store.state.ta_list.length === 0 || $store.state.executing_transaction" + variant="primary" @click="$store.commit('testTransaction')"> + <font-awesome-icon :icon="['fas', 'vial']"/> + Testen + </b-button> + <b-button + :disabled="$store.state.ta_list == null || $store.state.ta_list.length === 0 || $store.state.executing_transaction" + variant="success" @click="executeTa"> + <font-awesome-icon :icon="['far', 'paper-plane']"/> + Anwenden + </b-button> + </b-button-group> + <template v-if="$store.state.transaction_result"> + <hr/> + <b-button-close @click="$store.commit('removeTransactionResult')"/> + <template v-if="$store.state.transaction_result.type === 'error'"> + <p class="text-center text-danger"> + <font-awesome-icon :icon="['fas','exclamation-triangle']"/> + Weitere Fehlerinformationen: + </p> + <CopyField class="shadow" variant="danger" + :text="JSON.stringify($store.state.transaction_result.error, null, 1)" + multiline/> + </template> + <template v-if="$store.state.transaction_result.type === 'success'"> + <p class="text-center text-success"> + <font-awesome-icon :icon="['fas','check-circle']"/> + Transaktion erfolgreich angewendet. + </p> + </template> + <template v-if="$store.state.transaction_result.type === 'test-success'"> + <p class="text-center text-primary"> + <font-awesome-icon :icon="['fas','vial']"/> + Transaktion erfolgreich getestet. + </p> + </template> + </template> + <DBEditor modal_id="ta-edit" + :object_fq_name="edit_elem.object_fq_name" + :object_function="edit_elem.object_function" + :old_uuid="edit_elem.uuid" + :presets="edit_elem.parameters.new" + :old_data="edit_elem.parameters.old" + :non_optionals="edit_elem.non_optionals" + :non_optionals_order="edit_elem.non_optionals_order" + :input_reducer="edit_elem.input_reducer" + :preview_fields="edit_elem.preview_fields" + :object_title="edit_elem.object_title" + @ready="modalReady()" + ></DBEditor> + </div> + </b-overlay> +</template> + +<script> +import Draggable from 'vuedraggable'; +import DBEditor from "./DBEditor"; +import TransactionUtil from '@/util/transactionutil'; +import Vue from 'vue' +import CopyField from "./CopyField"; + +export default { + name: "TransactionList", + components: {CopyField, Draggable, DBEditor}, + methods: { + function2variant: TransactionUtil.function2variant, + function2text: TransactionUtil.function2text, + editElement(element) { + this.should_edit = this.edit_elem !== element + this.edit_elem = element + if (!this.should_edit) { + this.$bvModal.show('ta-edit') + } + }, + modalReady() { + if (this.should_edit && this.edit_elem != null) { + this.should_edit = false + let self = this + Vue.nextTick(function () { + self.$bvModal.show('ta-edit') + }) + } + }, + move(from, to) { + this.$store.state.ta_list.move(from, to); + }, + async executeTa() { + await this.$store.dispatch('executeTransaction') + if (this.$store.state.transaction_result.type != 'error') { + this.$store.commit('reloadRouterComp') + } + } + }, + data() { + return { + edit_elem: { + object_fq_name: null, + object_function: 'dummy', + uuid: 'dummy', + parameters: {new: {}, old: {}} + }, + should_edit: false + } + } +} +</script> + +<style scoped> +.element-number { + position: absolute; + top: 0; + bottom: 0; + border-radius: 0; + font-size: 100%; + padding-left: 0; + padding-right: 0; + text-align: center; + width: 30px; +} + +.handle { + cursor: grab; +} + +.move-icons { + position: absolute; + bottom: 10px; +} + +.move-icon { + position: relative; + display: block; + margin-left: auto; + margin-right: auto; + bottom: 0; + font-size: 24px; + width: 30px; + user-select: none; + z-index: 90001; + cursor: auto; +} + +.element-content { + margin-left: 30px; +} + +.element-buttons { + position: relative; + right: 0; + top: 0; +} + +.error-warning { + position: relative; + bottom: 0; + color: red; +} +</style> diff --git a/frontend/src/components/fqdn-record_table.vue b/frontend/src/components/fqdn-record_table.vue deleted file mode 100644 index 3e56d6935ff602cf4459cfe759dad57a70043d5a..0000000000000000000000000000000000000000 --- a/frontend/src/components/fqdn-record_table.vue +++ /dev/null @@ -1,77 +0,0 @@ -<template> - <div class="fqdn_table"> - <div class="text-center" v-if="!fqdn_rrs"> - <b-spinner style="width: 3rem; height: 3rem;" type="grow" label="Loading..."></b-spinner> - </div> - <div v-if="fqdn_rrs"> - <div class="net-filter-direct d-print-none"> - <div class="input-group"> - <div class="input-group-prepend"> - <span class="input-group-text"><font-awesome-icon icon="filter"></font-awesome-icon></span> - </div> - <input class="search form-control" id="filter-direct" placeholder="Filter" - autofocus="yes"/> - </div> - </div> - <table class="table table-striped"> - <tr> - <th colspan="2" class="vertical-center">{{ $colnames['NTree']['fqdn'].short_title_abs }} <a - class="sort" data-order="asc" data-target="fqdn" href="javascript:void(0)"><i - class="fa fa-sort-asc"></i></a></th> - <th class="vertical-center">{{ $colnames['NTree']['description'].short_title_abs }} <a class="sort" - data-order="" - data-target="description" - href="javascript:void(0)"><i - class="fa fa-sort"></i></a></th> - <th class="vertical-center">Record-Typ</th> - <th class="vertical-center">Record-Data</th> - <th class="vertical-center">Bereiche</th> - <th class="vertical-center">Aktionen</th> - <th><a class="btn btn-outline-success pull-right"><i - class="fa fa-plus"></i></a></th> - </tr> - <tbody class="list"> - <tr v-for="(f, index) in fqdn_rrs" :key="f.rr_data"> - <td :rowspan="fqdn_rrs.length" class="fqdn vertical-center" v-if="index == 0"> - {{f.NTree.fqdn}} - </td> - <td :rowspan="fqdn_rrs.length" v-if="index == 0" class="vertical-center"> - <b-dropdown > - <template slot="button-content"> - <font-awesome-icon :icon="['fas', 'info-circle']"></font-awesome-icon> - </template> - <b-dropdown-item :to="`/dnsvs/fqdns/${f.NTree.fqdn}/refs`">Alle Referenzen auf FQDN</b-dropdown-item> - </b-dropdown> - </td> - <td :rowspan="fqdn_rrs.length" class="description" v-if="index == 0">{{ f.NTree.description }}</td> - <td>{{f.rr.inttype.dns_rr_type_name}} - </td> - <td><code>{{f.rr.rr_data}}</code></td> - <td> - <ul class="list-unstyled"> - <li v-for="r in f.ranges" :key="r"> - <b-link :to="`/dnsvs/ranges/${r}`">{{r}}</b-link> - </li> - </ul> - </td> - <td colspan="2"></td> - </tr> - </tbody> - </table> - - </div> - </div> -</template> - -<script> - export default { - name: "fqdn_table", - props: { - fqdn_rrs: null, - } - } -</script> - -<style scoped> - -</style> diff --git a/frontend/src/components/fqdn-table.vue b/frontend/src/components/fqdn-table.vue deleted file mode 100644 index 155341d07975fbafe9eb686dcb5236de3964424b..0000000000000000000000000000000000000000 --- a/frontend/src/components/fqdn-table.vue +++ /dev/null @@ -1,67 +0,0 @@ -<template> - <div class="fqdn_table"> - <div class="text-center" v-if="!fqdns"> - <b-spinner style="width: 3rem; height: 3rem;" type="grow" label="Loading..."></b-spinner> - </div> - <div v-if="fqdns"> - <div class="net-filter-direct d-print-none"> - <div class="input-group"> - <div class="input-group-prepend"> - <span class="input-group-text"><font-awesome-icon icon="filter"></font-awesome-icon></span> - </div> - <input class="search form-control" id="filter-direct" placeholder="Filter" - autofocus="yes"/> - </div> - </div> - <table class="table table-striped"> - <tr> - <th colspan="2" class="vertical-center">{{ $colnames['NTree']['fqdn'].short_title_abs }} <a - class="sort" data-order="asc" data-target="fqdn" href="javascript:void(0)"><i - class="fa fa-sort-asc"></i></a></th> - <th class="vertical-center">{{ $colnames['NTree']['description'].short_title_abs }} <a class="sort" - data-order="" - data-target="description" - href="javascript:void(0)"><i - class="fa fa-sort"></i></a></th> - <th class="vertical-center">Aktionen</th> - <th><a class="btn btn-outline-success pull-right"><i - class="fa fa-plus"></i></a></th> - </tr> - <tbody class="list"> - <tr v-for="f in fqdns" :key="f.value"> - <td class="fqdn"> - <b-link v-if="f.sub_fqdn_count > 0" :to="'/dnsvs/fqdns/'+f.value">{{f.value}}</b-link> - <span v-if="f.sub_fqdn_count == 0">{{f.value}}</span> - <b-badge variant="primary" v-if="f.type=='domain'" title="Anzahl der FQDNs unter der Domain"> - {{f.sub_fqdn_count}} - </b-badge> - <b-badge variant="secondary" v-if="!f.type=='domain'" title="Anzahl der FQDNs unter der Domain"> - {{f.sub_fqdn_count}} - </b-badge> - <b-badge variant="info" v-if="f.type=='domain'">Domain</b-badge> - </td> - <td> - </td> - <td class="description">{{ f.description }}</td> - <td colspan="2"> - </td> - </tr> - </tbody> - </table> - - </div> - </div> -</template> - -<script> - export default { - name: "fqdn_table", - props: { - fqdns: null - } - } -</script> - -<style scoped> - -</style> diff --git a/frontend/src/icons.js b/frontend/src/icons.js index 97ff09f050878357b24a7e9b74799bf3002d32a2..70ade738afea065c88a4f826b682bf25e7ca2ef9 100644 --- a/frontend/src/icons.js +++ b/frontend/src/icons.js @@ -4,6 +4,7 @@ import {FontAwesomeIcon} from '@fortawesome/vue-fontawesome' Vue.component('font-awesome-icon', FontAwesomeIcon) + import { faExclamationTriangle, faCircleNotch, @@ -19,10 +20,71 @@ import { faPlus, faChevronUp, faChevronDown, - faCopy + faCopy, + faTasks, + faUndo, + faRedo, + faCaretUp, + faCaretDown, + faVial, + faCheckCircle, + faSearch, + faSignInAlt, + faSignOutAlt, + faUser, + faEye, + faLink, + faQuestion, + faTimes } from '@fortawesome/free-solid-svg-icons' -import {faUser, faEdit, faTrashAlt, faCheckSquare, faLifeRing} from '@fortawesome/free-regular-svg-icons' -library.add(faExclamationTriangle, faFilter, faInfoCircle, faBars, faArrowRight, faSort, faSortUp, faSortDown, faCode, faBug) -library.add(faCircleNotch, faPlus, faChevronUp, faChevronDown, faCopy) -library.add(faUser, faEdit, faTrashAlt, faCheckSquare, faLifeRing) +import { + faOpenid +} from '@fortawesome/free-brands-svg-icons' + +import { + faEdit, + faTrashAlt, + faCheckSquare, + faLifeRing, + faPaperPlane +} from '@fortawesome/free-regular-svg-icons' + +library.add( + faExclamationTriangle, + faCircleNotch, + faFilter, + faInfoCircle, + faBars, + faArrowRight, + faSort, + faSortUp, + faSortDown, + faCode, + faBug, + faPlus, + faChevronUp, + faChevronDown, + faCopy, + faTasks, + faUndo, + faRedo, + faCaretUp, + faCaretDown, + faVial, + faCheckCircle, + faSearch, + faSignInAlt, + faSignOutAlt, + faUser, + faEdit, + faTrashAlt, + faCheckSquare, + faLifeRing, + faPaperPlane, + faOpenid, + faEye, + faLink, + faQuestion, + faTimes +) diff --git a/frontend/src/main.js b/frontend/src/main.js index c41512bd1d870d7790fa8eea89946f213f57c73a..306a27af4755b415e470453daedc50b7c59e8395 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -3,22 +3,28 @@ import App from './App.vue' import router from './router' import Vuex from 'vuex' import Axios from 'axios'; -import ColnameService from './api-services/colnames.service' import SystemInfoService from './api-services/system_info.service' import BootstrapVue from 'bootstrap-vue' -import titleMixin from './mixins/titleMixin' -import isMobileMixin from './mixins/isMobileMixin' +import titleMixin from './mixins/title_mixin' +import isMobileMixin from './mixins/is_mobile_mixin' import VueCtkDateTimePicker from 'vue-ctk-date-time-picker' import 'vue-ctk-date-time-picker/dist/vue-ctk-date-time-picker.css' import './icons' +import sharedMutations from 'vuex-shared-mutations' +import vuexUndoRedo from './mixins/vuex-undo-redo' + +import APIUtil from './util/apiutil' +import WAPITransactionSerice from './api-services/transaction.service' +import LoginService from '@/api-services/login.service' Vue.use(Vuex) Vue.mixin(titleMixin) Vue.mixin(isMobileMixin) Vue.use(BootstrapVue) +Vue.use(vuexUndoRedo, {emptyStateMutation: 'emptyState'}) Vue.component('VueCtkDateTimePicker', VueCtkDateTimePicker) @@ -28,19 +34,65 @@ if (stored_token != null) { } let netdb_axios_config_tmp = { headers: { - 'Authorization': stored_token, + 'Authorization': 'Bearer ' + stored_token, 'Content-Type': 'application/json' } } +//TODO: Refactor prototype definitions into their own file +Array.prototype.move = function (from, to) { + this.splice(to, 0, this.splice(from, 1)[0]); + return this; +} + const store = new Vuex.Store({ state: { logged_in: window.localStorage.getItem('user') != null, user: JSON.parse(window.localStorage.getItem('user')), token: JSON.parse(window.localStorage.getItem('token')), - netdb_axios_config: netdb_axios_config_tmp + ta_list: JSON.parse(window.localStorage.getItem('ta_list')), + netdb_axios_config: netdb_axios_config_tmp, + done: JSON.parse(window.localStorage.getItem('done')) || [], + undone: JSON.parse(window.localStorage.getItem('undone')) || [], + undo_redo_new_mutaion: JSON.parse(window.localStorage.getItem('undo_redo_new_mutation')) || true, + transaction_result: JSON.parse(window.localStorage.getItem('transaction_result')) || null, + executing_transaction: JSON.parse(window.localStorage.getItem('executing_transaction')) || false, + show_sidebar: JSON.parse(window.localStorage.getItem('show_sidebar')) || false, + reload_count: 0 }, mutations: { + emptyState(state) { + state.ta_list = null; + window.localStorage.setItem('ta_list', JSON.stringify(state.ta_list)) + }, + setUndoRedoNewMutation(state, payload) { + state.undo_redo_new_mutaion = payload + window.localStorage.setItem('undo_redo_new_mutation', JSON.stringify(state.undo_redo_new_mutaion)) + }, + popUndoRedoDone(state) { + state.done.pop() + window.localStorage.setItem('done', JSON.stringify(state.done)) + }, + popUndoRedoUndone(state) { + state.undone.pop() + window.localStorage.setItem('undone', JSON.stringify(state.undone)) + }, + pushUndoRedoDone(state, payload) { + state.done.push(payload) + window.localStorage.setItem('done', JSON.stringify(state.done)) + }, + pushUndoRedoUndone(state, payload) { + state.undone.push(payload) + window.localStorage.setItem('undone', JSON.stringify(state.undone)) + }, + clearUndoRedoDone(state) { + state.done = [] + window.localStorage.setItem('done', JSON.stringify(state.done)) + }, + clearUndoRedoUndone(state) { + state.undone = [] + window.localStorage.setItem('undone', JSON.stringify(state.undone)) + }, login(state, payload) { let user = payload.user let token = payload.token @@ -51,7 +103,7 @@ const store = new Vuex.Store({ window.localStorage.setItem('token', JSON.stringify(token)) state.netdb_axios_config = { headers: { - 'Authorization': token.token, + 'Authorization': 'Bearer ' + token.token, 'Content-Type': 'application/json' } } @@ -60,18 +112,140 @@ const store = new Vuex.Store({ state.logged_in = false state.user = null state.token = null + state.ta_list = [] + state.undo_redo_new_mutaion = true + state.undone = [] + state.done = [] + state.transaction_result = null + state.executing_transaction = false + state.show_sidebar = false + window.localStorage.removeItem('done') + window.localStorage.removeItem('undone') + window.localStorage.removeItem('undo_redo_new_mutation') window.localStorage.removeItem('user') window.localStorage.removeItem('token') + window.localStorage.removeItem('ta_list') + window.localStorage.removeItem('transaction_result') + window.localStorage.removeItem('executing_transaction') + window.localStorage.removeItem('show_sidebar') state.netdb_axios_config = { headers: { 'Authorization': null, 'Content-Type': 'application/json' } } + }, + removeTransactionElement(state, payload) { + for (let i = 0; i < state.ta_list.length; i++) { + if (state.ta_list[i].uuid === payload.uuid) { + state.ta_list.splice(i, 1) + break + } + } + window.localStorage.setItem('ta_list', JSON.stringify(state.ta_list)) + }, + addTransactionElement(state, payload) { + if (state.ta_list == null) { + state.ta_list = [] + } + let update = false + for (let i = 0; i < state.ta_list.length; i++) { + if (state.ta_list[i].uuid === payload.old_uuid) { + update = true + Vue.set(state.ta_list, i, payload) + break + } + } + if (!update) { + state.ta_list.push(payload) + } + window.localStorage.setItem('ta_list', JSON.stringify(state.ta_list)) + }, + emptyTransactionList(state) { + state.ta_list = [] + window.localStorage.setItem('ta_list', JSON.stringify(state.ta_list)) + }, + async testTransaction(state) { + this.commit('setTransactionBusy', true) + + let api_list = APIUtil.buildAPITaFromTaObjectArray(state.ta_list) + try { + let res = await WAPITransactionSerice.executeDry(state.netdb_axios_config, api_list) + window.console.debug(res) + state.transaction_result = { + 'type': 'test-success' + } + } catch (e) { + window.console.debug(e.response) + state.transaction_result = { + 'type': 'error', + 'error': e.response.data.exception, + 'uuid': state.ta_list[APIUtil.getAPIErrorIndexFromDBException(e.response.data.exception)].uuid + } + } finally { + this.commit('setTransactionBusy', false) + window.localStorage.setItem('transaction_result', JSON.stringify(state.transaction_result)) + } + }, + showSidebar(state, show) { + state.show_sidebar = show + window.localStorage.setItem('show_sidebar', show) + }, + setTransactionBusy(state, busy) { + state.executing_transaction = busy + window.localStorage.setItem('executing_transaction', busy) + }, + removeTransactionResult(state) { + state.transaction_result = null + window.localStorage.removeItem('transaction_result') + }, + reloadRouterComp(state) { + state.reload_count++ } - } -}) + }, + actions: { + async executeTransaction({commit, state}) { + commit('setTransactionBusy', true) + let api_list = APIUtil.buildAPITaFromTaObjectArray(state.ta_list) + try { + let res = await WAPITransactionSerice.execute(state.netdb_axios_config, api_list) + window.console.debug(res) + state.ta_list = [] + state.undo_redo_new_mutaion = true + state.undone = [] + state.done = [] + window.localStorage.removeItem('done') + window.localStorage.removeItem('undone') + window.localStorage.removeItem('undo_redo_new_mutation') + window.localStorage.removeItem('ta_list') + state.transaction_result = { + 'type': 'success' + } + } catch (e) { + window.console.debug(e.response) + state.transaction_result = { + 'type': 'error', + 'error': e.response.data.exception, + 'uuid': state.ta_list[APIUtil.getAPIErrorIndexFromDBException(e.response.data.exception)].uuid + } + } finally { + commit('setTransactionBusy', false) + window.localStorage.setItem('transaction_result', JSON.stringify(state.transaction_result)) + } + }, + }, + plugins: [ + sharedMutations( + { + predicate: + ['pushUndoRedoUndone', 'popUndoRedoUndone', 'clearUndoRedoUndone', 'setUndoRedoNewMutation', 'clearUndoRedoDone', 'popUndoRedoDone', 'emptyState', 'login', 'logout', 'addTransactionElement', 'removeTransactionElement', 'emptyTransactionList', 'removeTransactionResult', 'setTransactionBusy'] + } + ) + ], +}) +// Undo-Redo-watched mutations +const watchedMutations = ['addTransactionElement', 'removeTransactionElement', 'emptyTransactionList'] Vue.config.errorHandler = function (err, vm, info) { // handle error @@ -88,16 +262,18 @@ Axios.interceptors.response.use( function (response) { return response; }, - function (error) { + async function (error) { // handle error if (error.response) { var stat = error.response.status switch (stat) { case 401: + await LoginService.logout(null) store.commit('logout') router.push('/login') break; case 403: + await LoginService.logout(null) store.commit('logout') router.push('/login') break; @@ -112,27 +288,31 @@ Axios.interceptors.response.use( Vue.config.productionTip = false Axios.defaults.baseURL = '/'; -ColnameService.getAll().then((response) => { - Vue.prototype.$colnames = response.data - Object.freeze(Vue.prototype.$colnames) - SystemInfoService.getAll().then((sysinfo) => { - Vue.prototype.$sysinfo = sysinfo.data - let mods_by_name = {} - for (var i = 0; i < sysinfo.data.mods.length; i++) { - mods_by_name[sysinfo.data.mods[i].name] = sysinfo.data.mods[i] +SystemInfoService.getAll().then((sysinfo) => { + Vue.prototype.$sysinfo = sysinfo.data + let mods_by_name = {} + for (var i = 0; i < sysinfo.data.mods.length; i++) { + mods_by_name[sysinfo.data.mods[i].name] = sysinfo.data.mods[i] + } + Vue.prototype.$sysinfo_mods_by_name = mods_by_name + Vue.prototype.$sysinfo_js_mods = sysinfo.data.js_mods + let v = new Vue({ + router, + store, + render: h => h(App), + beforeCreate: function () { } - Vue.prototype.$sysinfo_mods_by_name = mods_by_name - new Vue({ - router, - store, - render: h => h(App), - beforeCreate: function () { + }).$mount('#app') + if (v.$store) { + v.$store.subscribe((mutation, state) => { + if (watchedMutations.indexOf(mutation.type) >= 0) { + v.$store.commit('pushUndoRedoDone', mutation) + if (state.undo_redo_new_mutaion) { + window.console.debug("New mutation") + v.$store.commit('clearUndoRedoUndone') + } } - }).$mount('#app') + }); } - ) -}).catch((err) => { - window.console.log(err) - alert(err) -}) - + } +) diff --git a/frontend/src/mixins/isMobileMixin.js b/frontend/src/mixins/is_mobile_mixin.js similarity index 100% rename from frontend/src/mixins/isMobileMixin.js rename to frontend/src/mixins/is_mobile_mixin.js diff --git a/frontend/src/mixins/titleMixin.js b/frontend/src/mixins/title_mixin.js similarity index 100% rename from frontend/src/mixins/titleMixin.js rename to frontend/src/mixins/title_mixin.js diff --git a/frontend/src/mixins/vuex-undo-redo.js b/frontend/src/mixins/vuex-undo-redo.js new file mode 100644 index 0000000000000000000000000000000000000000..6579a68588dfcc231323c0b6ec7a6c6d77ffaed9 --- /dev/null +++ b/frontend/src/mixins/vuex-undo-redo.js @@ -0,0 +1,53 @@ +// Heavily modified version of +// https://github.com/anthonygore/vuex-undo-redo + +export default { + install(Vue, options = {}) { + window.console.debug("install") + if (!Vue._installedPlugins.find(plugin => plugin.Store)) { + throw new Error("VuexUndoRedo plugin must be installed after the Vuex plugin.") + } + Vue.mixin({ + computed: { + canRedo() { + return this.$store.state.undone.length !== 0 && !this.$store.state.executing_transaction + }, + canUndo() { + return this.$store.state.done.length !== 0 && !this.$store.state.executing_transaction + } + }, + methods: { + redo() { + let commit = this.$store.state.undone[this.$store.state.undone.length-1]; + this.$store.commit('popUndoRedoUndone'); + this.$store.commit('setUndoRedoNewMutation', false); + switch (typeof commit.payload) { + case 'object': + this.$store.commit(`${commit.type}`, Object.assign({}, commit.payload)); + break; + default: + this.$store.commit(`${commit.type}`, commit.payload); + } + this.$store.commit('setUndoRedoNewMutation', true); + }, + undo() { + this.$store.commit('pushUndoRedoUndone', this.$store.state.done[this.$store.state.done.length-1]) + this.$store.commit('popUndoRedoDone'); + this.$store.commit('setUndoRedoNewMutation', false); + this.$store.commit(options.emptyStateMutation); + this.$store.state.done.forEach(mutation => { + switch (typeof mutation.payload) { + case 'object': + this.$store.commit(mutation.type, Object.assign({}, mutation.payload)); + break; + default: + this.$store.commit(mutation.type, mutation.payload); + } + this.$store.commit('popUndoRedoDone'); + }); + this.$store.commit('setUndoRedoNewMutation', true); + } + } + }); + }, +} diff --git a/frontend/src/router.js b/frontend/src/router.js index ccb370febebe5de9040815997eabe442ef203679..f31fb83798bdf3abef121c18bc2bc63a2d6f8502 100644 --- a/frontend/src/router.js +++ b/frontend/src/router.js @@ -13,7 +13,7 @@ export default new Router({ { path: '/swagger', name: 'wagger-ui', - component: () => import('./views/swagger/ui.vue'), + component: () => import('./views/Swagger.vue'), meta: { resolveName: function () { return "API-Browser" @@ -30,20 +30,49 @@ export default new Router({ } } }, + { + path: '/oic_login', + name: 'login_oic', + component: () => import('./views/OICLogin.vue'), + meta: { + resolveName: function () { + return "OIC Login" + } + } + }, { path: '/user/tokens', name: 'tokens', - component: () => import('./views/netdb/tokens.vue'), + component: () => import('./views/netdb/Tokens.vue'), + meta: { + resolveName: function () { + return "Accounts & Tokens" + } + } + }, + { + path: '/macauth', + name: 'macauth', + component: () => import('./views/macauth/MACAuth.vue'), + meta: { + resolveName: function () { + return "MACAuth" + } + } + }, + { + path: '/netdoc/map', + name: 'map', + component: () => import('./views/nd/Map.vue'), meta: { resolveName: function () { - return "API-Tokens" + return "Campusplan" } } }, { path: '/dnsvs', - name: 'dnsvs', - component: () => import('./views/dnsvs/main.vue'), + component: () => import('./views/dnsvs/Main.vue'), meta: { resolveName: function () { return "DNSVS" @@ -56,7 +85,7 @@ export default new Router({ { path: 'fqdns', name: 'fqdns', - component: () => import('./views/dnsvs/entry.vue'), + component: () => import('./views/dnsvs/Entry.vue'), meta: { resolveName: function () { return "FQDNs" @@ -65,8 +94,8 @@ export default new Router({ }, { path: 'fqdns/:fqdn', - name: 'domain_inspect', - component: () => import('./views/dnsvs/domain_inspect.vue'), + name: 'DomainInspect', + component: () => import('./views/dnsvs/DomainInspect.vue'), meta: { resolveName: function (query) { return (query.fqdn === '$') ? '.' : query.fqdn @@ -94,9 +123,9 @@ export default new Router({ } }, { - path: 'fqdns/:fqdn/recs', + path: 'fqdns/:fqdn/records', name: 'fqdn_records', - component: () => import('./views/dnsvs/fqdn_recs.vue'), + component: () => import('./views/dnsvs/FQDNRecords.vue'), meta: { resolveName: function () { return "Records" @@ -108,9 +137,9 @@ export default new Router({ } }, { - path: 'fqdns/:fqdn/refs', + path: 'fqdns/:fqdn/references', name: 'fqdn_references', - component: () => import('./views/dnsvs/fqdn_refs.vue'), + component: () => import('./views/dnsvs/FQDNReferences.vue'), meta: { resolveName: function () { return "Referenzen auf FQDN" @@ -124,7 +153,7 @@ export default new Router({ { path: 'bcds', name: 'bcds', - component: () => import('./views/dnsvs/entry.vue'), + component: () => import('./views/dnsvs/Entry.vue'), meta: { resolveName: function () { return "BCDs" @@ -133,7 +162,7 @@ export default new Router({ }, { path: 'bcds/:name', - component: () => import('./views/dnsvs/bcd_records.vue'), + component: () => import('./views/dnsvs/BCDRecords.vue'), meta: { resolveName: function (query) { return query.name diff --git a/frontend/src/util/apiutil.js b/frontend/src/util/apiutil.js index 27f8d635ac6ae5ad34044729f13ac2070a9ca840..9f228acde06ce673ed74c919e355520567ad9867 100644 --- a/frontend/src/util/apiutil.js +++ b/frontend/src/util/apiutil.js @@ -1,3 +1,5 @@ +import transactionutil from "@/util/transactionutil"; + export default { dict_by_value_of_array(arr, val) { let res = {} @@ -9,7 +11,7 @@ export default { dict_of_lists_by_value_of_array(arr, val) { let res = {} for (let i = 0; i < arr.length; i++) { - if(!(arr[i][val] in res)) { + if (!(arr[i][val] in res)) { res[arr[i][val]] = [] } res[arr[i][val]].push(arr[i]) @@ -18,11 +20,33 @@ export default { }, denullify_dict(dict) { let res = {} - for(let key in dict) { - if(dict[key] !== null) { + for (let key in dict) { + if (dict[key] !== null) { res[key] = dict[key] } } return res + }, + buildAPITaFromTaObjectArray(obj) { + let res = [] + for (let i = 0; i < obj.length; i++) { + let app = {name: `${obj[i].object_fq_name}.${obj[i].object_function}`} + if (Object.keys(obj[i].parameters.old).length > 0) { + app['old'] = obj[i].object_functions === null ? obj[i].parameters.old : transactionutil.filter_old_data(obj[i].object_functions[obj[i].object_function].parameters, obj[i].parameters.old) + } + if (Object.keys(obj[i].parameters.new).length > 0) { + app['new'] = transactionutil.filter_unchanged_data(obj[i].parameters.new, obj[i].parameters.old) + } + res.push(app) + } + return res + }, + getAPIErrorIndexFromDBException(e) { + for (let t of e.traceback) { + if ('param' in t && 'wapi.transaction_stmt.index' in t.param) { + return t.param['wapi.transaction_stmt.index'] + } + } + return -1 } } diff --git a/frontend/src/util/colorutil.js b/frontend/src/util/colorutil.js index 95ce843eb9b348b15752b4d635ae709c21f704d6..d84c3b8003c0677400a6d644ee054068dccd144c 100644 --- a/frontend/src/util/colorutil.js +++ b/frontend/src/util/colorutil.js @@ -1,5 +1,6 @@ // https://gist.github.com/0x263b/2bdd90886c2036a1ad5bcf06d6e6fb37 // (modified) +//TODO: Refactor into global prototype definition file String.prototype.toHSL = function(opts) { let h, s, l; opts = opts || {}; diff --git a/frontend/src/util/transactionutil.js b/frontend/src/util/transactionutil.js new file mode 100644 index 0000000000000000000000000000000000000000..7e9428178b391b1a76144045dc7cbd1e94d28154 --- /dev/null +++ b/frontend/src/util/transactionutil.js @@ -0,0 +1,64 @@ +import {v4 as uuidv4} from "uuid"; + +export default { + function2variant(function_name, outline = false) { + let prefix = outline ? 'outline-' : '' + switch (function_name) { + case 'create': + return prefix + 'success' + case 'delete': + return prefix + 'danger' + case 'update': + case 'bulk_update': + return prefix + 'primary' + default: + return prefix + 'default' + } + }, + function2text(function_name) { + switch (function_name) { + case 'create': + return 'Anlegen' + case 'delete': + return 'Löschen' + case 'update': + case 'bulk_update': + return 'Bearbeiten' + default: + return function_name + } + }, + filter_unchanged_data(d1, d2) { + return Object.keys(d1).reduce(function (filtered, key) { + if (!(key in d2) || d1[key] != d2[key]) filtered[key] = d1[key]; + return filtered; + }, {}) + }, + filter_old_data(params_list, old_data) { + return Object.keys(old_data).reduce(function (filtered, key) { + if (key in params_list && 'old' in params_list[key]) filtered[key] = old_data[key]; + return filtered; + }, {}) + }, + remove_empty_data(params_list, data) { + return Object.keys(data).reduce(function (filtered, key) { + if (!(params_list[key].json_data_type == 'number' && data[key] == '')) filtered[key] = data[key]; + return filtered; + }, {}) + }, + generateDeleteElement(object_fq_name, params_list, old_data, title) { + let ta = {} + ta['parameters'] = { + 'new': {}, 'old': Object.keys(old_data).reduce(function (filtered, key) { + if (params_list.old.includes(key)) filtered[key] = old_data[key]; + return filtered; + }, {}) + } + ta['uuid'] = uuidv4() + ta['object_fq_name'] = object_fq_name + ta['object_function'] = 'delete' + ta['object_functions'] = null + ta['object_title'] = title + return ta + } +} diff --git a/frontend/src/views/Login.vue b/frontend/src/views/Login.vue index f4b09cd1d0062f01e99199d535b9c3aafdcf5072..4127d44493b8d939d0bff8df7a0dde426de27a4e 100644 --- a/frontend/src/views/Login.vue +++ b/frontend/src/views/Login.vue @@ -2,29 +2,35 @@ <div class="login"> <p>Willkommen auf der Eingangsseite zur Selbstverwaltung der aktuell angebotenen Basisdienste für das KITnet.</p> - <div class="jumbotron"> + <b-jumbotron> <div class="pull-left"> <img class="hidden-xs hidden-sm pull-left" src="@/assets/img/scc_logo.png"/> </div> <b-form @submit="login"> <div class="pull-left logincont"> - <label for="username">KIT-Account</label> - <input id="username" class="form-control" v-model="username" autofocus type="text"/> - <label for="password">Passwort</label> - <input id="password" class="form-control" v-model="password" type="password"/><br/> - <button class="btn btn-outline-primary pull-right" type="submit"><i - class="fa fa-sign-in" aria-hidden="true"> </i> Anmelden + <template v-if="!use_oic"> + <label for="username">KIT-Account</label> + <input id="username" class="form-control" v-model="username" autofocus type="text"/> + <label for="password">Passwort</label> + <input id="password" class="form-control" v-model="password" type="password"/><br/> + <button class="btn btn-outline-primary pull-right" type="submit"><font-awesome-icon + icon="sign-in-alt"/> Anmelden + </button> + </template> + <button class="btn btn-outline-primary" type="submit"><font-awesome-icon + :icon="['fab', 'openid']"/> Anmelden </button> </div> </b-form> <span class="clearfix"></span> - </div> + </b-jumbotron> </div> </template> <script> import LoginService from '@/api-services/login.service' import router from '@/router' + import config from '@/../netvs.config' export default { name: 'net_suite_login', @@ -32,15 +38,36 @@ return { username: '', password: '', + prevRoute: null, + use_oic: config.ENABLE_OIC } }, + beforeRouteEnter(to, from, next) { + next(vm => { + window.console.debug(from.path) + if (from.path != '/login') { + vm.prevRoute = from + if(vm.use_oic) { + window.localStorage.setItem('oic_redir_after_login', from.path) + } + } + }) + }, methods: { login: function (ev) { ev.preventDefault() let self = this LoginService.login(this.username, this.password).then((response) => { - self.$store.commit('login', {user: response.data.login, token: response.data.token}) - router.push('/') + if(response.data.status == 'usr_redir') { + window.location = response.data.url + return + } + if (response.data.login != null) { + self.$store.commit('login', {user: response.data.login, token: response.data.token}) + router.push(self.prevRoute.path) + } else { + // TODO: invalid login + } }) } } diff --git a/frontend/src/views/OICLogin.vue b/frontend/src/views/OICLogin.vue new file mode 100644 index 0000000000000000000000000000000000000000..3ec8c32d3e39ff60ae25a7b8a7afe6f3a82312a5 --- /dev/null +++ b/frontend/src/views/OICLogin.vue @@ -0,0 +1,30 @@ +<template> + <div class="login"> + <h1>Logging in...</h1> + </div> +</template> + +<script> + import LoginService from '@/api-services/login.service' + + export default { + name: 'net_suite_login', + created: function () { + let self = this + LoginService.login().then((response) => { + if (response.data.status == 'usr_redir') { + window.location = response.data.url + return + } + if (response.data.login != null) { + self.$store.commit('login', {user: response.data.login, token: response.data.token}) + let redir = window.localStorage.getItem('oic_redir_after_login') || '/' + window.localStorage.removeItem('oic_redir_after_login') + self.$router.push(redir) + } else { + // TODO: invalid login + } + }) + } + } +</script> diff --git a/frontend/src/views/swagger/ui.vue b/frontend/src/views/Swagger.vue similarity index 85% rename from frontend/src/views/swagger/ui.vue rename to frontend/src/views/Swagger.vue index 9532e216c35975bb28847a74f43416798a78fd79..8dafd0d312fa9be85c20c9cee21b14bae68b88c7 100644 --- a/frontend/src/views/swagger/ui.vue +++ b/frontend/src/views/Swagger.vue @@ -16,6 +16,7 @@ docExpansion: 'none', dom_id: '#swagger-ui', deepLinking: false, + filter: true, presets: [ SwaggerUI.presets.apis ], @@ -24,9 +25,10 @@ ], requestInterceptor: function (req) { if (self.$store.state.logged_in) { - req.headers.Authorization = self.$store.state.token.token + req.headers.Authorization = "Bearer " + self.$store.state.token.token window.console.log('Authorized from Session'); } + return req }, }) }, diff --git a/frontend/src/views/dnsvs/BCDOverview.vue b/frontend/src/views/dnsvs/BCDOverview.vue new file mode 100644 index 0000000000000000000000000000000000000000..5d8f5bfff7d17a9c7147c476c8e87719a86827e6 --- /dev/null +++ b/frontend/src/views/dnsvs/BCDOverview.vue @@ -0,0 +1,184 @@ +<template> + <div id="BCDOverview"> + <Loading :data="[bcds]"> + <div class="net-filter-direct d-print-none"> + <b-input-group class="shadow"> + <b-input-group-prepend> + <b-input-group-text> + <font-awesome-icon :icon="['fas', 'filter']"/> + </b-input-group-text> + </b-input-group-prepend> + <b-input class="search form-control" id="filter-direct" placeholder="Filter & Direktwahl" + autofocus/> + <b-input-group-append> + <b-button title="Gehe direkt zu Bereich" variant="outline-secondary" type="submit" + class="mr-0"> + <font-awesome-icon icon="arrow-right"/> + </b-button> + </b-input-group-append> + </b-input-group> + </div> + <b-card no-body class="shadow"> + <b-table responsive :fields="bcd_list_fields" :items="bcds" :sort-compare="sortBCDOverview"> + <template v-slot:cell(name)="data"> + <router-link class="nowrap" :to="'bcds/'+data.value"><b>{{ data.value }}</b></router-link> + </template> + <template v-slot:cell(subnets)="data"> + <div v-for="subnet in ip_subnet_by_bcd[data.item.name]" + :key="subnet.cidr" class="same-height"> + <code class="nowrap">{{subnet.cidr}}</code> + </div> + </template> + <template v-slot:cell(usage)="data"> + <div v-for="subnet in ip_subnet_by_bcd[data.item.name]" + :key="subnet.cidr" class="same-height"> + <b-progress height="20px" show-progress :max="IPAddressCount(subnet.cidr)" + v-if="isIPv4(subnet.cidr)"> + <b-progress-bar + :label="usagePercentage(subnet) +'%'" + :variant="progressVariant(usagePercentage(subnet))" + :value="subnet.dns_addr_rr_count"></b-progress-bar> + </b-progress> + </div> + </template> + <template v-slot:cell(adresses)="data"> + <div v-for="subnet in ip_subnet_by_bcd[data.item.name]" + :key="subnet.cidr" class="same-height"> + <p>{{subnet.dns_addr_rr_count}}</p> + </div> + </template> + <template v-slot:cell(vlans)="data"> + <li v-for="vlan in vlans[data.item.name]" + :key="vlan.id" class="nowrap"> + {{vlan.name}} ({{vlan.id}}) + </li> + <i v-if="!(data.item.name in vlans)">Keine VLANs vorhanden</i> + </template> + </b-table> + </b-card> + </Loading> + </div> +</template> + +<script> + import RangeService from '@/api-services/dns_bcd.service' + import ApiUtil from '@/util/apiutil' + import ipaddress from "../../util/ipaddress" + import Loading from "@/components/Loading" + + export default { + name: 'BCDOverview', + components: {Loading}, + data() { + return { + bcds: null, + utilization: null, + ou_by_shortname: null, + ip_subnet_by_bcd: null, + vlans: null, + + bcd_list_fields: [ + { + label: 'Name', + key: 'name', + sortable: true + }, + { + label: 'Beschreibung', + key: 'description', + sortable: true + }, + { + label: 'Subnetze', + key: 'subnets', + sortable: false + }, + { + label: 'Ausnutzung', + key: 'usage', + sortable: true + }, + { + label: 'Vergeben', + key: 'adresses', + sortable: true + }, + { + label: 'OE', + key: 'ou_short_name', + sortable: true + }, + { + label: 'VLANs', + key: 'vlans', + sortable: false + } + ] + } + }, + created() { + RangeService.getOverview(this.$store.state.netdb_axios_config).then((response) => { + this.ou_by_shortname = ApiUtil.dict_by_value_of_array(response.data[1], 'short_name') + this.bcds = response.data[0] + this.ip_subnet_by_bcd = ApiUtil.dict_of_lists_by_value_of_array(response.data[2], 'bcd') + this.vlans = ApiUtil.dict_of_lists_by_value_of_array(response.data[3], 'bcd') + Object.freeze(this.ranges) + }) + }, + methods: { + isIPv4: ipaddress.is_ip_v4, + IPAddressCount: ipaddress.ip_num_addr, + usagePercentage(subnet) { + return (subnet.dns_addr_rr_count / this.IPAddressCount(subnet.cidr) * 100).toFixed(0) + }, + progressVariant(percentage) { + if (percentage <= 50) { + return 'success' + } else if (percentage <= 75) { + return 'warning' + } else { + return 'danger' + } + }, + sortBCDOverview(a, b, key) { + if (key === 'usage') { + let usage_a = 0 + let usage_b = 0 + this.ip_subnet_by_bcd[a.name].forEach((subnet) => { + if (this.isIPv4(subnet.cidr)) + usage_a += this.usagePercentage(subnet) + }) + this.ip_subnet_by_bcd[b.name].forEach((subnet) => { + if (this.isIPv4(subnet.cidr)) + usage_b += this.usagePercentage(subnet) + }) + return usage_a - usage_b + } else if (key === 'adresses') { + let adresses_a = 0 + let adresses_b = 0 + this.ip_subnet_by_bcd[a.name].forEach((subnet) => { + adresses_a += subnet.dns_addr_rr_count + }) + this.ip_subnet_by_bcd[b.name].forEach((subnet) => { + adresses_b += subnet.dns_addr_rr_count + }) + return adresses_a - adresses_b + } else { + return false + } + } + } + }; +</script> + +<style scoped> + .same-height { + height: 30px; + padding: 0; + margin: 0; + } + + .nowrap { + white-space: nowrap; + } +</style> \ No newline at end of file diff --git a/frontend/src/views/dnsvs/bcd_records.vue b/frontend/src/views/dnsvs/BCDRecords.vue similarity index 97% rename from frontend/src/views/dnsvs/bcd_records.vue rename to frontend/src/views/dnsvs/BCDRecords.vue index 1d497376e61696feff4bd30f635286f388c9f3a5..0bddaf9725e64198c5f0dc1210a14ed9400264ba 100644 --- a/frontend/src/views/dnsvs/bcd_records.vue +++ b/frontend/src/views/dnsvs/BCDRecords.vue @@ -1,5 +1,5 @@ <template> - <div class="dnsvs_range_records"> + <div class="BCDRecords"> <div v-if="range" class="page-header net-header"> <h1>Broadcastdomain '{{range.name}}' <small class="text-muted"><code>{{range.ip_subnet_cidr}}</code></small> @@ -28,7 +28,7 @@ <td> <button class="btn btn-outline-primary d-print-none" role="button"> - <font-awesome-icon :icon="['far', 'edit']"></font-awesome-icon> + <font-awesome-icon :icon="['far', 'edit']"/> </button> </td> </tr> @@ -109,7 +109,7 @@ <td class="d-print-none"> <button class="btn btn-outline-primary d-print-none" role="button"> - <font-awesome-icon :icon="['far', 'edit']"></font-awesome-icon> + <font-awesome-icon :icon="['far', 'edit']"/> </button> </td> </tr> @@ -146,7 +146,7 @@ <div class="input-group"> <div class="input-group-prepend"> <span class="input-group-text" id="basic-addon1"><font-awesome-icon - icon="filter"></font-awesome-icon></span> + icon="filter"/></span> </div> <input class="search form-control" id="filterbar" placeholder="Filter" autofocus="yes" v-model.lazy.trim="filter_text" v-debounce="700"/> @@ -196,13 +196,13 @@ data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <font-awesome-icon :icon="['far', 'check-square']" - aria-hidden="true"></font-awesome-icon> + aria-hidden="true"/> <span class="caret"></span> </button> <div class="dropdown-menu"> <button class="dropdown-item btn text-danger"> <font-awesome-icon - :icon="['far', 'trash-alt']"></font-awesome-icon> + :icon="['far', 'trash-alt']"/> Löschen </button> </div> @@ -213,13 +213,13 @@ colspan="2">{{ $colnames['NTree']['fqdn'].short_title_abs }} <a href="javascript:void(0)" @click="change_sort(r, 'fqdn')"> <font-awesome-icon v-if="sort_opts[r].sort_by != 'fqdn'" - icon="sort"></font-awesome-icon> + icon="sort"/> <font-awesome-icon v-if="sort_opts[r].sort_by == 'fqdn' && !sort_opts[r].rev" - icon="sort-up"></font-awesome-icon> + icon="sort-up"/> <font-awesome-icon v-if="sort_opts[r].sort_by == 'fqdn' && sort_opts[r].rev" - icon="sort-down"></font-awesome-icon> + icon="sort-down"/> </a> </th> <th class="vertical-center" @@ -229,25 +229,25 @@ @click="change_sort(r, 'fqdn_description')"> <font-awesome-icon v-if="sort_opts[r].sort_by != 'fqdn_description'" - icon="sort"></font-awesome-icon> + icon="sort"/> <font-awesome-icon v-if="sort_opts[r].sort_by == 'fqdn_description' && !sort_opts[r].rev" - icon="sort-up"></font-awesome-icon> + icon="sort-up"/> <font-awesome-icon v-if="sort_opts[r].sort_by == 'fqdn_description' && sort_opts[r].rev" - icon="sort-down"></font-awesome-icon> + icon="sort-down"/> </a> </th> <th class="vertical-center">Record-Data <a href="javascript:void(0)" @click="change_sort(r, 'rr_data')"> <font-awesome-icon v-if="sort_opts[r].sort_by != 'rr_data'" - icon="sort"></font-awesome-icon> + icon="sort"/> <font-awesome-icon v-if="sort_opts[r].sort_by == 'rr_data' && !sort_opts[r].rev" - icon="sort-up"></font-awesome-icon> + icon="sort-up"/> <font-awesome-icon v-if="sort_opts[r].sort_by == 'rr_data' && sort_opts[r].rev" - icon="sort-down"></font-awesome-icon> + icon="sort-down"/> </a></th> <th class="vertical-center d-print-none">Aktionen</th> <th class="d-print-none"> @@ -299,7 +299,7 @@ data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <font-awesome-icon icon="info-circle" - aria-hidden="true"></font-awesome-icon> + aria-hidden="true"/> <span class="caret"></span> </button> <div class="dropdown-menu"> @@ -326,10 +326,10 @@ <span> <button class="btn btn-outline-primary"><font-awesome-icon - :icon="['far', 'edit']"></font-awesome-icon></button> + :icon="['far', 'edit']"/></button> <button class="btn btn-outline-danger"><font-awesome-icon - :icon="['far', 'trash-alt']"></font-awesome-icon></button> + :icon="['far', 'trash-alt']"/></button> </span> </td> </tr> @@ -399,7 +399,7 @@ import ApiUtil from '@/util/apiutil' export default { - name: 'dnsvs_range_records', + name: 'BCDRecords', data() { return { range: null, diff --git a/frontend/src/views/dnsvs/DomainInspect.vue b/frontend/src/views/dnsvs/DomainInspect.vue new file mode 100644 index 0000000000000000000000000000000000000000..7a0328538bf5b98a12e029d730250175791e6981 --- /dev/null +++ b/frontend/src/views/dnsvs/DomainInspect.vue @@ -0,0 +1,70 @@ +<template> + <div class="DomainInspect"> + <h1>FQDN '<span v-if="$route.params.fqdn === '$'">.</span><span + v-if="$route.params.fqdn !== '$'">{{ $route.params.fqdn }}</span>' + </h1> + <FQDNTable :fqdns="fqdns"></FQDNTable> + <template v-if="fetch_limit != -1 && fqdns != null && fetch_limit == fqdns.length"> + <b-button block variant="outline-primary" @click="toggle_limit()">Alle Ergebnisse anzeigen</b-button> + </template> + </div> +</template> + +<script> +import FQDNService from '@/api-services.gen/dns.fqdn'; +import FQDNTable from '@/components/FQDNTable.vue' + +export default { + name: "DomainInspect", + data() { + return { + fqdns: null, + fetch_limit: 250 + } + }, + components: {FQDNTable}, + watch: { + $route() { + this.fqdns = null + this.fetch_limit = 250 + this.fetch() + } + }, + created() { + this.fetch() + }, + methods: { + fetch() { + this.fqdns = null + let real_fqdn = this.$route.params.fqdn + if (real_fqdn == "$") { + real_fqdn = '.' + } + if (this.fetch_limit == -1) { + FQDNService.list(this.$store.state.netdb_axios_config, { + parent_value_list: [real_fqdn], + }).then((response) => { + this.fqdns = response.data[0]; + Object.freeze(this.fqdns) + }) + } else { + FQDNService.list(this.$store.state.netdb_axios_config, { + parent_value_list: [real_fqdn], + fetch_limit: this.fetch_limit + }).then((response) => { + this.fqdns = response.data[0]; + Object.freeze(this.fqdns) + }) + } + }, + toggle_limit() { + this.fetch_limit = -1 + this.fetch() + } + } +} +</script> + +<style scoped> + +</style> diff --git a/frontend/src/views/dnsvs/Entry.vue b/frontend/src/views/dnsvs/Entry.vue new file mode 100644 index 0000000000000000000000000000000000000000..a0594aa5ae767f0b965d36fa822e2ad7244bc1b9 --- /dev/null +++ b/frontend/src/views/dnsvs/Entry.vue @@ -0,0 +1,25 @@ +<template> + <div id="dnsvs_Entry"> + <h1>DNSVS</h1> + <b-nav tabs align="center"> + <b-nav-item :active="$route.name === 'bcds'" to="/dnsvs/bcds">Ihre Broadcastdomains (BCDs)</b-nav-item> + <b-nav-item :active="$route.name === 'fqdns'" to="/dnsvs/fqdns">Ihre Domains</b-nav-item> + </b-nav> + <BCDOverview v-if="$route.name === 'bcds'"></BCDOverview> + <FQDNOverview v-if="$route.name === 'fqdns'"></FQDNOverview> + </div> +</template> + +<script> + import BCDOverview from '@/views/dnsvs/BCDOverview.vue' + import FQDNOverview from '@/views/dnsvs/FQDNOverview.vue' + + export default { + name: "Entry", + components: {BCDOverview, FQDNOverview} + } +</script> + +<style scoped> + +</style> diff --git a/frontend/src/views/dnsvs/fqdn_overview.vue b/frontend/src/views/dnsvs/FQDNOverview.vue similarity index 79% rename from frontend/src/views/dnsvs/fqdn_overview.vue rename to frontend/src/views/dnsvs/FQDNOverview.vue index bcde5338c1f2e1135e5abe6ed9506ae0edf7eb71..5ac766b6192e61ddf267f5e62d3397e82e985de7 100644 --- a/frontend/src/views/dnsvs/fqdn_overview.vue +++ b/frontend/src/views/dnsvs/FQDNOverview.vue @@ -1,16 +1,16 @@ <template> - <div id="dnsvs_fqdn_overview"> - <h2>Ihre FQDNs</h2> + <div id="FQDNOverview"> + <h2>Ihre Domains</h2> <fqdn-table :fqdns="fqdns"></fqdn-table> </div> </template> <script> import FQDNService from '@/api-services.gen/dns.fqdn'; - import FQDNTable from '@/components/fqdn-table.vue' + import FQDNTable from '@/components/FQDNTable.vue' export default { - name: 'dnsvs_fqdn_overview', + name: 'FQDNOverview', data() { return { fqdns: null, diff --git a/frontend/src/views/dnsvs/FQDNRecords.vue b/frontend/src/views/dnsvs/FQDNRecords.vue new file mode 100644 index 0000000000000000000000000000000000000000..828336a403307627fe78aa30753bfa9fd4b5ffa7 --- /dev/null +++ b/frontend/src/views/dnsvs/FQDNRecords.vue @@ -0,0 +1,42 @@ +<template> + <div class="FQDNReferences"> + <h1>Records zum FQDN '<span v-if="$route.params.fqdn === '$'">.</span><span v-if="$route.params.fqdn !== '$'">{{$route.params.fqdn}}</span>' + </h1> + <FQDNRecordTable :fqdn_rrs="records" :fqdn="$route.params.fqdn"></FQDNRecordTable> + </div> +</template> + +<script> + import FQDNRecordTable from '@/components/FQDNRecordTable.vue' + import RRService from '@/api-services.gen/dns.record'; + + export default { + name: "FQDNReferences", + data() { + return { + records: null, + } + }, + components: {FQDNRecordTable}, + watch: { + $route() { + this.records = null + RRService.list(this.$store.state.netdb_axios_config, {fqdn_list: [this.$route.params.fqdn]}).then((response) => { + this.records = response.data[0]; + Object.freeze(this.fqdns) + }) + + } + }, + created() { + RRService.list(this.$store.state.netdb_axios_config, {fqdn_list: [this.$route.params.fqdn]}).then((response) => { + this.records = response.data[0]; + Object.freeze(this.fqdns) + }) + }, + } +</script> + +<style scoped> + +</style> diff --git a/frontend/src/views/dnsvs/FQDNReferences.vue b/frontend/src/views/dnsvs/FQDNReferences.vue new file mode 100644 index 0000000000000000000000000000000000000000..620dae55f83d74fce56d49ef7e10f4209d5790dd --- /dev/null +++ b/frontend/src/views/dnsvs/FQDNReferences.vue @@ -0,0 +1,43 @@ +<template> + <div class="fqdn_refs"> + <h1>Referenzen zum FQDN '<span v-if="$route.params.fqdn === '$'">.</span><span + v-if="$route.params.fqdn !== '$'">{{$route.params.fqdn}}</span>' + </h1> + <FQDNRecordTable :fqdn_rrs="records" :fqdn="$route.params.fqdn"></FQDNRecordTable> + </div> +</template> + +<script> + import RRService from '@/api-services.gen/dns.record'; + import FQDNRecordTable from '@/components/FQDNRecordTable.vue' + + export default { + name: "FQDNReferences", + data() { + return { + records: null, + } + }, + components: {FQDNRecordTable}, + watch: { + $route() { + this.records = null + RRService.list(this.$store.state.netdb_axios_config, {target_data_unref: this.$route.params.fqdn}).then((response) => { + this.records = response.data[0]; + Object.freeze(this.records) + }) + + } + }, + created() { + RRService.list(this.$store.state.netdb_axios_config, {target_data_unref: this.$route.params.fqdn}).then((response) => { + this.records = response.data[0]; + Object.freeze(this.records) + }) + }, + } +</script> + +<style scoped> + +</style> diff --git a/frontend/src/views/dnsvs/main.vue b/frontend/src/views/dnsvs/Main.vue similarity index 77% rename from frontend/src/views/dnsvs/main.vue rename to frontend/src/views/dnsvs/Main.vue index 7b0884687b7272c2bf6e70c23802fa53077332be..a7bb31e20aa9ca8947622a16bda0dee7dfb123d5 100644 --- a/frontend/src/views/dnsvs/main.vue +++ b/frontend/src/views/dnsvs/Main.vue @@ -4,10 +4,10 @@ <script> export default { - name: "main" + name: "DNSVSMain" } </script> <style scoped> -</style> \ No newline at end of file +</style> diff --git a/frontend/src/views/dnsvs/bcd_overview.vue b/frontend/src/views/dnsvs/bcd_overview.vue deleted file mode 100644 index ad3cac00840bf0d8eab7c5162c0e8faede8b9644..0000000000000000000000000000000000000000 --- a/frontend/src/views/dnsvs/bcd_overview.vue +++ /dev/null @@ -1,118 +0,0 @@ -<template> - <div id="dnsvs_range_overview"> - <h2>Ihre Bereiche</h2> - <div class="text-center" v-if="!bcds"> - <b-spinner style="width: 3rem; height: 3rem;" type="grow" label="Loading..."></b-spinner> - </div> - <div v-if="bcds"> - <div class="net-filter-direct d-print-none"> - <div class="input-group"> - <div class="input-group-prepend"> - <span class="input-group-text"><font-awesome-icon icon="filter"></font-awesome-icon></span> - </div> - <input class="search form-control" id="filter-direct" placeholder="Filter & Direktwahl" - autofocus="yes"/> - <div class="input-group-append"> - <button title="Gehe direkt zu Bereich" - class="btn btn-outline-secondary" type="submit"> - <font-awesome-icon icon="arrow-right"></font-awesome-icon> - </button> - </div> - </div> - </div> - <table class="table"> - <thead> - <tr> - <th>BCD-Name <a class="sort d-print-none"><i - class="fas fa-sort"></i></a></th> - <th>{{ $colnames['DBNetArea']['description'].short_title_abs }} <a class="sort d-print-none"><i - class="fas fa-sort"></i></a></th> - <th>{{ $colnames['Net']['net'].short_title_abs }} <a class="sort d-print-none"><i - class="fas fa-sort"></i></a> - </th> - <th>Ausnutzung <a class="sort d-print-none" data-order="" data-target="utilization"><i - class="fas fa-sort"></i></a></th> - <th>{{ $colnames['Facility']['name'].short_title_abs }} <a class="sort d-print-none"><i - class="fas fa-sort-up"></i></a></th> - <th>VLANs <a class="sort"><i - class="fas fa-sort"></i></a></th> - </tr> - </thead> - <tbody> - <template v-for="r in bcds"> - <tr v-for="(n, i) in ip_subnet_by_bcd[r.name]" :key="n.name"> - <th :rowspan="r.subnet_count" v-if="i == 0" class="vertical-center"> - <router-link :to="'bcds/'+r.name">{{ r.name }}</router-link> - </th> - <td class="vertical-center" v-if="i == 0" :rowspan="r.subnet_count">{{ r.description }}</td> - <td><code>{{ n.cidr }}</code></td> - <td class="vertical-center"> - <b-progress height="20px" show-progress v-if="is_ip_v4(n.cidr)" - :max="ip_num_addr(n.cidr)" class="mb-3"> - <b-progress-bar - :label="`${((n.dns_addr_rr_count/ip_num_addr(n.cidr)) * 100).toFixed(0)}%`" - :variant="get_progress_variant(n)" - :value="n.dns_addr_rr_count"></b-progress-bar> - </b-progress> - <span v-if="!is_ip_v4(n.cidr)">{{n.addr_rr_count}}</span> - - </td> - <td class="vertical-center" v-if="i == 0" :rowspan="r.subnet_count" :title="ou_by_shortname[r.ou_short_name].name"> - {{r.ou_short_name }} - </td> - <td v-if="i==0" :rowspan="r.subnet_count" class="vertical-center"> - <ul class="list-unstyled" v-for="v in vlans[r.name]" :key="v.id"> - <li>{{v.name}} ({{v.id}})</li> - </ul> - <i v-if="!(r.name in vlans)">Kein VLAN vorhanden</i> - </td> - </tr> - </template> - </tbody> - </table> - </div> - </div> -</template> - -<script> - import RangeService from '@/api-services/dns_bcd.service' - import ApiUtil from '@/util/apiutil' - import ipaddress from "../../util/ipaddress"; - - export default { - name: 'dnsvs_range_overview', - data() { - return { - bcds: null, - utilization: null, - ou_by_shortname: null, - ip_subnet_by_bcd: null, - vlans: null - } - }, - created() { - RangeService.getOverview(this.$store.state.netdb_axios_config).then((response) => { - this.ou_by_shortname = ApiUtil.dict_by_value_of_array(response.data[1], 'short_name') - this.bcds = response.data[0] - this.ip_subnet_by_bcd = ApiUtil.dict_of_lists_by_value_of_array(response.data[2], 'bcd') - this.vlans = ApiUtil.dict_of_lists_by_value_of_array(response.data[3], 'bcd') - Object.freeze(this.ranges) - }) - }, - methods: { - is_ip_v4: ipaddress.is_ip_v4, - ip_num_addr: ipaddress.ip_num_addr, - get_progress_variant: function (range) { - let perc = range.dns_addr_rr_count / this.ip_num_addr(range.cidr) - if (perc <= .5) { - return 'success' - } - if (perc > .5 && perc <= .75) { - return 'warning' - } - return 'danger' - } - - } - }; -</script> diff --git a/frontend/src/views/dnsvs/domain_inspect.vue b/frontend/src/views/dnsvs/domain_inspect.vue deleted file mode 100644 index 83a43a2027670c4d89c2e84727bee811f2345a7f..0000000000000000000000000000000000000000 --- a/frontend/src/views/dnsvs/domain_inspect.vue +++ /dev/null @@ -1,43 +0,0 @@ -<template> - <div class="domain_inspect"> - <h1>FQDN '<span v-if="$route.params.fqdn === '$'">.</span><span v-if="$route.params.fqdn !== '$'">{{$route.params.fqdn}}</span>'</h1> - <fqdn_table :fqdns="fqdns"></fqdn_table> - </div> -</template> - -<script> - import FQDNService from '@/api-services.gen/dns.fqdn'; - import FQDNTable from '@/components/fqdn-table.vue' - - export default { - name: "domain_inspect", - data() { - return { - fqdns: null, - } - }, - components: { - 'fqdn_table': FQDNTable - }, - watch:{ - $route() { - this.fqdns = null - FQDNService.list(this.$store.state.netdb_axios_config, {parent_value_list: [this.$route.params.fqdn]}).then((response) => { - this.fqdns = response.data[0]; - Object.freeze(this.fqdns) - }) - - } - }, - created() { - FQDNService.list(this.$store.state.netdb_axios_config, {parent_value_list: [this.$route.params.fqdn]}).then((response) => { - this.fqdns = response.data[0]; - Object.freeze(this.fqdns) - }) - }, - } -</script> - -<style scoped> - -</style> diff --git a/frontend/src/views/dnsvs/entry.vue b/frontend/src/views/dnsvs/entry.vue deleted file mode 100644 index cb5d6d11a491feee7131a630818695169b95137a..0000000000000000000000000000000000000000 --- a/frontend/src/views/dnsvs/entry.vue +++ /dev/null @@ -1,28 +0,0 @@ -<template> - <div id="dnsvs_entry"> - <h1>DNSVS</h1> - <b-nav pills fill justified> - <b-nav-item :active="$route.name == 'bcds'" to="/dnsvs/bcds">Ihre Broadcastdomains (BCDs)</b-nav-item> - <b-nav-item :active="$route.name == 'fqdns'" to="/dnsvs/fqdns">Ihre Domains</b-nav-item> - </b-nav> - <bcd-overview v-if="$route.name == 'bcds'"></bcd-overview> - <fqdn-overview v-if="$route.name == 'fqdns'"></fqdn-overview> - </div> -</template> - -<script> - import BCDOverview from '@/views/dnsvs/bcd_overview.vue' - import FQDNOverview from '@/views/dnsvs/fqdn_overview.vue' - - export default { - name: "entry", - components: { - 'bcd-overview': BCDOverview, - 'fqdn-overview': FQDNOverview - } - } -</script> - -<style scoped> - -</style> diff --git a/frontend/src/views/dnsvs/fqdn_recs.vue b/frontend/src/views/dnsvs/fqdn_recs.vue deleted file mode 100644 index 8ee1c3e36b84b5e644267fe28420b12f08edd376..0000000000000000000000000000000000000000 --- a/frontend/src/views/dnsvs/fqdn_recs.vue +++ /dev/null @@ -1,44 +0,0 @@ -<template> - <div class="fqdn_recs"> - <h1>Records zum FQDN '<span v-if="$route.params.fqdn === '$'">.</span><span v-if="$route.params.fqdn !== '$'">{{$route.params.fqdn}}</span>' - </h1> - <fqdn_rr_table :fqdn_rrs="fqdns"></fqdn_rr_table> - </div> -</template> - -<script> - import FQDNService from '@/api-services.gen/dns.fqdn'; - import FQDNRRTable from '@/components/fqdn-record_table.vue' - - export default { - name: "fqdn_recs", - data() { - return { - fqdns: null, - } - }, - components: { - 'fqdn_rr_table': FQDNRRTable - }, - watch: { - $route() { - this.fqdns = null - FQDNService.getFQDNRecs(this.$route.params.fqdn).then((response) => { - this.fqdns = response.data.fqdn_records; - Object.freeze(this.fqdns) - }) - - } - }, - created() { - FQDNService.getFQDNRecs(this.$route.params.fqdn).then((response) => { - this.fqdns = response.data.fqdn_records; - Object.freeze(this.fqdns) - }) - }, - } -</script> - -<style scoped> - -</style> diff --git a/frontend/src/views/dnsvs/fqdn_refs.vue b/frontend/src/views/dnsvs/fqdn_refs.vue deleted file mode 100644 index fc12ebdf1237e4e5eef16982b22129d8219bed91..0000000000000000000000000000000000000000 --- a/frontend/src/views/dnsvs/fqdn_refs.vue +++ /dev/null @@ -1,44 +0,0 @@ -<template> - <div class="fqdn_refs"> - <h1>Referenzen zum FQDN '<span v-if="$route.params.fqdn === '$'">.</span><span v-if="$route.params.fqdn !== '$'">{{$route.params.fqdn}}</span>' - </h1> - <fqdn_rr_table :fqdn_rrs="fqdns"></fqdn_rr_table> - </div> -</template> - -<script> - import FQDNService from '@/api-services.gen/dns.fqdn'; - import FQDNRRTable from '@/components/fqdn-record_table.vue' - - export default { - name: "fqdn_recs", - data() { - return { - fqdns: null, - } - }, - components: { - 'fqdn_rr_table': FQDNRRTable - }, - watch: { - $route() { - this.fqdns = null - FQDNService.getFQDNRecs(this.$route.params.fqdn).then((response) => { - this.fqdns = response.data.fqdn_records; - Object.freeze(this.fqdns) - }) - - } - }, - created() { - FQDNService.getFQDNRecs(this.$route.params.fqdn).then((response) => { - this.fqdns = response.data.fqdn_records; - Object.freeze(this.fqdns) - }) - }, - } -</script> - -<style scoped> - -</style> diff --git a/frontend/src/views/macauth/MACAuth.vue b/frontend/src/views/macauth/MACAuth.vue new file mode 100644 index 0000000000000000000000000000000000000000..37ea89b26a46307ec3c7a85ad0ce61c8ce877d18 --- /dev/null +++ b/frontend/src/views/macauth/MACAuth.vue @@ -0,0 +1,240 @@ +<template> + <div id="MACAuth"> + <h1 class="my-4">MACAuth</h1> + <b-input-group class="shadow mb-4"> + <b-input-group-prepend> + <b-input-group-text> + <font-awesome-icon :icon="['fas', 'filter']"/> + </b-input-group-text> + </b-input-group-prepend> + <b-form-input id="filter-input" v-model.trim="filter_text" placeholder="Filter" + autofocus debounce="300"/> + </b-input-group> + <Loading :data="[filtered_bcds, clients_by_bcd]"> + <template v-for="bcd in filtered_bcds"> + <b-card no-body :key="'card-bcd-' + bcd.name" class="mb-4 shadow"> + <template v-slot:header> + <b-row> + <b-col lg="3"> + <h4> + {{ bcd.name }} + <b-badge variant="success"> + <template v-if="bcd.name in clients_by_bcd"> + <template v-if="clients_by_bcd[bcd.name].length === 1"> + 1 Client + </template> + <template v-else>{{ clients_by_bcd[bcd.name].length }} Clients + </template> + </template> + <template v-else>0 Clients</template> + </b-badge> + </h4> + <p class="text-muted">Broadcastdomain</p> + </b-col> + <b-col> + <div v-if="bcd.description === '' || bcd.description == null">Keine Beschreibung vorhanden.</div> + <div v-else>{{ bcd.description }}</div> + <p class="text-muted">Beschreibung</p> + </b-col> + </b-row> + </template> + <b-button block squared variant="outline-secondary" v-b-toggle="bcd.name + '-collapse'"> + <font-awesome-icon class="collapse-icon" :icon="['fas','chevron-down']"/> + </b-button> + <b-collapse :id="bcd.name + '-collapse'"> + <b-table :items="clients_by_bcd[bcd.name]" + :fields="macauth_fields" + class="m-0" + striped + responsive + primary-key="description"> + <template v-slot:head(buttons)> + <b-button block variant="outline-success" + :id="'button-create-client-' + bcd.name" + @click="createClient(bcd)"> + <font-awesome-icon :icon="['fas', 'plus']"/> + </b-button> + <b-tooltip :target="'button-create-client-' + bcd.name" triggers="hover" + variant="success" placement="left"> + Client hinzufügen + </b-tooltip> + </template> + <template v-slot:cell(wpa_key)="data"> + <b-button block :id="'show-wpa-key-' + bcd.name + '-' + data.index" variant="primary"> + <font-awesome-icon :icon="['fas','eye']"/> + </b-button> + <b-popover :target="'show-wpa-key-' + bcd.name + '-' + data.index" + triggers="focus" custom-class="popover-wide"> + <CopyField :text="data.item.wpa_key" code/> + </b-popover> + </template> + <template v-slot:cell(last_login_date)="data"> + {{ formatDate(data.item.last_login_date) }} + </template> + <template v-slot:cell(mac_addr)="data"> + <code>{{data.item.mac_addr}}</code> + </template> + <template v-slot:cell(buttons)="data"> + <b-button-group class="fullwidth"> + <b-button variant="outline-primary" + :id="'button-edit-client-' + bcd.name + '-' + data.index" + @click="editClient(data.item)"> + <font-awesome-icon :icon="['far', 'edit']"/> + </b-button> + <b-tooltip :target="'button-edit-client-' + bcd.name + '-' + data.index" + triggers="hover" variant="primary" placement="top"> + Client bearbeiten + </b-tooltip> + <b-button variant="outline-danger" + :id="'button-delete-client-' + bcd.name + '-' + data.index" + @click="deleteClient(data.item)"> + <font-awesome-icon :icon="['far', 'trash-alt']"/> + </b-button> + <b-tooltip :target="'button-delete-client-' + bcd.name + '-' + data.index" + triggers="hover" variant="danger" placement="top"> + Client entfernen + </b-tooltip> + </b-button-group> + </template> + </b-table> + </b-collapse> + </b-card> + </template> + <DBEditor object_fq_name="macauth.client" :object_function="db_editor_object_function" + modal_id="dbeditor_macauth" :old_data="db_editor_old_data" :presets="db_editor_presets" + :non_optionals_order="['bcd_name', 'mac_addr', 'description', 'do_refresh_wpa_key']" + :object_title="db_editor_object_title" + ></DBEditor> + </Loading> + </div> +</template> + +<script> +import Loading from "../../components/Loading" +import MACAuth from "@/api-services/macauth.service" +import ApiUtil from '@/util/apiutil' +import DBEditor from "@/components/DBEditor"; +import transactionutil from "@/util/transactionutil"; +import MACAuthService from "@/api-services.gen/macauth.client"; +import CopyField from "@/components/CopyField"; + +export default { + name: 'macauth', + components: {CopyField, DBEditor, Loading}, + data() { + return { + db_editor_object_function: 'create', + db_editor_old_data: {}, + db_editor_presets: {}, + db_editor_object_title: {}, + bcds: null, + clients_by_bcd: null, + macauth_fields: [ + { + key: 'description', + label: 'Beschreibung' + }, + { + key: 'mac_addr', + label: 'MAC Adresse', + sortable: true + }, + { + key: 'wpa_key', + label: 'WPA Key' + }, + { + key: 'last_login_date', + label: 'Letzer Login', + sortable: true + }, + { + key: 'last_login_node', + label: 'Letzer Login-Node', + sortable: true + }, + { + key: 'last_login_port', + label: 'Letzer Login-Port', + sortable: true + }, + 'buttons' + ], + filter_text: "", + waiting: false, + } + }, + computed: { + filtered_bcds() { + if (this.bcds == null) { + return null + } + if (this.filter_text === '') { + return this.bcds + } + return this.bcds.filter(bcd => { + return bcd.name.toLowerCase().includes(this.filter_text.toLowerCase()) + || (bcd.description != null && bcd.description.toLowerCase().includes(this.filter_text.toLowerCase())) + }) + } + }, + created() { + this.fetchData() + }, + methods: { + fetchData() { + MACAuth.list(this.$store.state.netdb_axios_config, {}).then((response) => { + this.clients_by_bcd = ApiUtil.dict_of_lists_by_value_of_array(response.data[0], 'bcd_name') + this.bcds = response.data[1] + }) + }, + formatDate(value) { + if (value == null) { + return 'N/A' + } + return new Date(Date.parse(value)).toLocaleString('de-DE') + }, + createClient(bcd) { + this.db_editor_object_function = 'create' + this.db_editor_old_data = {} + this.db_editor_presets = {'bcd_name': bcd.name} + this.db_editor_object_title = null + this.$root.$emit('bv::show::modal', 'dbeditor_macauth') + }, + editClient(item) { + this.db_editor_object_function = 'update' + this.db_editor_old_data = item + this.db_editor_presets = item + this.db_editor_object_title = item.mac_addr + ' in BCD ' + item.bcd_name + this.$root.$emit('bv::show::modal', 'dbeditor_macauth') + }, + deleteClient(item) { + let ta = transactionutil.generateDeleteElement('macauth.client', MACAuthService.deleteParamsList(), item, item.mac_addr + ' in BCD ' + item.bcd_name) + this.$store.commit('addTransactionElement', ta) + this.$emit('commited', ta) + if (!this.isMobile() && !this.$store.state.show_sidebar) { + this.$store.state.show_sidebar = true + } + } + } +} +</script> + +<style> +.btn-group.fullwidth { + display: flex; +} + +.fullwidth .btn { + flex: 1 +} + +.collapse-icon { + transition: transform; + transition-duration: 250ms; +} + +.not-collapsed > .collapse-icon { + transform: rotate(-180deg); +} +</style> diff --git a/frontend/src/views/nd/Map.vue b/frontend/src/views/nd/Map.vue new file mode 100644 index 0000000000000000000000000000000000000000..334a69b6faedddaa58d38cbbb1966f6abedbe6d0 --- /dev/null +++ b/frontend/src/views/nd/Map.vue @@ -0,0 +1,193 @@ +<template> + <div id="nd_map"> + <h1>Campusplan</h1> + <b-alert show variant="warning"><b>Achtung!</b> Einige der Kategorien können viel Datenverkehr auslösen und sehr + lange zum Laden brauchen! + </b-alert> + <div class="text-center" v-if="!waiting_for_types.every(element => element === null)"> + <b-spinner style="width: 3rem; height: 3rem;" type="grow" label="Loading..."></b-spinner> + </div> + <b-form-group v-if="p_port_type_group.length >0" label="P-Port-Typengruppen"> + <b-form-checkbox-group v-model="selected_types"> + <template v-for="t in p_port_type_group"> + <b-form-checkbox :disabled="waiting_for_types.includes(t.name)" switch v-bind:key="t.name" + :color="t.name.toHSL()" + :value="t.name"> + <span :style="'color:' + t.name.toHSL()">{{t.name}} <i + v-if="waiting_for_types.includes(t.name)">(Loading...)</i></span></b-form-checkbox> + </template> + </b-form-checkbox-group> + </b-form-group> + <div class="text-center" v-else> + <b-spinner style="width: 3rem; height: 3rem;" type="grow" label="Loading..."></b-spinner> + </div> + <l-map + :maxBounds="[ + [48.9, 8.716667], + [49.199444, 8.123056] + ]" + style="height: 80vh; width: 100%" + :center="[49.011232, 8.413414]" + :zoom="17" + > + <l-tile-layer + attribution="Map data © OpenStreetMap contributors, CC-BY-SA" + url="https://www.kit.edu/tiles/{z}/{x}/{y}.png"></l-tile-layer> + <l-tile-layer :z-index="2" :options="{bounds: + [ + [49.019608, 8.365166], + [49.024113, 8.369146] + ] + }" url="https://www.kit.edu/campusplan/public/layers/kit/{z}/{x}/{y}.png"></l-tile-layer> + <l-tile-layer :z-index="2" :options="{bounds: + [ + [49.020372, 8.427647], + [49.024853, 8.434883] + ] + }" url="https://www.kit.edu/campusplan/public/layers/kit/{z}/{x}/{y}.png"></l-tile-layer> + <l-tile-layer :z-index="2" :options="{bounds: + [ + [49.087723, 8.419273], + [49.114386, 8.447196] + ] + }" url="https://www.kit.edu/campusplan/public/layers/kit/{z}/{x}/{y}.png"></l-tile-layer> + <l-tile-layer :z-index="2" :options="{bounds: + [ + [49.019608, 8.365166], + [49.024113, 8.369146] + ] + }" url="https://www.kit.edu/campusplan/public/layers/kit/{z}/{x}/{y}.png"></l-tile-layer> + <l-tile-layer :z-index="2" :options="{bounds: + [ + [49.007740, 8.399972], + [49.019963, 8.428413] + ] + }" url="https://www.kit.edu/campusplan/public/layers/kit/{z}/{x}/{y}.png"></l-tile-layer> + <template v-for="s in selected_types"> + <template v-if="s in lwl_inter_bldg_link_pairs"> + <template v-for="p in lwl_inter_bldg_link_pairs[s]"> + <l-polyline v-if="p[0].latlng != null && p[1].latlng != null" v-bind:key="p[0].pk" + :lat-lngs="[p[0].latlng, p[1].latlng]" :color="s.toHSL()"> + <l-tooltip>{{s}}: {{p[0].mdl_fq_name}} ({{p[0].mdl_type}}) {{p[0].name}} <-> {{p[1].mdl_fq_name}} ({{p[1].mdl_type}}) {{p[1].name}}</l-tooltip> + </l-polyline> + </template> + </template> + </template> + </l-map> + Nicht angezeigte Gebäude: + <ul> + <template v-for="s in selected_types"> + <template v-if="s in lwl_inter_bldg_link_pairs"> + <template v-key v-for="p in lwl_inter_bldg_link_pairs[s]"> + <li v-bind:key="p[0].pk" v-if="p[0].latlng == null">{{p[0].mdl_bldg}}</li> + </template> + </template> + </template> + </ul> + </div> +</template> + +<script> + import {LMap, LTileLayer, LPolyline, LTooltip} from 'vue2-leaflet'//LTileLayer, LMarker } from 'vue2-leaflet'; + import 'leaflet/dist/leaflet.css' + import ApiUtil from '@/util/apiutil' + + import '@/util/colorutil' + import PPortService from '@/api-services.gen/nd.p_port.js' + import PPortTypeGroup from '@/api-services.gen/ndcfg.p_port_type_group.js' + import KITMapData from '@/api-services/kit_map_data.js' + + export default { + name: "Map", + components: { + LMap, + LTileLayer, + LPolyline, + LTooltip + }, + data() { + return { + lwl_inter_bldg_link_pairs: {}, + kit_campus_mapping: KITMapData.kit_campus_mapping(), + p_port_type_group: [], + p_port_type_group_by_name: null, + waiting_for_types: [], + selected_types: ['LWL', 'Festkabel/LWL/2*SM', 'Festkabel/LWL/URM/2*SM', 'Festkabel/LWL/2*MM', 'Antennen/gerichtet'] + } + }, + created() { + let self = this + PPortTypeGroup.list(this.$store.state.netdb_axios_config, {}).then(function (data) { + self.p_port_type_group = data.data[0] + self.p_port_type_group_by_name = ApiUtil.dict_by_value_of_array(self.p_port_type_group, 'name') + self.update_list() + }) + }, + watch: { + selected_types: function () { + this.update_list() + } + }, + methods: + { + get_bldg_coords_fuzzy(name) { + for (let b of this.kit_campus_mapping) { + if (b.title.includes(name)) { + return b.positionList[0] + } + if (name.includes(b.title)) { + return b.positionList[0] + } + } + return null + }, + update_list() { + let self = this + for (let type_group of this.selected_types) { + if (type_group in this.lwl_inter_bldg_link_pairs || this.waiting_for_types.includes(type_group)) { + continue + } + this.waiting_for_types.push(type_group) + PPortService.list(this.$store.state.netdb_axios_config, { + type_group: type_group, + is_connected: true + }).then(function (data) { + if (!(type_group in self.lwl_inter_bldg_link_pairs)) { + let tmp = {} + tmp[type_group] = [] + self.lwl_inter_bldg_link_pairs = Object.assign({}, self.lwl_inter_bldg_link_pairs, tmp) + } + let p_ports = data.data[0] + let links_by_pk = ApiUtil.dict_by_value_of_array(data.data[0], 'pk') + for (let p of p_ports) { + // Undefinierte Kabel + if (p.mdl_bldg != null && (p.mdl_bldg != links_by_pk[p.connected_pk].mdl_bldg) && links_by_pk[p.connected_pk].mdl_bldg != null) { + let p0 = Object.assign({}, p) + p0['latlng'] = self.get_bldg_coords_fuzzy(p0.mdl_bldg) + let p1 = Object.assign({}, links_by_pk[p.connected_pk]) + p1['latlng'] = self.get_bldg_coords_fuzzy(p1.mdl_bldg) + self.lwl_inter_bldg_link_pairs[type_group].push([p0, p1]) + // Kabel + } else if (p.dest_connected_pk in links_by_pk && links_by_pk[p.connected_pk].protocol == "[passiv]" && p.mdl_bldg != null && (p.mdl_bldg != links_by_pk[p.dest_connected_pk].mdl_bldg) && links_by_pk[p.dest_connected_pk].mdl_bldg != null) { + let p0 = Object.assign({}, p) + p0['latlng'] = self.get_bldg_coords_fuzzy(p0.mdl_bldg) + let p1 = Object.assign({}, links_by_pk[p.dest_connected_pk]) + p1['latlng'] = self.get_bldg_coords_fuzzy(p1.mdl_bldg) + self.lwl_inter_bldg_link_pairs[type_group].push([p0, p1]) + } + } + for (let i = 0; i < self.waiting_for_types.length; i++) { + if (self.waiting_for_types[i] == type_group) { + delete self.waiting_for_types[i] + break + } + } + }) + } + } + } + } +</script> + +<style scoped> +</style> diff --git a/frontend/src/views/netdb/Tokens.vue b/frontend/src/views/netdb/Tokens.vue new file mode 100644 index 0000000000000000000000000000000000000000..9e959d90e0d4cd61b0496ee05be49503edfe5f65 --- /dev/null +++ b/frontend/src/views/netdb/Tokens.vue @@ -0,0 +1,678 @@ +<template> + <div id="Tokens"> + <h1 class="my-4">Accounts & Tokens</h1> + <b-modal id="modal-create-account" size="lg" title="Subaccount erstellen" + @hidden="resetAccountData"> + <b-form @submit="createAccount"> + <b-form-group label="Beschreibung:" label-for="input-account-create-description"> + <b-form-textarea + id="input-account-create-description" + v-model.trim="new_account.description" + placeholder="Beschreibung eingeben" + /> + </b-form-group> + <template v-if="roles_by_account != null && roles_by_account[$store.state.user.login_name] != null"> + <b-form-group label="Rollen"> + <b-form-radio v-model="new_account.do_copy_roles" :value="true">von Parent-Account übernehmen + </b-form-radio> + <b-form-radio v-model="new_account.do_copy_roles" :value="false">individuell zuweisen + </b-form-radio> + </b-form-group> + <template v-if="!new_account.do_copy_roles"> + <template v-for="role in roles_by_account[$store.state.user.login_name]"> + <b-button + :key="'role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" + :id="'account-create-role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" + :style="{background: role.role_fq_name.toHSL({lit: [30, 40]}), border: 'none'}" + class="mr-1 mb-1 badge"> + {{ role.system.toUpperCase() }}<br>{{ role.role }} + <b-checkbox/> + </b-button> + <b-popover + :key="'role-badge-tooltip' + role.mgr_login_name + '-' + role.role_fq_name" + :target="'account-create-role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" + triggers="focus" custom-class="popover-wide" + placement="bottom"> + <b-table :fields="permission_list_fields" + :items="role.contained_permissions" + sticky-header/> + </b-popover> + </template> + </template> + </template> + </b-form> + <template v-slot:modal-footer="{cancel}"> + <b-button variant="outline-secondary" @click="cancel"> + Abbrechen + </b-button> + <b-button type="submit" variant="success" :disabled="waiting" @click="createAccount"> + Erstellen + </b-button> + </template> + </b-modal> + <b-row> + <b-col lg="9"> + <b-input-group class="shadow"> + <b-input-group-prepend> + <b-input-group-text> + <font-awesome-icon :icon="['fas', 'filter']"/> + </b-input-group-text> + </b-input-group-prepend> + <b-form-input id="filter-input" v-model.trim="filter_text" placeholder="Filter" + autofocus debounce="300"/> + </b-input-group> + </b-col> + <b-col lg="3" sm="*"> + <b-button block variant="outline-success" v-b-modal.modal-create-account class="shadow"> + Subaccount erstellen + </b-button> + </b-col> + </b-row> + <b-modal id="modal-edit-account" size="lg" title="Account bearbeiten" + @hidden="resetAccountData"> + <b-form> + <b-form-group label="Beschreibung:" label-for="input-account-edit-description"> + <b-form-textarea + id="input-account-edit-description" + v-model.trim="new_account.description" + placeholder="Beschreibung eingeben" + /> + </b-form-group> + <b-form-group label="Rollen"> + <template v-if="roles_by_account != null && roles_by_account[$store.state.user.login_name] != null"> + <template v-for="(role, index) in roles_by_account[$store.state.user.login_name]"> + <b-button + :key="'role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" + :id="'account-create-role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" + :style="{background: role.role_fq_name.toHSL({lit: [30, 40]}), border: 'none'}" + class="mr-1 mb-1 badge"> + {{ role.system.toUpperCase() }}<br>{{ role.role }} + <b-checkbox v-model="new_account.role_selection[index]"/> + </b-button> + <b-popover + :key="'role-badge-tooltip' + role.mgr_login_name + '-' + role.role_fq_name" + :target="'account-create-role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" + triggers="focus" custom-class="popover-wide" + placement="bottom"> + <template v-for="contained_role in role.contained_roles"> + <b-button + :key="'role-badge-' + role.mgr_login_name + '-contained-' + contained_role" + :id="'account-create-role-badge-' + role.mgr_login_name + '-contained-' + contained_role" + :style="{background: contained_role.toHSL({lit: [30, 40]}), border: 'none'}" + class="mr-1 mb-1 badge"> + {{ contained_role.split('.')[0].toUpperCase() }}<br>{{ contained_role.split('.')[1] }} + <b-checkbox v-model="new_account.role_selection[index]"/> + </b-button> + </template> + <b-table :fields="permission_list_fields" + :items="role.contained_permissions" + sticky-header/> + </b-popover> + </template> + </template> + </b-form-group> + </b-form> + <template v-slot:modal-footer="{cancel}"> + <b-alert id="alert-edit-account" v-model="show_modal_alert" + variant="danger" dismissible fade class="mb-0 flex-grow"> + {{ modal_alert_content }} + </b-alert> + <b-button variant="outline-secondary" @click="cancel"> + Abbrechen + </b-button> + <b-button id="button-delete-account" variant="danger"> + Löschen + </b-button> + <b-popover ref="popoverAccountDelete" target="button-delete-account" triggers="click" + placement="bottom"> + <template v-slot:title>Account wirklich löschen?</template> + <b-button variant="danger" :disabled="waiting" @click="deleteAccount"> + Löschen + </b-button> + <b-button variant="outline-secondary" @click="$refs.popoverAccountDelete.$emit('close')"> + Abbrechen + </b-button> + </b-popover> + <b-button variant="primary" :disabled="waiting" @click="editAccount"> + Änderungen übernehmen + </b-button> + </template> + </b-modal> + <b-modal id="modal-create-token" size=lg title="Token erstellen" + @hidden="resetTokenData"> + <b-form> + <b-form-group label="Beschreibung:" label-for="input-token-create-description"> + <b-form-textarea + id="input-token-create-description" + v-model.trim="new_token.description" + required + placeholder="Beschreibung" + /> + </b-form-group> + <div v-if="new_token.expiration_date != null"> + <DateTimePicker label="Ablaufdatum:" :model="new_token.expiration_date"/> + <b-button block variant="outline-secondary" @click="new_token.expiration_date = null"> + Ablaufdatum entfernen + </b-button> + </div> + <b-button block variant="outline-secondary" v-else + @click="new_token.expiration_date = formatDate(getDate30DaysAhead())"> + Ablaufdatum hinzufügen + </b-button> + </b-form> + <template v-slot:modal-footer="{cancel}"> + <b-alert id="alert-create-token" v-model="show_modal_alert" + variant="danger" dismissible fade class="mb-0 flex-grow"> + {{ modal_alert_content }} + </b-alert> + <b-button variant="outline-secondary" @click="cancel"> + Abbrechen + </b-button> + <b-button type="submit" variant="success" :disabled="waiting" @click="createToken"> + Erstellen + </b-button> + </template> + </b-modal> + <b-modal id="modal-token" size=lg title="Token erstellt"> + <CopyField class="shadow" :text="token"/> + <b-alert show variant="warning" class="mb-0 mt-3">Bewahren Sie das Token gut auf. Hier werden Sie es nicht + mehr einsehen können! + </b-alert> + <template v-slot:modal-footer="{ok}"> + <b-button variant="success" @click="ok"> + Ok + </b-button> + </template> + </b-modal> + <b-modal id="modal-edit-token" size=lg title="Token bearbeiten"> + <b-form> + <b-form-group label="Beschreibung:" label-for="input-token-edit-description"> + <b-form-textarea + id="input-token-edit-description" + v-model.trim="new_token.description" + required + placeholder="Beschreibung" + /> + </b-form-group> + </b-form> + <div v-if="new_token.expiration_date != null"> + <DateTimePicker label="Ablaufdatum:" :model="new_token.expiration_date"/> + <b-button block variant="outline-secondary" @click="new_token.expiration_date = null"> + Ablaufdatum entfernen + </b-button> + </div> + <b-button block variant="outline-secondary" v-else + @click="new_token.expiration_date = formatDate(getDate30DaysAhead())"> + Ablaufdatum hinzufügen + </b-button> + <template v-slot:modal-footer="{cancel, ok}"> + <b-alert id="alert-edit-token" v-model="show_modal_alert" + variant="danger" dismissible fade class="mb-0 flex-grow"> + {{ modal_alert_content }} + </b-alert> + <b-button variant="outline-secondary" @click="cancel"> + Abbrechen + </b-button> + <b-button id="button-delete-token" variant="danger"> + Löschen + </b-button> + <b-popover ref="popoverTokenDelete" target="button-delete-token" triggers="click" placement="bottom"> + <template v-slot:title>Token wirklich löschen?</template> + <b-button variant="danger" @click="deleteToken"> + Löschen + </b-button> + <b-button variant="outline-secondary" @click="$refs.popoverTokenDelete.$emit('close')"> + Abbrechen + </b-button> + </b-popover> + <b-button type="submit" variant="primary" :disabled="waiting" @click="editToken"> + Änderungen übernehmen + </b-button> + </template> + </b-modal> + <Loading :data="[filtered_accounts]"> + <template v-for="account in filtered_accounts"> + <b-card no-body :key="'card-account-' + account.login_name" class="mb-4 shadow"> + <template v-slot:header> + <b-row> + <b-col lg="3"> + <h4> + {{ account.login_name }} + <b-badge variant="success"> + <template v-if="account.login_name in tokens_by_account"> + <template v-if="tokens_by_account[account.login_name].length === 1"> + 1 Token + </template> + <template v-else>{{ tokens_by_account[account.login_name].length }} Tokens + </template> + </template> + <template v-else>0 Tokens</template> + </b-badge> + </h4> + <p class="text-muted">Login Name</p> + </b-col> + <b-col> + <div v-if="account.parent_login_name === account.login_name">Hauptaccount; enthält nur Session-Tokens; + kann + nicht gelöscht werden. + </div> + <div v-else-if="account.description === '' || account.description == null">Keine + Beschreibung vorhanden. + </div> + <div v-else>{{ account.description }}</div> + <p class="text-muted">Beschreibung</p> + </b-col> + <b-col> + <template v-if="roles_by_account[account.login_name] != null"> + <h5 class="mb-0"> + <template + v-for="role in roles_by_account[account.login_name].slice(0, max_role_badge_count)"> + <b-button + :key="'role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" + :id="account.login_name + '-role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" + :style="{background: role.role_fq_name.toHSL({lit: [30, 40]}), border: 'none'}" + class="mr-1 mb-1 badge">{{ role.system.toUpperCase() }}<br>{{ role.role }} + </b-button> + <b-popover + :key="'role-badge-tooltip' + role.mgr_login_name + '-' + role.role_fq_name" + :target="account.login_name + '-role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" + triggers="focus" custom-class="popover-wide" + placement="bottom"> + <b-table :fields="permission_list_fields" + :items="role.contained_permissions" + sticky-header/> + </b-popover> + </template> + </h5> + <h6 v-if="roles_by_account[account.login_name].length > max_role_badge_count"> + + {{ roles_by_account[account.login_name].length - max_role_badge_count }} Weitere + </h6> + </template> + <h6 v-else>Keine Rollen zugewiesen</h6> + <p class="text-muted">Rollen</p> + </b-col> + <b-col lg="2"> + <template v-if="account.parent_login_name !== account.login_name"> + <b-button block variant="outline-primary" + :id="'button-edit-account-' + account.login_name" + @click="showModalEditAccount(account)"> + <font-awesome-icon :icon="['far', 'edit']"/> + </b-button> + <b-tooltip placement="bottom" :target="'button-edit-account-' + account.login_name" + triggers="hover" variant="primary"> + Account bearbeiten + </b-tooltip> + </template> + </b-col> + </b-row> + </template> + <b-button block squared variant="outline-secondary" v-b-toggle="account.login_name + '-collapse'"> + <font-awesome-icon class="collapse-icon" :icon="['fas','chevron-down']"/> + </b-button> + <b-collapse :id="account.login_name + '-collapse'"> + <b-table :items="tokens_by_account[account.login_name]" + :fields="token_list_fields" + class="m-0" + striped + responsive + primary-key="description"> + <template v-slot:head(buttons)> + <template v-if="account.parent_login_name !== account.login_name"> + <b-button block variant="outline-success" + :id="'button-create-token-' + account.login_name" + @click="showModalCreateToken(account.login_name)"> + <font-awesome-icon :icon="['fas', 'plus']"/> + </b-button> + <b-tooltip :target="'button-create-token-' + account.login_name" triggers="hover" + variant="success" placement="left"> + Token erstellen + </b-tooltip> + </template> + </template> + <template v-slot:cell(expiration_date)="data"> + {{ formatDate(data.item.expiration_date) }} + <template v-if="data.item.is_expired"> + (Expired) + </template> + </template> + <template v-slot:cell(buttons)="data"> + <b-button block variant="outline-primary" v-if="account.parent_login_name !== account.login_name" + :id="'button-edit-token-' + account.login_name+ '-' + data.index" + @click="showModalEditToken(data.item)"> + <font-awesome-icon :icon="['far', 'edit']"/> + </b-button> + <b-tooltip :target="'button-edit-token-' + account.login_name+ '-' + data.index" + triggers="hover" variant="primary" placement="left" + v-if="account.parent_login_name !== account.login_name"> + Token bearbeiten + </b-tooltip> + </template> + </b-table> + </b-collapse> + </b-card> + </template> + </Loading> + </div> +</template> + +<script> +import AccountTokenService from '@/api-services/account_token.service'; +import AccountService from '@/api-services.gen/cntl.mgr' +import TokenService from '@/api-services.gen/cntl.wapi_auth' +import ApiUtil from '@/util/apiutil' +import '@/util/colorutil' +import DateTimePicker from "../../components/DateTimePicker"; +import RoleService from '@/api-services.gen/cntl.mgr2role' +import Loading from "../../components/Loading"; +import CopyField from "../../components/CopyField"; + +export default { + name: 'tokens', + components: {CopyField, Loading, DateTimePicker}, + data() { + return { + tokens_by_account: null, + roles_by_account: null, + accounts: null, + new_account: { + parent_login_name: null, + description: '', + login_name: '', + expiration_date: null, + do_copy_roles: true, + role_selection: [] + }, + new_token: { + description: '', + login_name: '', + expiration_date: null + }, + filter_text: "", + token_list_fields: [ + { + key: 'description', + label: "Beschreibung", + sortable: false + }, + { + key: 'expiration_date', + label: "Ablaufdatum", + sortable: true + }, + { + key: 'last_login_date', + label: "Zuletzt verwendet", + formatter: this.formatDate, + sortable: true + }, + { + key: 'last_generate_date', + label: "Zuletzt generiert", + formatter: this.formatDate, + sortable: true + }, + { + key: 'buttons', + label: '', + sortable: false + }, + ], + permission_list_fields: [ + { + key: 'system', + label: "System" + }, + { + key: 'permission', + label: 'Berechtigung' + }, + ], + show_modal_alert: true, + modal_alert_content: "", + waiting: false, + token: "", + max_role_badge_count: 10, + max_permission_count: 10 + } + }, + computed: { + filtered_accounts() { + if (this.accounts == null) { + return null + } + if (this.filter_text === '') { + return this.accounts + } + return this.accounts.filter(account => { + return account.login_name.toLowerCase().includes(this.filter_text.toLowerCase()) + || (account.description != null && account.description.toLowerCase().includes(this.filter_text.toLowerCase())) + }) + } + }, + created() { + this.fetchData() + }, + methods: { + fetchData() { + AccountTokenService.list(this.$store.state.netdb_axios_config, this.$store.state.user.login_name).then((response) => { + window.console.log(response) //TODO: Remove + this.accounts = response.data[0] + this.accounts.sort((a, b) => { + return a.parent_login_name === a.login_name ? -1 : b.parent_login_name === b.login_name ? 1 : 0 + }) + this.tokens_by_account = ApiUtil.dict_of_lists_by_value_of_array(this.formatExpiredTokens(response.data[1]), 'login_name') + this.roles_by_account = ApiUtil.dict_of_lists_by_value_of_array(this.formatContainedPermissions(response.data[2]), 'mgr_login_name') + }) + }, + showModalEditAccount(account) { + this.new_account.description = account.description + this.new_account.login_name = account.login_name + this.new_account.parent_login_name = account.parent_login_name + this.show_modal_alert = false + this.$bvModal.show('modal-edit-account') + }, + showModalEditToken(token) { + this.new_token.description = token.description + this.new_token.login_name = token.login_name + this.new_token.expiration_date = token.expiration_date != null ? this.formatDate(token.expiration_date) : null + this.new_token.pk = token.pk + this.show_modal_alert = false + this.$bvModal.show('modal-edit-token') + }, + showModalCreateToken(login_name) { + this.new_token.description = '' + this.new_token.expiration_date = null + this.new_token.login_name = login_name + this.show_modal_alert = false + this.$bvModal.show('modal-create-token') + }, + resetAccountData() { + this.new_account = { + parent_login_name: null, + description: '', + login_name: '', + expiration_date: null, + do_copy_roles: true, + role_selection: [] + } + }, + resetTokenData() { + this.new_token = { + description: '', + login_name: '', + expiration_date: null + } + }, + createAccount() { + this.waiting = true + AccountService.create(this.$store.state.netdb_axios_config, { + do_copy_assignments_new: true, + description_new: this.new_account.description, + allow_data_manipulation_new: true, + login_name_new: null, + do_copy_roles_new: this.new_account.do_copy_roles + }).then((response) => { + if (!this.new_account.do_copy_roles) { + this.new_account.login_name = response.data[0][0].login_name + let roles = [] + this.new_account.role_selection.forEach((picked, index) => { + if (picked) { + roles.push(this.roles_by_account[this.$store.state.user.login_name][index].role_fq_name) + } + }) + RoleService.bulk_update(this.$store.state.netdb_axios_config, { + mgr_login_name_old: this.new_account.login_name, + role_fq_name_list_old: [], + role_fq_name_list_new: roles + }).then(() => { + this.waiting = false + }).catch(error => { + this.modal_alert_content = error.response.data.error.type.text_descr + this.show_modal_alert = true + this.waiting = false + }) + } + this.$bvModal.hide('modal-create-account') + this.fetchData() + this.waiting = false + }).catch(error => { + this.modal_alert_content = error.response.data.error.type.text_descr + this.show_modal_alert = true + this.waiting = false + }) + }, + editAccount() { + this.waiting = true + let roles = [] + this.new_account.role_selection.forEach((picked, index) => { + if (picked) { + roles.push(this.roles_by_account[this.$store.state.user.login_name][index].role_fq_name) + } + }) + AccountTokenService.update(this.$store.state.netdb_axios_config, { + description_new: this.new_account.description, + login_name_old: this.new_account.login_name, + login_name_new: this.new_account.login_name, + allow_data_manipulation_new: true, + role_fq_name_list_new: roles + }).then(() => { + this.$bvModal.hide('modal-edit-account') + this.fetchData() + this.waiting = false + }).catch(error => { + this.modal_alert_content = error.response.data.error.type.text_descr + this.show_modal_alert = true + this.waiting = false + }) + }, + deleteAccount() { + this.waiting = true + AccountService.delete(this.$store.state.netdb_axios_config, { + do_delete_references: true, + login_name_old: this.new_account.login_name + }).then(() => { + this.$bvModal.hide('modal-edit-account') + this.fetchData() + this.waiting = false + }).catch(error => { + this.modal_alert_content = error.response.data.error.type.text_descr + this.show_modal_alert = true + this.waiting = false + }) + }, + createToken() { + this.waiting = true + TokenService.create(this.$store.state.netdb_axios_config, { + description_new: this.new_token.description, + login_name_new: this.new_token.login_name, + expiration_date_new: this.new_token.expiration_date + }).then(response => { + this.$bvModal.hide('modal-create-token') + this.token = response.data[0][0].token + this.$bvModal.show('modal-token') + this.fetchData() + this.waiting = false + }).catch(error => { + this.modal_alert_content = error.response.data.error.type.text_descr + this.show_modal_alert = true + this.waiting = false + }) + }, + editToken() { + this.waiting = true + TokenService.update(this.$store.state.netdb_axios_config, { + description_new: this.new_token.description, + pk_old: this.new_token.pk, + do_refresh_token_new: true, + expiration_date_new: this.new_token.expiration_date + }).then(() => { + this.$bvModal.hide('modal-edit-token') + this.fetchData() + this.waiting = false + }).catch(error => { + this.modal_alert_content = error.response.data.error.type.text_descr + this.show_modal_alert = true + this.waiting = false + }) + }, + deleteToken() { + this.waiting = true + TokenService.delete(this.$store.state.netdb_axios_config, { + pk_old: this.new_token.pk + }).then(() => { + this.$bvModal.hide('modal-edit-token') + this.fetchData() + this.waiting = false + }).catch(error => { + this.modal_alert_content = error.response.data.error.type.text_descr + this.show_modal_alert = true + this.waiting = false + }) + }, + formatDate(value) { + if (value == null) { + return 'N/A' + } + return new Date(Date.parse(value)).toLocaleString('de-DE') + }, + getDate30DaysAhead() { + let d = new Date() + d.setDate(d.getDate() + 29) + return d + }, + formatExpiredTokens(tokens) { + tokens.forEach(token => { + if (token.is_expired) { + token._rowVariant = 'danger' + } + } + ) + return tokens + }, + formatContainedPermissions(roles) { + roles.forEach(role => { + if (role.contained_permissions) { + let permissions = [] + for (let [key, value] of Object.entries(role.contained_permissions)) { + permissions.push({system: key, permission: value}) + } + role.contained_permissions = permissions + } + } + ) + return roles + } + } +} +</script> + +<style> +.collapse-icon { + transition: transform; + transition-duration: 250ms; +} + +.not-collapsed > .collapse-icon { + transform: rotate(-180deg); +} +</style> diff --git a/frontend/src/views/netdb/tokens.vue b/frontend/src/views/netdb/tokens.vue deleted file mode 100644 index 6193178ab89a00c970c3dd5f3755467b16d284ba..0000000000000000000000000000000000000000 --- a/frontend/src/views/netdb/tokens.vue +++ /dev/null @@ -1,593 +0,0 @@ -<template> - <div class="main"> - <h1>Accounts & Tokens</h1> - <b-modal id="modal-create-account" size="lg" title="Subaccount erstellen" - @hidden="resetAccountData"> - <b-form @submit="createAccount"> - <b-form-group label="Beschreibung:" label-for="input-account-create-description"> - <b-form-textarea - id="input-account-create-description" - v-model.trim="new_account.description" - placeholder="Beschreibung eingeben" - /> - </b-form-group> - <template v-if="roles_by_account != null && roles_by_account[$store.state.user.login_name] != null"> - <b-form-group label="Rollen" label-for="input-account-create-do-copy-roles"> - <b-form-checkbox id="input-account-create-do-copy-roles" - v-model="new_account.do_copy_roles"> - Parent-Rollen übernehmen - </b-form-checkbox> - </b-form-group> - <template v-if="!new_account.do_copy_roles"> - TODO: Rollen zuweisen <!-- TODO: look to the left--> - </template> - </template> - </b-form> - <template v-slot:modal-footer="{cancel}"> - <b-button variant="outline-secondary" @click="cancel"> - Abbrechen - </b-button> - <b-button type="submit" variant="success" @click="createAccount"> - Erstellen - </b-button> - </template> - </b-modal> - <b-row> - <b-col lg="9"> - <b-input-group> - <b-input-group-prepend> - <b-input-group-text> - <font-awesome-icon :icon="['fas', 'filter']"/> - </b-input-group-text> - </b-input-group-prepend> - <b-form-input id="filter-input" v-model.trim="filter_text" placeholder="Filter" - autofocus debounce="300"/> - </b-input-group> - </b-col> - <b-col lg="3" sm="*"> - <b-button block variant="outline-success" v-b-modal.modal-create-account> - Subaccount erstellen - </b-button> - </b-col> - </b-row> - <b-modal id="modal-edit-account" size="lg" title="Account bearbeiten" - @hidden="resetAccountData"> - <b-form> - <b-form-group label="Beschreibung:" label-for="input-account-edit-description"> - <b-form-textarea - id="input-account-edit-description" - v-model.trim="new_account.description" - placeholder="Beschreibung eingeben" - /> - </b-form-group> - </b-form> - <template v-slot:modal-footer="{cancel}"> - <b-alert id="alert-edit-account" v-model="show_modal_alert" - variant="danger" dismissible fade class="mb-0 flex-grow"> - {{modal_alert_content}} - </b-alert> - <b-button variant="outline-secondary" @click="cancel"> - Abbrechen - </b-button> - <b-button id="button-delete-account" variant="danger"> - Löschen - </b-button> - <b-popover ref="popoverAccountDelete" target="button-delete-account" triggers="click" - placement="bottom"> - <template v-slot:title>Account wirklich löschen?</template> - <b-button variant="danger" @click="deleteAccount"> - Löschen - </b-button> - <b-button variant="outline-secondary" @click="$refs.popoverAccountDelete.$emit('close')"> - Abbrechen - </b-button> - </b-popover> - <b-button variant="primary" @click="editAccount"> - Änderungen übernehmen - </b-button> - </template> - </b-modal> - <b-modal id="modal-create-token" size=lg title="Token erstellen" - @hidden="resetTokenData"> - <b-form> - <b-form-group label="Beschreibung:" label-for="input-token-create-description"> - <b-form-textarea - id="input-token-create-description" - v-model.trim="new_token.description" - required - placeholder="Beschreibung" - /> - </b-form-group> - <div v-if="new_token.expiration_date != null"> - <date-time-picker label="Ablaufdatum:" :model="new_token.expiration_date"/> - <b-button block variant="outline-secondary" @click="new_token.expiration_date = null"> - Ablaufdatum entfernen - </b-button> - </div> - <b-button block variant="outline-secondary" v-else - @click="new_token.expiration_date = formatDate(getDate30DaysAhead())"> - Ablaufdatum hinzufügen - </b-button> - </b-form> - <template v-slot:modal-footer="{cancel}"> - <b-alert id="alert-create-token" v-model="show_modal_alert" - variant="danger" dismissible fade class="mb-0 flex-grow"> - {{modal_alert_content}} - </b-alert> - <b-button variant="outline-secondary" @click="cancel"> - Abbrechen - </b-button> - <b-button type="submit" variant="success" @click="createToken"> - Erstellen - </b-button> - </template> - </b-modal> - <b-modal id="modal-token" size=lg title="Token erstellt"> - <b-input-group> - <b-form-input id="input-token" v-model="token" readonly/> - <b-tooltip target="input-token" :show.sync="token_copied" :disabled="!token_copied" placement="bottom" - variant="primary"> - Kopiert. - </b-tooltip> - <b-input-group-append> - <b-button variant="primary" @click="copyToken"> - <font-awesome-icon :icon="['fas', 'copy']"/> - </b-button> - </b-input-group-append> - </b-input-group> - <b-alert show variant="warning" class="mb-0 mt-3">Bewahren Sie das Token gut auf. Hier werden Sie es nicht - mehr einsehen können! - </b-alert> - <template v-slot:modal-footer="{ok}"> - <b-button variant="success" @click="ok"> - Ok - </b-button> - </template> - </b-modal> - <b-modal id="modal-edit-token" size=lg title="Token bearbeiten"> - <b-form> - <b-form-group label="Beschreibung:" label-for="input-token-edit-description"> - <b-form-textarea - id="input-token-edit-description" - v-model.trim="new_token.description" - required - placeholder="Beschreibung" - /> - </b-form-group> - </b-form> - <div v-if="new_token.expiration_date != null"> - <date-time-picker label="Ablaufdatum:" :model="new_token.expiration_date"/> - <b-button block variant="outline-secondary" @click="new_token.expiration_date = null"> - Ablaufdatum entfernen - </b-button> - </div> - <b-button block variant="outline-secondary" v-else - @click="new_token.expiration_date = formatDate(getDate30DaysAhead())"> - Ablaufdatum hinzufügen - </b-button> - <template v-slot:modal-footer="{cancel, ok}"> - <b-alert id="alert-edit-token" v-model="show_modal_alert" - variant="danger" dismissible fade class="mb-0 flex-grow"> - {{modal_alert_content}} - </b-alert> - <b-button variant="outline-secondary" @click="cancel"> - Abbrechen - </b-button> - <b-button id="button-delete-token" variant="danger"> - Löschen - </b-button> - <b-popover ref="popoverTokenDelete" target="button-delete-token" triggers="click" placement="bottom"> - <template v-slot:title>Token wirklich löschen?</template> - <b-button variant="danger" @click="deleteToken"> - Löschen - </b-button> - <b-button variant="outline-secondary" @click="$refs.popoverTokenDelete.$emit('close')"> - Abbrechen - </b-button> - </b-popover> - <b-button type="submit" variant="primary" @click="editToken"> - Änderungen übernehmen - </b-button> - </template> - </b-modal> - <template v-for="account in filtered_accounts"> - <b-card no-body :key="'card-account-' + account.login_name" class="mb-4"> - <template v-slot:header> - <b-row> - <b-col lg="3"> - <h4> - {{account.login_name}} - <b-badge variant="success"> - <template v-if="account.login_name in tokens_by_account"> - <template v-if="tokens_by_account[account.login_name].length === 1"> - {{tokens_by_account[account.login_name].length}} Token - </template> - <template v-else>{{tokens_by_account[account.login_name].length}} Tokens - </template> - </template> - <template v-else>0 Tokens</template> - </b-badge> - </h4> - <p class="text-muted">Login Name</p> - </b-col> - <b-col> - <div v-if="account.parent_login_name == null">Hauptaccount; enthält nur Session-Tokens; kann - nicht gelöscht werden. - </div> - <div v-else-if="account.description == null">Keine Beschreibung vorhanden.</div> - <div v-else>{{account.description}}</div> - <p class="text-muted">Beschreibung</p> - </b-col> - <b-col> - <template v-if="roles_by_account[account.login_name] != null"> - <h5 class="mb-0"> - <template - v-for="role in roles_by_account[account.login_name].slice(0, max_role_badge_count)"> - <b-button - :key="'role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" - :id="account.login_name + '-role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" - :style="{background: role.role_fq_name.toHSL({lit: [30, 40]}), border: 'none'}" - class="mr-1 mb-1 badge">{{role.system.toUpperCase()}}<br>{{role.role}} - </b-button> - <b-popover - :key="'role-badge-tooltip' + role.mgr_login_name + '-' + role.role_fq_name" - :target="account.login_name + '-role-badge-' + role.mgr_login_name + '-' + role.role_fq_name" - triggers="click blur" - placement="bottom"> - <b-table :fields="permission_list_fields" - :items="role.contained_permissions" - sticky-header/> - </b-popover> - </template> - </h5> - <h6 v-if="roles_by_account[account.login_name].length > max_role_badge_count"> - + {{roles_by_account[account.login_name].length - max_role_badge_count}} Weitere - </h6> - </template> - <h6 v-else>Keine Rollen zugewiesen</h6> - <p class="text-muted">Rollen</p> - </b-col> - <b-col lg="1"> - <template v-if="account.parent_login_name !== null"> - <b-button block variant="outline-primary" - :id="'button-edit-account-' + account.login_name" - @click="showModalEditAccount(account)"> - <font-awesome-icon :icon="['far', 'edit']"/> - </b-button> - <b-tooltip placement="bottom" :target="'button-edit-account-' + account.login_name" - triggers="hover" variant="primary"> - Account bearbeiten - </b-tooltip> - </template> - </b-col> - </b-row> - </template> - <b-button block squared variant="outline-secondary" v-b-toggle="account.login_name + '-collapse'"> - <font-awesome-icon class="collapse-icon" :icon="['fas','chevron-up']"/> - </b-button> - <b-collapse :id="account.login_name + '-collapse'"> - <b-table :items="tokens_by_account[account.login_name]" - :fields="token_list_fields" - class="m-0" - striped - responsive - :tbody-transition-props="leaving_transition_properties" - primary-key="description"> <!-- TODO: Get table animations to work --> - <template v-slot:head(buttons)> - <template v-if="account.parent_login_name !== null"> - <b-button block variant="outline-success" - :id="'button-create-token-' + account.login_name" - @click="showModalCreateToken(account.login_name)"> - <font-awesome-icon :icon="['fas', 'plus']"/> - </b-button> - <b-tooltip :target="'button-create-token-' + account.login_name" triggers="hover" - variant="success" placement="left"> - Token erstellen - </b-tooltip> - </template> - </template> - <template v-slot:cell(expiration_date)="data"> - {{formatDate(data.item.expiration_date)}} - <template v-if="data.item.is_expired"> - (Expired) - </template> - </template> - <template v-slot:cell(buttons)="data"> - <b-button block variant="outline-primary" - :id="'button-edit-token-' + account.login_name+ '-' + data.index" - @click="showModalEditToken(data.item)"> - <font-awesome-icon :icon="['far', 'edit']"/> - </b-button> - <b-tooltip :target="'button-edit-token-' + account.login_name+ '-' + data.index" - triggers="hover" variant="primary" placement="left"> - Token bearbeiten - </b-tooltip> - </template> - </b-table> - </b-collapse> - </b-card> - </template> - </div> -</template> - -<script> - import AccountTokenService from '@/api-services/account_token.service'; - import AccountService from '@/api-services.gen/cntl.mgr' - import TokenService from '@/api-services.gen/cntl.wapi_auth' - import ApiUtil from '@/util/apiutil' - import '@/util/colorutil' - import DateTimePicker from "../../components/date-time-picker"; - - export default { - name: 'tokens', - components: {DateTimePicker}, - data() { - return { - tokens_by_account: null, - roles_by_account: null, - accounts: null, - new_account: { - parent_login_name: null, - description: '', - login_name: '', - expiration_date: null, - do_copy_roles: true - }, - new_token: { - description: '', - login_name: '', - expiration_date: null - }, - filter_text: "", - token_list_fields: [ - { - key: 'description', - label: "Beschreibung", - sortable: false - }, - { - key: 'expiration_date', - label: "Ablaufdatum", - sortable: true - }, - { - key: 'last_login_date', - label: "Zuletzt verwendet", - formatter: this.formatDate, - sortable: true - }, - { - key: 'last_generate_date', - label: "Zuletzt generiert", - formatter: this.formatDate, - sortable: true - }, - { - key: 'buttons', - label: '', - sortable: false - }, - ], - permission_list_fields: [ - { - key: 'system', - label: "System" - }, - { - key: 'permission', - label: 'Berechtigung' - }, - ], - show_modal_alert: false, - modal_alert_content: "", - token: "", - token_copied: false, - leaving_transition_properties: { // TODO: Get table animations to work - name: 'flip-list' - }, - max_role_badge_count: 10, - max_permission_count: 10 - } - }, - computed: { - filtered_accounts() { - if (this.accounts == null) { - return null - } - if (this.filter_text === '') { - return this.accounts - } - return this.accounts.filter(account => { - return account.login_name.toLowerCase().includes(this.filter_text.toLowerCase()) - || (account.description != null && account.description.toLowerCase().includes(this.filter_text.toLowerCase())) - }) - } - }, - created() { - this.fetchData() - }, - methods: { - fetchData() { - AccountTokenService.list(this.$store.state.netdb_axios_config, this.$store.state.user.login_name).then((response) => { - this.accounts = response.data[0] - this.accounts.sort((a, b) => { - return a.parent_login_name == null ? -1 : b.parent_login_name == null ? 1 : 0 - }) - this.tokens_by_account = ApiUtil.dict_of_lists_by_value_of_array(this.formatExpiredTokens(response.data[1]), 'login_name') - this.roles_by_account = ApiUtil.dict_of_lists_by_value_of_array(this.formatContainedPermissions(response.data[2]), 'mgr_login_name') - }) - }, - showModalEditAccount(account) { - this.new_account.description = account.description - this.new_account.login_name = account.login_name - this.new_account.parent_login_name = account.parent_login_name - this.show_modal_alert = false - this.$bvModal.show('modal-edit-account') - }, - showModalEditToken(token) { - this.new_token.description = token.description - this.new_token.login_name = token.login_name - this.new_token.expiration_date = token.expiration_date != null ? this.formatDate(token.expiration_date) : null - this.new_token.pk = token.pk - this.show_modal_alert = false - this.$bvModal.show('modal-edit-token') - }, - showModalCreateToken(login_name) { - this.new_token.description = '' - this.new_token.expiration_date = null - this.new_token.login_name = login_name - this.show_modal_alert = false - this.$bvModal.show('modal-create-token') - }, - resetAccountData() { - this.new_account.description = '' - this.new_account.login_name = '' - this.new_account.expiration_date = null - this.new_account.do_copy_roles = true - }, - resetTokenData() { - this.new_token.description = '' - this.new_token.login_name = '' - this.new_token.expiration_date = null - }, - createAccount() { - AccountService.create(this.$store.state.netdb_axios_config, { - do_copy_assignments_new: true, - description_new: this.new_account.description, - allow_data_manipulation_new: true, - login_name_new: null, - do_copy_roles_new: this.new_account.do_copy_roles - }).then(() => { - this.$bvModal.hide('modal-create-account') - this.fetchData() - }).catch(error => { - this.modal_alert_content = error.response.data.error.type.text_descr - this.show_modal_alert = true - }) - }, - editAccount() { - AccountService.update(this.$store.state.netdb_axios_config, { - description_new: this.new_account.description, - login_name_old: this.new_account.login_name, - login_name_new: this.new_account.login_name, - allow_data_manipulation_new: true - }).then(() => { - this.$bvModal.hide('modal-edit-account') - this.fetchData() - }).catch(error => { - this.modal_alert_content = error.response.data.error.type.text_descr - this.show_modal_alert = true - }) - }, - deleteAccount() { - AccountService.delete(this.$store.state.netdb_axios_config, { - do_delete_references: true, - login_name_old: this.new_account.login_name - }).then(() => { - this.$bvModal.hide('modal-edit-account') - }).catch(error => { - this.modal_alert_content = error.response.data.error.type.text_descr - this.show_modal_alert = true - }) - }, - createToken() { - TokenService.create(this.$store.state.netdb_axios_config, { - description_new: this.new_token.description, - login_name_new: this.new_token.login_name, - expiration_date_new: this.new_token.expiration_date - }).then(response => { - this.$bvModal.hide('modal-create-token') - this.token = response.data[0][0].token - this.$bvModal.show('modal-token') - this.fetchData() - }).catch(error => { - this.modal_alert_content = error.response.data.error.type.text_descr - this.show_modal_alert = true - }) - }, - editToken() { - TokenService.update(this.$store.state.netdb_axios_config, { - description_new: this.new_token.description, - pk_old: this.new_token.pk, - do_refresh_token_new: true, - expiration_date_new: this.new_token.expiration_date - }).then(() => { - this.$bvModal.hide('modal-edit-token') - this.fetchData() - }).catch(error => { - this.modal_alert_content = error.response.data.error.type.text_descr - this.show_modal_alert = true - }) - }, - deleteToken() { - TokenService.delete(this.$store.state.netdb_axios_config, { - pk_old: this.new_token.pk - }).then(() => { - this.$bvModal.hide('modal-edit-token') - this.fetchData() - }).catch(error => { - this.modal_alert_content = error.response.data.error.type.text_descr - this.show_modal_alert = true - }) - }, - formatDate(value) { - if (value == null) { - return 'N/A' - } - return new Date(Date.parse(value)).toLocaleString('de-DE') - }, - getDate30DaysAhead() { - let d = new Date() - d.setDate(d.getDate() + 29) - return d - }, - copyToken() { - // https://www.w3schools.com/howto/howto_js_copy_clipboard.asp - let text = document.getElementById("input-token") - text.select() - text.setSelectionRange(0, 99999) /*For mobile devices*/ - document.execCommand("copy") - this.token_copied = true - }, - formatExpiredTokens(tokens) { - tokens.forEach(token => { - if (token.is_expired) { - token._rowVariant = 'danger' - } - } - ) - return tokens - }, - formatContainedPermissions(roles) { - roles.forEach(role => { - let permissions = [] - for (let [key, value] of Object.entries(role.contained_permissions)) { - permissions.push({system: key, permission: value}) - } - role.contained_permissions = permissions - } - ) - return roles - } - } - } -</script> - -<style scoped> - .collapse-icon { - transition: .2s transform ease-in-out; - } - - .collapsed .collapse-icon { - transform: rotate(-180deg); - - } - - table .flip-list-move { /* TODO: Get table animations to work */ - transition: transform 1s; - } - - .popover { - max-width: 100%; - } -</style> diff --git a/frontend/vue.config.js b/frontend/vue.config.js index 9192f377dcf1035e8a06eafcc21ca6f01ecd581e..7158526d3e3cfd9db00052e44a313d35d4a4a5da 100644 --- a/frontend/vue.config.js +++ b/frontend/vue.config.js @@ -8,7 +8,7 @@ module.exports = { '^/api': { target: 'https://netvs-devel-devel.scc.kit.edu', //target: 'http://localhost:5000 - changeOrigin: true + changeOrigin: false } } } diff --git a/middleware/config_sample.py b/middleware/config_sample.py index f6ec27aa5365db58b70d29a3a374ca6292cacd32..efd8288a17b918afd6c4a1f57b4aa163699ce0d4 100644 --- a/middleware/config_sample.py +++ b/middleware/config_sample.py @@ -28,8 +28,12 @@ LOGIN_URL = 'login_api.login' # LOGIN_URL = 'login_db.login' # moduels ans their 'mountpoints' -MODULES = [{'mod': 'net_suite.modules.dnsvs', 'url': '/dnsvs'}] -DEFAULT_URL = 'dnsvs.vs' +MODULES = [] + +JS_MODULES = [ + 'DNSVS', + 'MACAuth' +] MINIDHCPVS_DB = 'mac_addrs' MINIDHCPVS_USER = 'lease_reader' diff --git a/middleware/net_suite/__init__.py b/middleware/net_suite/__init__.py index 80e2cd8f2db01ec6e834d9b549196bdcdd07e69d..c6a5a444d756e99e9800e448c316f75c5577c891 100644 --- a/middleware/net_suite/__init__.py +++ b/middleware/net_suite/__init__.py @@ -1,23 +1,16 @@ from json import JSONEncoder from flask import Flask, url_for, jsonify -import jinja2 -from flask_compress import Compress -from flask_breadcrumbs import Breadcrumbs from beaker.middleware import SessionMiddleware from kitnet.lib.netdb import PostgreSQL import sys import os import inspect import subprocess -from .model import DBObject, MetaDBObject, Transaction +from .model import DBObject, MetaDBObject, SimpleKITUser import importlib import kitnet.lib.netdd import kitnet.lib.host_oper_mode_data -from jinja2 import evalcontextfilter, Markup, escape -import re -import datetime -import collections import ipaddress import postgresql.types @@ -44,13 +37,9 @@ class ModMetaData(object): self.is_tool = is_tool -def my_finalize(thing): - return thing if thing is not None else '' - - class CustomJSONEncoder(JSONEncoder): def default(self, obj): - if isinstance(obj, DBObject): + if isinstance(obj, DBObject) or isinstance(obj, SimpleKITUser): return {k: v for (k, v) in obj.__dict__.items() if not k.startswith('_')} elif isinstance(obj, ipaddress.IPv4Network) or isinstance(obj, ipaddress.IPv6Network): return {'address': str(obj), 'netmask': obj.netmask, 'broadcast_address': obj.broadcast_address} @@ -58,8 +47,6 @@ class CustomJSONEncoder(JSONEncoder): return str(obj) elif isinstance(obj, ModMetaData): return {k: v for (k, v) in obj.__dict__.items() if 'func' not in k} - elif isinstance(obj, Transaction): - return {k:v for (k,v) in obj.__dict__.items() if not callable(v)} elif isinstance(obj, kitnet.lib.host_oper_mode_data.Loader): return {'is_devel': obj.OP_ENV_IS_DEVEL, 'is_prod': obj.OP_ENV_IS_PROD, 'is_test': obj.OP_ENV_IS_TEST, 'mode': obj.OP_ENV_MODE} @@ -70,27 +57,11 @@ class CustomJSONEncoder(JSONEncoder): class MyApp(Flask): - def __init__(self): - Flask.__init__(self, __name__) - self.jinja_loader = jinja2.ChoiceLoader([ - self.jinja_loader, - jinja2.PrefixLoader({}, delimiter="/") - ]) - - def create_global_jinja_loader(self): - return self.jinja_loader - - def register_blueprint(self, **kwargs): - Flask.register_blueprint(self, **kwargs) - self.jinja_loader.loaders[1].mapping[kwargs['blueprint'].name] = kwargs['blueprint'].jinja_loader - + pass # Define the WSGI application object -app = MyApp() -app.jinja_env.add_extension('jinja2.ext.do') +app = MyApp(__name__) app.json_encoder = CustomJSONEncoder -Compress(app) -Breadcrumbs(app=app) app.wsgi_app = SessionMiddleware(app.wsgi_app, session_opts) # ldap_helper = kitnet.lib.idmldap.Helper(kitnet.lib.idmldap.CfgLdr()) @@ -98,16 +69,6 @@ app.wsgi_app = SessionMiddleware(app.wsgi_app, session_opts) db = PostgreSQL() db_conn = db.connect() -app.jinja_env.finalize = my_finalize - - -def resolve_menu(menu_dict): - for k, v in menu_dict.items(): - if type(v) is dict: - resolve_menu(v) - else: - menu_dict[k] = url_for(v) - def get_git_version(path): try: @@ -118,7 +79,6 @@ def get_git_version(path): return 'unknown' -MENU = collections.OrderedDict() VERSION = get_git_version(__file__) MODS = list() @@ -134,56 +94,8 @@ def load_mods(): app.register_blueprint(blueprint=getattr(mod, m['mod'].split('.')[-1]), url_prefix='{prefix}{url}'.format(prefix='/tools' if mod.METADATA.is_tool else '', url=m['url'])) - if not mod.METADATA.is_tool: - MENU.update(mod.MENU) - else: - if 'Tools' not in MENU: - MENU['Tools'] = dict() - MENU['Tools'].update(mod.MENU) - - -def update_and_load_datadict(): - global colnames - app.logger.info("Updating datadict...") - dd = kitnet.lib.netdd.DataDict() - dd.writer() - db.api_dd = dd.reader() - colnames = {name: {k: v for k, v in db.api_dd['tabcol'][obj.TABLE]['col'].items()} for name, obj in - inspect.getmembers(sys.modules['net_suite.model']) if inspect.isclass(obj) - and DBObject in inspect.getmro(obj) - and obj is not DBObject and MetaDBObject not in inspect.getmro(obj)} - def finalize_init(): db_conn.close() - -@app.context_processor -def inject_colnames(): - return dict(colnames=colnames) - - -@app.route('/api/colnames') -def api_colnames(): - return jsonify(colnames) - - -@app.context_processor -def inject_date(): - return dict(date=datetime.datetime.now()) - - -_paragraph_re = re.compile(r'(?:\r\n|\r|\n){2,}') - - -@app.template_filter() -@evalcontextfilter -def nl2br(eval_ctx, value): - result = u'\n\n'.join(u'<p>%s</p>' % p.replace('\n', '<br>\n') \ - for p in _paragraph_re.split(escape(value))) - if eval_ctx.autoescape: - result = Markup(result) - return result - - from . import views diff --git a/middleware/net_suite/actions.py b/middleware/net_suite/actions.py deleted file mode 100644 index 2e9ffa0b14dc9cff0edd88d900fb307342432013..0000000000000000000000000000000000000000 --- a/middleware/net_suite/actions.py +++ /dev/null @@ -1,310 +0,0 @@ -from .model import * -from flask import render_template - - -class DBAction(object): - def __init__(self, transaction_sql, params_dict, name, ref_link=None): - self.transaction_sql = transaction_sql - self.reindexed_sql = None - self.name = name - self.params_dict = params_dict - self.ref_link = ref_link - self.last_error = None - - def render(self): - return render_template('transactions/generic.html', name=self.name, ref_link=self.ref_link) - - -class AddAction(DBAction): - def __init__(self, transaction_sql, params_dict, name=None, type=None): - super().__init__(transaction_sql=transaction_sql, params_dict=params_dict, name=name, ref_link=None) - self.type = type - - def render(self): - return render_template('transactions/add.html', name=self.name, add_type=self.type) - - -class DeleteAction(DBAction): - def __init__(self, transaction_sql, params_dict, name=None, type=None): - super().__init__(transaction_sql=transaction_sql, params_dict=params_dict, name=name, ref_link=None) - self.type = type - - def render(self): - return render_template('transactions/delete.html', name=self.name, add_type=self.type) - - -class EditAction(DBAction): - def __init__(self, transaction_sql, params_dict, name=None, type=None): - super().__init__(transaction_sql=transaction_sql, params_dict=params_dict, name=name, ref_link=None) - self.type = type - - def render(self): - return render_template('transactions/edit.html', name=self.name, add_type=self.type) - - -class DeleteRecordAction(DeleteAction): - def __init__(self, rr_data, inttype, fqdn): - stmts = [{'name': 'fqdn', 'old_value': fqdn}, - {'name': 'data', 'old_value': rr_data}, - {'name': 'inttype', 'old_value': inttype}] - query = """ - 'dns', - 'record', - 'delete', - {stmts}::json[], - '{{}}' - """ - params_dict = {'stmts': [json.dumps(s) for s in stmts]} - super().__init__(transaction_sql=query, params_dict=params_dict, type='RR', name=rr_data) - self.rr_data = rr_data - self.inttype = inttype - self.fqdn = fqdn - - def render(self): - return render_template('transactions/delete_record.html', rr_data=self.rr_data, inttype=self.inttype, - fqdn=self.fqdn) - - -class AddRecordAction(DeleteAction): - def __init__(self, with_description, rr_data, inttype, fqdn, fqdn_description): - stmts = [{'name': 'fqdn', 'new_value': fqdn}, - {'name': 'data', 'new_value': rr_data}, - {'name': 'inttype', 'new_value': inttype}] - if with_description: - stmts.append({'name': 'fqdn_description', 'new_value': fqdn_description}) - query = """ - 'dns', - 'record', - 'create', - {stmts}::json[], - '{{}}' - """ - params_dict = {'stmts': [json.dumps(s) for s in stmts]} - super().__init__(transaction_sql=query, params_dict=params_dict, type='RR', name=rr_data) - self.rr_data = rr_data - self.inttype = inttype - self.fqdn = fqdn - - def render(self): - return render_template('transactions/add_record.html', rr_data=self.rr_data, inttype=self.inttype, - fqdn=self.fqdn) - - -class EditRecordAction(EditAction): - def __init__(self, old_rr_data, new_rr_data, old_inttype, new_inttype, old_fqdn, new_fqdn): - stmts = [{'name': 'fqdn', 'old_value': old_fqdn, 'new_value': new_fqdn}, - {'name': 'data', 'old_value': old_rr_data, - 'new_value': new_rr_data}, - {'name': 'inttype', 'old_value': old_inttype.name, 'new_value': new_inttype}, - ] - query = """ - 'dns', - 'record', - 'update', - {stmts}::json[], - '{{}}' - """ - params_dict = {'stmts': [json.dumps(s) for s in stmts]} - super().__init__(transaction_sql=query, params_dict=params_dict) - self.old_rr_data = old_rr_data - self.new_rr_data = new_rr_data - self.new_inttype = new_inttype - self.old_fqdn = old_fqdn - self.new_fqdn = new_fqdn # currently not used - self.old_inttype = old_inttype - self.rectype = old_inttype.name.split(',')[-1] - - def render(self): - return render_template('transactions/edit_record.html', old_inttype=self.old_inttype, - new_inttype=self.new_inttype, new_rr_data=self.new_rr_data, old_rr_data=self.old_rr_data, - fqdn=self.old_fqdn, rectype=self.rectype) - - -class AddMgrsAction(AddAction): - def __init__(self, mgrs, area): - stmts = [{'name': 'mgr_login_name_list', 'new_value': mgrs}, - {'name': 'range_name', 'old_value': area.print_name}] - query = """ - 'dns', - 'mgr2range', - 'bulk_update', - {stmts}::json[], - '{{}}' - """ - params_dict = {'stmts': [json.dumps(s) for s in stmts]} - super().__init__(transaction_sql=query, params_dict=params_dict) - self.area = area - self.mgrs = mgrs - - def render(self): - return render_template('transactions/add_mgrs.html', mgrs=self.mgrs, area=self.area) - - -class DeleteMgrsAction(DeleteAction): - def __init__(self, mgrs, area): - stmts = [{'name': 'mgr_login_name_list', 'old_value': mgrs}, - {'name': 'range_name', 'old_value': area.print_name}] - query = """ - 'dns', - 'mgr2range', - 'bulk_update', - {stmts}::json[], - '{{}}' - """ - params_dict = {'stmts': [json.dumps(s) for s in stmts]} - super().__init__(transaction_sql=query, params_dict=params_dict) - self.area = area - self.mgrs = mgrs - - def render(self): - return render_template('transactions/del_mgrs.html', mgrs=self.mgrs, area=self.area) - - -class DeleteFQDNAction(DeleteAction): - def __init__(self, fqdn, force_del_ref_records=False, do_del_pqdn=False, inttype=None): - stmts = [ - {'name': 'value', 'old_value': fqdn}, - {'name': 'force_del_ref_records', 'old_value': force_del_ref_records}, - {'name': 'do_del_pqdn', 'old_value': do_del_pqdn}, - ] - query = """ - 'dns', - 'fqdn', - 'delete', - {stmts}::json[], - '{{}}' - """ - params_dict = {'stmts': [json.dumps(s) for s in stmts]} - super().__init__(transaction_sql=query, params_dict=params_dict) - self.force_del_ref_records = force_del_ref_records - self.do_del_pqdn = do_del_pqdn - self.fqdn = fqdn - self.inttype = inttype - - def render(self): - return render_template('transactions/delete_fqdn.html', fqdn=self.fqdn, - inttype=self.inttype, do_del_pqdn=self.do_del_pqdn, - force_del_ref_records=self.force_del_ref_records) - - -class AddFQDNAction(AddAction): - def __init__(self, fqdn, description, inttype): - stmts = [ - {'name': 'description', 'new_value': description}, - {'name': 'inttype', 'new_value': inttype}, - {'name': 'value', 'new_value': fqdn}, - ] - query = """ - 'dns', - 'fqdn', - 'create', - {stmts}::json[], - '{{}}' - """ - params_dict = {'stmts': [json.dumps(s) for s in stmts]} - super().__init__(transaction_sql=query, params_dict=params_dict) - self.fqdn = fqdn - self.description = description - self.inttype = inttype - - def render(self): - return render_template('transactions/add_fqdn.html', fqdn=self.fqdn, description=self.description, - inttype=self.inttype) - - -class EditFQDNAction(EditAction): - def __init__(self, old_fqdn, new_description, old_description, new_fqdn=None, old_inttype=None, new_inttype=None): - if new_inttype == old_inttype == new_fqdn and old_inttype is None: - stmts = [ - {'name': 'value', 'old_value': old_fqdn, 'new_value': old_fqdn}, # FIXME if net-suite#91 is fixed - {'name': 'description', 'new_value': new_description} - ] - new_fqdn = old_fqdn - old_inttype = new_inttype - else: - stmts = [ - {'name': 'description', 'new_value': new_description}, - {'name': 'inttype', 'new_value': new_inttype}, - {'name': 'value', 'old_value': old_fqdn, 'new_value': new_fqdn}, - ] - query = """ - 'dns', - 'fqdn', - 'update', - {stmts}::json[], - '{{}}' - """ - params_dict = {'stmts': [json.dumps(s) for s in stmts]} - super().__init__(transaction_sql=query, params_dict=params_dict) - self.old_fqdn = old_fqdn - self.new_fqdn = new_fqdn - self.old_description = old_description if not old_description == '' else None - self.new_description = new_description if not old_description == '' else None - self.old_inttype = old_inttype - self.new_inttype = new_inttype - - def render(self): - return render_template('transactions/edit_fqdn.html', old_fqdn=self.old_fqdn, new_fqdn=self.new_fqdn, - old_description=self.old_description, new_description=self.new_description, - old_inttype=self.old_inttype, new_inttype=self.new_inttype) - - -class DeleteDomainsAction(DeleteAction): - def __init__(self, domains, area): - stmts = [{'name': 'fqdn_value_list', 'old_value': domains}, - {'name': 'range_name', 'old_value': area.print_name}] - query = """ - 'dns', - 'domain2range', - 'bulk_update', - {stmts}::json[], - '{{}}' - """ - params_dict = {'stmts': [json.dumps(s) for s in stmts]} - super().__init__(transaction_sql=query, params_dict=params_dict) - self.domains = domains - self.area = area - - def render(self): - return render_template('transactions/delete_domains.html', area=self.area, domains=self.domains) - - -class AddDomainsAction(AddAction): - def __init__(self, domains, area): - stmts = [{'name': 'fqdn_value_list', 'new_value': domains}, - {'name': 'range_name', 'old_value': area.print_name}] - query = """ - 'dns', - 'domain2range', - 'bulk_update', - {stmts}::json[], - '{{}}' - """ - params_dict = {'stmts': [json.dumps(s) for s in stmts]} - super().__init__(transaction_sql=query, params_dict=params_dict) - self.domains = domains - self.area = area - - def render(self): - return render_template('transactions/add_domains.html', area=self.area, domains=self.domains) - - -class EditAreaDescriptionAction(EditAction): - def __init__(self, area, new_description): - stmts = [{'name': 'description', 'new_value': new_description}, - {'name': 'name', 'old_value': area.print_name}] - query = """ - 'dns', - 'range', - 'update', - {stmts}::json[], - '{{}}' - """ - params_dict = {'stmts': [json.dumps(s) for s in stmts]} - super().__init__(transaction_sql=query, params_dict=params_dict) - self.area = area - self.new_description = new_description - - def render(self): - return render_template('transactions/edit_area_description.html', area=self.area, - new_description=self.new_description) diff --git a/middleware/net_suite/model.py b/middleware/net_suite/model.py index 32092c45b492be1b1874ecff0e93a6bfb318f159..a95913a5e086e1a35adf0822e0097acf82a14811 100644 --- a/middleware/net_suite/model.py +++ b/middleware/net_suite/model.py @@ -1,8 +1,9 @@ import datetime import json import dns.name -from .actions import * - +import postgresql +import ipaddress +import requests class BooleanSearchFilter(object): def __init__(self, name, default, form_name): @@ -82,92 +83,6 @@ class RRType(MetaDBObject): return [RRType(**r) for r in rr_types] -class Transaction(object): - def __init__(self): - self.plan = list() - - def add_action(self, action): - if action is not None: - self.plan.append(action) - - def execute(self, db, connection, login_name, dry_run=False): - if len(self.plan) == 0: - return - - params_dict = {'login_name': login_name, 'dry': dry_run} - prefix = 0 - for p in self.plan: # reindex placeholder to avoid conflicts - p.last_error = None - keys = [str(prefix) + k for k in p.params_dict.keys()] - p.reindexed_sql = p.transaction_sql.format( - **{k: '{' + v + '}' for k, v in list(zip(p.params_dict.keys(), keys))}) - params_dict.update({k: v for k, v in list(zip(keys, p.params_dict.values()))}) - prefix += 1 - query = """ - select wapi.data_importer( - in_login_name => {{login_name}}, - in_version_name => 'release', - in_stmt_list => array[{stmts}], - in_report_stmt_pos => true, - in_is_dry_mode => {{dry}} - ); - """.format( - stmts=',\n'.join(['row({})::wapi.imp_ta_stmt_rec_type'.format(p.reindexed_sql) for p in self.plan])) - params_dict = self.__nullify_rec(params_dict) - try: - db.execute(connection, query.replace('{}', '{{}}'), params_dict) - except postgresql.exceptions.Exception as e: - if 'hint' not in e.details: - raise e - err = json.loads(e.details['hint']) - packs = err['user_params_list'] - for p in packs: - if p['fpkg'] == 'wapi' and p['fname'] == 'exec_data_importer': - for param in p['kv_list']: - if param['wapi_name'] == 'pos': - self.plan[int(param['val_wi']) - 1].last_error = err - break - break - raise e - - def __nullify_rec(self, p): - if p is None: - return None - if type(p) == list: - for i in range(len(p)): - if p[i] == '': - p[i] = None - else: - p[i] = self.__nullify_rec(p[i]) - return p - elif type(p) == dict: - for k, v in p.items(): - if v == '': - p[k] = None - else: - p[k] = self.__nullify_rec(v) - return p - else: - try: - data = json.loads(p) - p = json.dumps(self.__nullify_rec(data)) - except: - if p == '': - return None - return p - - def swap(self, old, new): - tmp = self.plan[new] - self.plan[new] = self.plan[old] - self.plan[old] = tmp - - def delete(self, index): - del self.plan[index] - - def save(self, name, db, connection, login_name): # TODO - raise NotImplementedError() - - class EVLogEntry(DBObject): TABLE = 'v_evlog_dflt_top_n' @@ -597,21 +512,6 @@ class DBNetArea(DBObject, NetArea): {'range': self.key_nr}) return [DNSAddr(**r) for r in res] - def delete_domains(self, domains): - return DeleteDomainsAction(domains=domains, area=self) - - def add_domains(self, domains): - return AddDomainsAction(domains=domains, area=self) - - def remove_mgrs(self, mgrs): - return DeleteMgrsAction(area=self, mgrs=mgrs) - - def add_mgrs(self, mgrs): - return AddMgrsAction(mgrs=mgrs, area=self) - - def update_description(self, description): - return EditAreaDescriptionAction(area=self, new_description=description) - @staticmethod def get_area_utilization(db, connection, login, areas): rest = dict() @@ -695,26 +595,6 @@ class RR(MetaDBObject): return None return {'NTree': NTree(**_marshal_dict(res[0], NTree)), 'rr': RR(**_marshal_dict(res[0], RR))} - def update_rr(self, old_fqdn, new_fqdn, rr_data, rr_data_unref, inttype): - rr = str(rr_data_unref + ' ' + rr_data) if rr_data_unref != '' else rr_data - if rr == self.rr_data and inttype == self.inttype.name and old_fqdn == new_fqdn: - return None - return EditRecordAction(new_rr_data=rr, old_inttype=self.inttype, new_inttype=inttype, new_fqdn=new_fqdn, - old_fqdn=old_fqdn, - old_rr_data=self.rr_data) - - @staticmethod - def create(fqdn, rr_data, inttype, description, with_description=False, rr_data_unref=None): - if rr_data_unref is None: - rr_data_unref = '' - rr = (rr_data_unref + ' ' + rr_data).strip() - return AddRecordAction(rr_data=rr, fqdn=fqdn, fqdn_description=description, - inttype=inttype, with_description=with_description) - - @staticmethod - def delete(fqdn, rr_data, inttype): - return DeleteRecordAction(rr_data=rr_data, inttype=inttype, fqdn=fqdn) - @staticmethod def get_by_target_fqdn(login_name, target_fqdn, db, connection): res = db.execute(connection, @@ -810,24 +690,6 @@ class NTree(DBObject): new_description=new_description, old_inttype=self.inttype, new_inttype=new_inttype) - @staticmethod - def update_deferrable(old_fqdn, new_fqdn, old_description, new_description, old_inttype, new_inttype): - return EditFQDNAction(old_fqdn=old_fqdn, new_fqdn=new_fqdn, old_description=old_description, - new_description=new_description, old_inttype=old_inttype, new_inttype=new_inttype) - - @staticmethod - def create(fqdn, description, type): - return AddFQDNAction(fqdn=fqdn, description=description, inttype=type) - - @staticmethod - def update_fqdn_description_deferrable(old_description, new_description, fqdn): - return EditFQDNAction(old_fqdn=fqdn, old_description=old_description, new_description=new_description) - - @staticmethod - def delete(fqdn, force_del_ref_records, do_del_pqdn, inttype=None): - return DeleteFQDNAction(fqdn=fqdn, force_del_ref_records=force_del_ref_records, do_del_pqdn=do_del_pqdn, - inttype=inttype) - class DNSAddr(DBObject): TABLE = 'dns_addr' @@ -853,7 +715,6 @@ class NDPPort(DBObject): self.name = name self.module = module - @staticmethod def get_nd_p_port_by_vlan(db, connection, vlan_id, ni_name): res = db.execute(connection, diff --git a/middleware/net_suite/modules/dnsvs/.gitignore b/middleware/net_suite/modules/dnsvs/.gitignore deleted file mode 100644 index eeb8a6ec40875917aba8a4d6a6a335d2011e6253..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -**/__pycache__ diff --git a/middleware/net_suite/modules/dnsvs/LICENSE b/middleware/net_suite/modules/dnsvs/LICENSE deleted file mode 100644 index da65a8807abf768617cfa14acb83c5ef2a119f39..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 KIT | Steinbuch Centre for Computing - Abteilung Netze - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/middleware/net_suite/modules/dnsvs/__init__.py b/middleware/net_suite/modules/dnsvs/__init__.py deleted file mode 100644 index eefc34298ed68fd86d485995779a2898006f985f..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/__init__.py +++ /dev/null @@ -1,156 +0,0 @@ -from flask import Blueprint, url_for, render_template -from net_suite.model import RRType, BooleanSearchFilter, FqdnNameType, DBNetArea -from net_suite.search_results import SearchResult -from net_suite import db, db_conn, get_git_version, ModMetaData -import ipaddress - -bb_name = 'dnsvs' -dnsvs = Blueprint(bb_name, __name__, template_folder="templates") - - -class RangeSerachResult(SearchResult): - def __init__(self, range): - self.range = range - self.match_ref = url_for('dnsvs.inspect_area', area=range.name, suffix=range.suffix) - - def render(self): - return render_template('dnsvs/search/range_search_result.html', range=self.range) - - -class RRSearchResult(SearchResult): - def __init__(self, rr_data, fqdn, area, suffix, rr_type): - self.fqdn = fqdn - self.rr_data = rr_data - self.match_ref = url_for('dnsvs.inspect_area', _anchor='sec' + rr_type, area=area, suffix=suffix) - self.rr_type = rr_type - - def render(self): - return render_template('dnsvs/search/rr_search_result.html', fqdn=self.fqdn, rr_data=self.rr_data, - rr_type=self.rr_type) - - -class FQDNRecsSearchResult(SearchResult): - def __init__(self, fqdn, fqdn_description, rr_data, rr_type): - self.fqdn = fqdn - self.rr_data = rr_data - self.fqdn_description = fqdn_description - self.rr_type = rr_type - self.match_ref = url_for('dnsvs.inspect_fqdn_recs', fqdn=fqdn) - - def render(self): - return render_template('dnsvs/search/rr_search_result.html', fqdn=self.fqdn, rr_data=self.rr_data, - rr_type=self.rr_type) - - -class FQDNSearchResult(SearchResult): - def __init__(self, fqdn, fqdn_description, parent_fqdn): - self.fqdn = fqdn - self.fqdn_description = fqdn_description - self.match_ref = url_for('dnsvs.inspect_fqdn', fqdn=fqdn) - - def render(self): - return render_template('dnsvs/search/fqdn_search_result.html', fqdn=self.fqdn, - fqdn_description=self.fqdn_description) - - -def search(db, connection, login, term, term_ipaddr, limit, opts=None): - rr_types = [t[len('rr_type_'):] for t in opts if t.startswith('rr_type_')] - fqdn_types = [t[len('s_fqdn_type_'):] for t in opts if t.startswith('s_fqdn_type')] - res = list() - if 'range_addrs' in opts and term_ipaddr is not None: - s_res = db.execute(connection, DBNetArea.FULL_SELECT + """ - WHERE nd_ip_subnet.net >>= ({ip_term}::text::inet) - """, {'ip_term': str(term_ipaddr)}) - res.extend((RangeSerachResult(DBNetArea(**r)) for r in s_res if - login.has_permission('dns.ro') or login.has_range(r['key_nr']))) - if len(rr_types) > 0: - s_res = list() - if term_ipaddr is not None: - s_res.extend(db.execute(connection, """ - select - (select array_agg(name || suffix) from dns_range where key_nr = any(target_range_pk_list)) as target_ranges, - rr_data, - (rrt_rec).name as rrt_name, - fqdn, - fqdn_description - from - dns.list_rr(in_login_name:={login_name}, in_type_list:={type_list}, in_target_ipaddr_cidr_mask:={term_ipaddr}, in_listopt_global:={global}) order by fqdn limit {limit} - """, {'term_ipaddr': str(term_ipaddr), 'login_name': login.login_name, - 'global': login.has_permission('dns.ro'), 'limit': limit, - 'type_list': rr_types})) - s_res.extend(db.execute(connection, """ - with rr as ( - (select - target_range_pk_list, - rr_data, - (rrt_rec).name as rrt_name, - fqdn, - fqdn_description - from - dns.list_rr(in_login_name:={login_name}, in_type_list:={type_list}, in_fqdn_regexp:={term}, in_listopt_global:={global}) limit {limit}) - UNION - (select - target_range_pk_list, - rr_data, - (rrt_rec).name as rrt_name, - fqdn, - fqdn_description - from - dns.list_rr(in_login_name:={login_name}, in_type_list:={type_list}, in_target_fqdn_regexp:={term}, in_listopt_global:={global}) limit {limit}) -) -select - (select array_agg(name || suffix) from dns_range where key_nr = any(rr.target_range_pk_list)) as target_ranges, - rr_data, rrt_name, fqdn, fqdn_description -from rr -order by fqdn - """, {'term': term, 'login_name': login.login_name, 'global': login.has_permission('dns.ro'), - 'limit': limit, - 'type_list': rr_types})) - for s in s_res: - if s['target_ranges'] is None: - res.append( - FQDNRecsSearchResult(fqdn=s['fqdn'], rr_type=s['rrt_name'], rr_data=s['rr_data'], - fqdn_description=s['fqdn_description'])) - continue - for a in s['target_ranges']: - a = a.split('/') - res.append(RRSearchResult(rr_type=s['rrt_name'], area=a[0], suffix=a[1], fqdn=s['fqdn'], - rr_data=s['rr_data'])) - if term_ipaddr is None and len(fqdn_types) > 0: - s_res = db.execute(connection, """ - select - fqdn, - parent_fqdn, - fqdn_description - from - dns.list_fqdn(in_login_name:={login_name}, in_type_list:={inttypes} ,in_value_regexp:={term}, in_listopt_global:={global}) limit {limit} - """, {'term': term, 'login_name': login.login_name, 'inttypes': fqdn_types, - 'global': login.has_permission('dns.ro'), 'limit': limit}) - for s in s_res: - res.append( - FQDNSearchResult(fqdn=s['fqdn'], fqdn_description=s['fqdn_description'], parent_fqdn=s['parent_fqdn'])) - - return res - - -def gen_s_opts(db, connection, login): - return {'Bereiche': [BooleanSearchFilter(name='Adressen in Bereich', form_name='range_addrs', default=True)], - 'Record-Typen': [ - BooleanSearchFilter(name=n.name, form_name='rr_type_{}'.format(n.name), - default=n.name == 'A' or n.name == 'AAAA') - for n in - [r for r in RRType.get_all(db, connection) if - not r.is_intern]], - 'FQDN-Typen': [BooleanSearchFilter(name=n.description, form_name='s_fqdn_type_{}'.format(n.name), - default=n.name == 'alias:0000' or n.name == 'dflt:0100' or n.name == 'dflt:1100') - for n in FqdnNameType.get_all(db, connection)] - } - - -METADATA = ModMetaData(name=bb_name, mod_path=__name__, contact_email='dns-betrieb@scc.kit.edu', - gitlab_url='https://git.scc.kit.edu/scc-net/net-suite/net-suite-dnsvs', - printable_name='DNSVS', version=get_git_version(__file__), search_func=search, - search_opts_func=gen_s_opts) -MENU = {METADATA.printable_name: 'dnsvs.vs'} - -from . import views diff --git a/middleware/net_suite/modules/dnsvs/templates/area_domains.html b/middleware/net_suite/modules/dnsvs/templates/area_domains.html deleted file mode 100644 index 921594a7c0d5c5193db3352b217689ce30dfa19f..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/area_domains.html +++ /dev/null @@ -1,36 +0,0 @@ -{% extends "base.html" %} -{% block body %} - <table class="table table-striped"> - {% for d in domains %} - <form method="post" - action="{{ url_for('dnsvs.edit_range_domains', area=area.name, suffix=area.suffix) }}"> - {{ add_form.csrf_token() }} - <input type="hidden" name="{{ del_form.fqdn.name }}" value="{{ d.fqdn }}"> - <tr> - <td> - {{ d.fqdn }} - </td> - <td> - <span class="pull-right"> - <button type="submit" name="del" class="btn btn-outline-danger"><i class="fa fa-trash" - aria-hidden="true"></i></button> - </span> - </td> - </tr> - </form> - {% endfor %} - <tr> - <form method="post" - action="{{ url_for('dnsvs.edit_range_domains', area=area.name, suffix=area.suffix) }}"> - {{ del_form.csrf_token() }} - <td><input name="{{ add_form.fqdn.name }}" type="text" placeholder="FQDN (bei Mehrfacheingabe: leerzeichengetrennt)" - class="form-control"></td> - <td> - <button type="submit" name="add" class="pull-right btn btn-outline-success"><i class="fa fa-plus" - aria-hidden="true"></i> - </button> - </td> - </form> - </tr> - </table> -{% endblock %} \ No newline at end of file diff --git a/middleware/net_suite/modules/dnsvs/templates/area_edit_descr.html b/middleware/net_suite/modules/dnsvs/templates/area_edit_descr.html deleted file mode 100644 index 63b0b942d276527bb65cc5df6526fd16863c41ad..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/area_edit_descr.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "base.html" %} -{% block body %} - <form method="post" action="{{ url_for('dnsvs.edit_range_descr', area=area.name, suffix=area.suffix) }}"> - {{ descr_form.hidden_tag() }} - <div class="input-group"> - <input class="form-control" name="{{ descr_form.description.name }}" value="{{ descr_form.description.data }}" - placeholder="{{ colnames['DBNetArea']['description'].short_title_abs }}"> - <div class="input-group-append"> - <button type="submit" class="btn btn-outline-success">Änderung in Transaktion übernehmen</button> - </div> - </div> - </form> - -{% endblock %} diff --git a/middleware/net_suite/modules/dnsvs/templates/area_edit_rr.html b/middleware/net_suite/modules/dnsvs/templates/area_edit_rr.html deleted file mode 100644 index 9bf9b1da033b9da0fd2cf68f5c2332ceddf581d8..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/area_edit_rr.html +++ /dev/null @@ -1,119 +0,0 @@ -{% extends "base.html" %} -{% block body %} - {% if rr %} - <h2>Record bearbeiten</h2> - <div class="alert alert-info"><i class="fa fa-info-circle"></i> Zum Bearbeiten des {{ colnames['NTree']['fqdn'].short_title_abs }} und der FQDN-Attribute wie z.B. der {{ colnames['NTree']['description'].short_title_abs }}, <a - href="{{ url_for('dnsvs.edit_fqdn', fqdn=rr_form.fqdn.data, src=request.url) }}">bearbeiten Sie bitte direkt den {{ colnames['NTree']['fqdn'].short_title_abs }}</a>.</div> - {% else %} - {% if rr_type %} - <h2>Neuen {{ rr_type }}-Record anlegen</h2> - {% else %} - <h2>Neuen Record anlegen</h2> - {% endif %} - {% endif %} - {% if area %} - <h5>Bereich: <code>{{ area.net.net }}</code></h5> - {% endif %} - <form method="post" action=""> - {{ rr_form.hidden_tag() }} - <label for="fqdn">{{ inputs['l'][0].label }}</label> - {% if rr %} - <div class="card"> - <a id="fqdn" - href="{{ url_for('dnsvs.edit_fqdn', fqdn=rr_form.fqdn.data, src=request.url) }}">{{ rr_form.fqdn.data }}</a> - </div> - <div> - <label for="fqdn-descr">{{ colnames['NTree']['description'].short_title_abs }}</label> - </div> - <div id="fqdn-descr" class="card">{% if rr_form.description.data %}{{ rr_form.description.data }}{% else %} - <i>Keine {{ colnames['NTree']['description'].short_title_abs }} gesetzt.</i>{% endif %}</div> - {% else %} - <div class="form-group" id="typeahead"> - <input class="form-control {% if rr_form.fqdn.errors|length > 0 %}is-invalid{% endif %}" - id="fqdn" type="text" name="fqdn" placeholder="{{ inputs['l'][0].placeholder }}" - value="{{ rr_form.fqdn.data }}" required> - {% if rr_form.fqdn.errors %} - <div class="invalid-feedback"> - <ul> - {% for e in rr_form.fqdn.errors %} - <li>{{ e }}</li> - {% endfor %} - </ul> - </div> - {% endif %} - </div> - <div class="form-group form-group-inline"> - <label for="fqdn-descr">{{ colnames['NTree']['description'].short_title_abs }}</label> - <input class="form-control {% if rr_form.description.errors|length > 0 %}is-invalid{% endif %}" - id="fqdn-descr" type="text" name="{{ rr_form.description.name }}" - value="{{ rr_form.description.data }}"> - {% if rr_form.description.errors %} - <div class="invalid-feedback"> - <ul> - {% for e in rr_form.description.errors %} - <li>{{ e }}</li> - {% endfor %} - </ul> - </div> - {% endif %} - </div> - <div class="form-check form-check-inline"> - <label class="form-check-label"> - <input class="form-check-input" type="checkbox" value="True" - name="{{ rr_form.description_override.name }}"> - {{ colnames['NTree']['description'].short_title_abs }} überschreiben, falls sie für - diesen {{ colnames['NTree']['fqdn'].short_title_abs }} schon gesetzt ist - </label> - </div> - {% endif %} - <div class="form-group"> - <label for="inttype">Record-Typ</label> - <select class="form-control" id="inttype" name="inttype"> - {% for i in possible_inttypes if (rr == none and i.dns_rr_type_name == rr_type or rr_type is none) or (rr != none and i.dns_rr_type_name == rr['rr'].inttype.dns_rr_type_name) %} - <option {% if rr_form.inttype.data == i.name -%} selected {%- endif %} value="{{ i.name }}"> - {{ rr.dbrt_name }}{{ i.description }} [{{ i.rrd_auto_dml_fqdn_text }}] - </option> - {% endfor %} - </select> - </div> - {% for rr_data_form in rr_form.rr_data %} - <div class="form-group"> - <label>{{ rr_data_form.label }}</label> - <input type="text" placeholder="{{ rr_data_form.description }}" required - class="form-control {% if rr_data_form.errors|length > 0 %}is-invalid{% endif %}" - name="{{ rr_data_form.name }}" - value="{% if rr_data_form.data %}{{ rr_data_form.data }}{% else %}{{ prefix }}{% endif %}"/> - {% if rr_data_form.errors %} - <div class="invalid-feedback"> - <ul> - {% for e in rr_data_form.errors %} - <li>{{ e }}</li> - {% endfor %} - </ul> - </div> - {% endif %} - </div> - {% endfor %} - <a href="{{ return_url }}" class="btn btn-outline-danger">Zurück</a> - <button type="reset" class="btn btn-outline-reset">Eingaben zurücksetzen</button> - {% if rr %} - <button type="submit" class="btn btn-outline-primary" - title="Record-Eintragung in aktuelle Transaktion übernehmen">Änderung in Transaktion übernehmen - </button> - {% else %} - <button type="submit" class="btn btn-outline-success" - title="Record-Eintragung in aktuelle Transaktion übernehmen">Record in Transaktion übernehmen - </button> - {% if rr_type == 'A' or rr_type == 'AAAA' %} - <button type="submit" class="btn btn-outline-success" name="add_next" - title="Record-Eintragung in aktuelle Transaktion übernehmen und weiteren Record eintragen"> - Weiteren Record anlegen - </button> - {% endif %} - {% endif %} - </form> -{% endblock %} -{% block post_script %} - <script src="/static/js/node_modules/typeahead.js/dist/typeahead.bundle.js"></script> - <script src="/static/js/netsuite.dnsvs.fqdn-typeahead.js"></script> -{% endblock %} \ No newline at end of file diff --git a/middleware/net_suite/modules/dnsvs/templates/area_mgrs.html b/middleware/net_suite/modules/dnsvs/templates/area_mgrs.html deleted file mode 100644 index f9c7a5f047e9d5b416caffd3674f4a3fa357294c..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/area_mgrs.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends "base.html" %} -{% block body %} - <table class="table table-striped"> - {% for m in mgrs %} - <form method="post" action="{{ url_for('dnsvs.del_mgr', area=area.name, suffix=area.suffix) }}"> - <input type="hidden" name="login_name" value="{{ m.login_name }}"/> - <tr> - <td>{% if m.is_locked %} - <i class="fa fa-ban text-danger" aria-hidden="true"></i> - <s class="alert-danger">{% endif %}{{ m.first_name }} {{ m.last_name }} - ({{ m.login_name }}{% if m.is_scc_itb %}, ITB{% endif %}){% if m.is_locked %}</s>{% endif %}</td> - <td> - <span class="pull-right"> - <button type="submit" class="btn btn-outline-danger"><i class="fa fa-trash" - aria-hidden="true"></i></button> - </span> - </td> - </tr> - </form> - {% endfor %} - <tr> - <form method="post" action="{{ url_for('dnsvs.add_mgr', area=area.name, suffix=area.suffix) }}"> - <td><input name="login_name" maxlength="{{ colnames['DBMgr']['login_name'].length}}" type="text" placeholder="{{ colnames['DBMgr']['login_name'].short_title_abs }} (bei Mehrfacheingabe: leerzeichengetrennt)" - class="form-control"></td> - <td> - <button type="submit" class="pull-right btn btn-outline-success"><i class="fa fa-plus" - aria-hidden="true"></i></button> - </td> - </form> - </tr> - </table> -{% endblock %} \ No newline at end of file diff --git a/middleware/net_suite/modules/dnsvs/templates/edit_fqdn.html b/middleware/net_suite/modules/dnsvs/templates/edit_fqdn.html deleted file mode 100644 index aa3b170dc647af3ee7c25d2ecafaa65830208fed..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/edit_fqdn.html +++ /dev/null @@ -1,85 +0,0 @@ -{% extends "base.html" %} -{% block body %} - {% if edit %} - <h2>FQDN bearbeiten</h2> - {% if ntree.fqdn_sub_count > 0 or ntree.fqdn_has_rr %} - <div class="alert alert-warning" role="alert"> - <p><b><i class="fa fa-exclamation-triangle"></i></b> Bitte beachten Sie folgende Zusammenhänge:</p> - Der FQDN... - <ul> - {% if ntree.fqdn_sub_count > 0 %} - <li> - enthält <a - href="{{ url_for('dnsvs.inspect_fqdn', fqdn=ntree.fqdn) }}">{{ ntree.fqdn_sub_count }} - FQDNs</a> - </li> - {% endif %} - {% if ntree.fqdn_has_rr %} - <li>besitzt <a - href="{{ url_for('dnsvs.inspect_fqdn_recs', fqdn=ntree.fqdn) }}">Resource-Records</a> - </li> - {% endif %} - </ul> - </div> - {% endif %} - {% else %} - <h2>Neuen FQDN anlegen</h2> - {% endif %} - <form method="post" action=""> - {{ fqdn_form.hidden_tag() }} - <div class="form-group" id="typeahead"> - <label for="fqdn">FQDN</label> - <input class="form-control {% if fqdn_form.fqdn.errors|length > 0 %}is-invalid{% endif %}" - id="fqdn" type="text" name="fqdn" placeholder="" - value="{{ fqdn_form.fqdn.data }}" required> - {% if fqdn_form.fqdn.errors %} - <div class="invalid-feedback"> - <ul> - {% for e in fqdn_form.fqdn.errors %} - <li>{{ e }}</li> - {% endfor %} - </ul> - </div> - {% endif %} - </div> - <div class="form-group form-group-inline"> - <label for="fqdn-descr">{{ colnames['NTree']['description'].short_title_abs }}</label> - <input class="form-control {% if fqdn_form.description.errors|length > 0 %}is-invalid{% endif %}" - id="fqdn-descr" type="text" name="{{ fqdn_form.description.name }}" - value="{{ fqdn_form.description.data }}"> - {% if fqdn_form.description.errors %} - <div class="invalid-feedback"> - <ul> - {% for e in fqdn_form.description.errors %} - <li>{{ e }}</li> - {% endfor %} - </ul> - </div> - {% endif %} - </div> - - <div class="form-group"> - <label for="inttype">FQDN-Typ</label> - <select class="form-control" id="inttype" name="{{ fqdn_form.inttype.name }}"> - {% for i in fqdn_form.inttype.choices %} - <option {% if fqdn_form.inttype.data == i[0] -%} selected {%- endif %} value="{{ i[0] }}"> - {{ i[1] }}</option> - {% endfor %} - </select> - </div> - <a href="{{ return_url }}" class="btn btn-outline-danger">Zurück</a> - <button type="reset" class="btn btn-outline-reset">Eingaben zurücksetzen</button> - {% if edit %} - <button type="submit" class="btn btn-outline-primary" - title="FQDN-Änderung in aktuelle Transaktion übernehmen">Änderungen in Transaktion übernehmen - </button> - {% else %} - <button type="submit" class="btn btn-outline-success" - title="FQDN-Eintragung in aktuelle Transaktion übernehmen">FQDN in Transaktion übernehmen - </button> - {% endif %} - </form> -{% endblock %} -{% block post_script %} - <script src="/static/js/node_modules/typeahead.js/dist/typeahead.bundle.js"></script> -{% endblock %} \ No newline at end of file diff --git a/middleware/net_suite/modules/dnsvs/templates/entry_page.html b/middleware/net_suite/modules/dnsvs/templates/entry_page.html deleted file mode 100644 index d3c41246b83b332bdac35038bd1ee2a52b7f116b..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/entry_page.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "base.html" %} -{% block body %} - <div class="row tr-row d-print-none"> - <div class="col"> - <a class="btn btn-outline-success fill" href="{{ url_for('dnsvs.create_rr_data_fast') }}">Record <i class="fa fa-plus"></i></a> - </div> - <div class="col"> - <a class="btn btn-outline-success fill" href="{{ url_for('dnsvs.add_fqdn') }}">FQDN <i class="fa fa-plus"></i></a> - </div> - </div> - <ul class="nav nav-pills nav-fill d-print-none"> - <li class="nav-item"><a {% if (active|string()).endswith('ranges') %} class="nav-link active" {% else %} - class="nav-link" {% endif %} - href="{{ url_for('dnsvs.entry_ranges') }}">Ihre - Bereiche</a></li> - <li class="nav-item"><a {% if (active|string()).endswith('fqdns') %} class="nav-link active" {% else %} - class="nav-item" {% endif %} - href="{{ url_for('dnsvs.entry_fqdns') }}">Ihre - FQDNs</a></li> - </ul> - {% block entry_page_body %}{% endblock %} -{% endblock %} \ No newline at end of file diff --git a/middleware/net_suite/modules/dnsvs/templates/eventlog.html b/middleware/net_suite/modules/dnsvs/templates/eventlog.html deleted file mode 100644 index 34ae9461d4f8899f0cbb134cf776969fe21843b9..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/eventlog.html +++ /dev/null @@ -1,47 +0,0 @@ -{% extends "base.html" %} -{% block body %} - <p class="inline">Änderungen der letzten - <form id="top_n_form" method="get" class="inline"> - <select id="top_n_selector" name="top_n"> - <option {% if top_n == 10 %}selected{% endif %}>10</option> - <option {% if top_n == 50 %}selected{% endif %}>50</option> - <option {% if top_n == 100 %}selected{% endif %}>100</option> - </select></form> | - <form id="top_n_form" method="get" class="inline"> - <input type="number" placeholder="Anzahl" name="top_n"> - <button type="submit" class="btn btn-outline-primary"><i class="fa fa-arrow-right"></i></button> - </form> - Transaktionen.</p> - <table class="table table-striped"> - <tr> - <th>Datum</th> - <th>User</th> - <th colspan="2">Aktionen</th> - </tr> - {% for t,es in evitems %} - {% for e in es %} - <tr> - {% if loop.first %} - <td class="vertical-center" rowspan="{{ es|length }}">{{ t|strftime }}</td> - {% endif %} - <td> - {% if e.mgr.login_name %} - {{ e.mgr.first_name }} {{ e.mgr.last_name }} ({{ e.mgr.login_name }}) - <a href="mailto:{{ e.mgr.first_name }} {{ e.mgr.last_name }}<{{ e.mgr.email }}>?subject=DNSVS: Adressbereich ' - {{ area.name }}{{ area.suffix }}'"> - <i class="fa fa-envelope"></i> - </a> - {% else %} - <i>Account gelöscht</i> - {% endif %} - </td> - <td>{{ e.evlog_dflt_typ_conf_action|capitalize }}</td> - <td>{{ e.log_data|nl2br }}</td> - </tr> - {% endfor %} - {% endfor %} - </table> -{% endblock %} -{% block post_script %} - <script src="/static/js/netsuite.dnsvs.evlog_select.js"></script> -{% endblock %} \ No newline at end of file diff --git a/middleware/net_suite/modules/dnsvs/templates/fqdn-list.html b/middleware/net_suite/modules/dnsvs/templates/fqdn-list.html deleted file mode 100644 index 6c058f3589f2e70c577939966b0b6458c09dda09..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/fqdn-list.html +++ /dev/null @@ -1,111 +0,0 @@ -<div id="fqdns"> - <div class="net-filter-direct"> - <form data-templateurl="{{ url_for('dnsvs.inspect_fqdn', fqdn='[fqdn]') }}" id="form-direct"> - <div class="input-group"> - <div class="input-group-prepend"> - <span class="input-group-text"><i class="fa fa-filter" - aria-hidden="true"></i></span> - </div> - <input class="search form-control" id="filter-direct" placeholder="Filter & Direktwahl" autofocus="yes"/> - <div class="input-group-append"> - <button title="Gehe direkt zu FQDN" data-templateurl="{{ url_for('dnsvs.inspect_fqdn', fqdn='[template]') }}" - class="btn btn-outline-secondary" type="submit"> - <i class="fa fa-arrow-right"></i> - </button> - </div> - </div> - </form> - </div> - <table class="table table-responsive table-striped"> - <tr> - <th colspan="2" class="vertical-center">{{ colnames['NTree']['fqdn'].short_title_abs }} <a class="sort" data-order="asc" data-target="fqdn" href="javascript:void(0)"><i class="fa fa-sort-asc"></i></a></th> - <th class="vertical-center">{{ colnames['NTree']['description'].short_title_abs }} <a class="sort" data-order="" data-target="description" href="javascript:void(0)"><i class="fa fa-sort"></i></a></th> - <th class="vertical-center">Aktionen</th> - <th><a class="btn btn-outline-success pull-right" href="{{ url_for('dnsvs.add_fqdn') }}"><i - class="fa fa-plus"></i></a></th> - </tr> - <tbody class="list"> - {% for f in fqdns %} - <tr> - <td class="fqdn" data-fqdn="{{ f.fqdn }}" title="{{ f.dbnt_name }}"> - {% if f.is_d and f.fqdn_sub_count > 0 %} - <a href="{{ url_for('dnsvs.inspect_fqdn', fqdn=f.fqdn if not f.fqdn == '.' else '$') }}">{{ f.fqdn }}</a> - {% if f.is_d %}<span class="badge badge-info">Domain</span>{% endif %} - <a href="{{ url_for('dnsvs.inspect_fqdn', fqdn=f.fqdn if not f.fqdn == '.' else '$') }}" - class="badge badge-primary" title="#FQDNs unter FQDN">{{ f.fqdn_sub_count }} <span - class="sr-only">FQDNs</span></a> - {% else %} - {{ f.fqdn }} {% if f.is_d %}<span class="badge badge-info">Domain</span>{% endif %} - <span class="badge badge-secondary" title="#FQDNs unter FQDN">{{ f.fqdn_sub_count }} <span - class="sr-only">FQDNs</span></span> - {% endif %} - </td> - <td> - {% if f.fqdn_has_rr %} - <div class="btn-group"> - <button type="button" class="btn btn-default dropdown-toggle" - data-toggle="dropdown" aria-haspopup="true" - aria-expanded="false"> - <i class="fa fa-info-circle" - aria-hidden="true"></i> <span class="caret"></span> - </button> - <div class="dropdown-menu"> - <a class="dropdown-item" - href="{{ url_for('dnsvs.inspect_fqdn_recs', fqdn=f.fqdn if not f.fqdn == '.' else '$') }}">Alle - Records zu FQDN</a> - <a class="dropdown-item" - href="{{ url_for('dnsvs.inspect_fqdn_refs', fqdn=f.fqdn if not f.fqdn == '.' else '$') }}">Alle - Referenzen auf FQDN</a> - </div> - </div> - {% endif %} - </td> - <td class="description">{{ f.description }}</td> - <td colspan="2"><a href="{{ url_for('dnsvs.edit_fqdn', fqdn=f.fqdn) }}" class="btn btn-outline-primary"><i class="fa fa-pencil"></i></a> - <div class="btn-group"> - <button type="button" class="btn btn-outline-danger dropdown-toggle" - data-toggle="dropdown" aria-haspopup="true" - aria-expanded="false"> - <i class="fa fa-trash" - aria-hidden="true"></i> <span class="caret"></span> - </button> - <div class="dropdown-menu dropdown-menu-right"> - <form method="post" target=""> - {{ form.csrf_token }} - <input type="hidden" value="{{ f.fqdn }}" name="fqdn"> - <input type="hidden" value="False" name="do_del_pqdn"> - <input type="hidden" value="False" name="force_del_ref_records"> - <button type="submit" class="dropdown-item">FQDN löschen</button> - </form> - <form method="post" target=""> - {{ form.csrf_token }} - <input type="hidden" value="{{ f.fqdn }}" name="fqdn"> - <input type="hidden" value="False" name="do_del_pqdn"> - <input type="hidden" value="True" name="force_del_ref_records"> - <button type="submit" class="dropdown-item">FQDN löschen - und {{ colnames['NTree']['force_del_ref_records'].short_title_rel }}</button> - </form> - <form method="post" target=""> - {{ form.csrf_token }} - <input type="hidden" value="{{ f.fqdn }}" name="fqdn"> - <input type="hidden" value="True" name="do_del_pqdn"> - <input type="hidden" value="False" name="force_del_ref_records"> - <button type="submit" class="dropdown-item">FQDN löschen - und {{ colnames['NTree']['do_del_pqdn'].short_title_rel }}</button> - </form> - <form method="post" target=""> - {{ form.csrf_token }} - <input type="hidden" value="{{ f.fqdn }}" name="fqdn"> - <input type="hidden" value="True" name="do_del_pqdn"> - <input type="hidden" value="True" name="force_del_ref_records"> - <button type="submit" class="dropdown-item">FQDN - löschen, {{ colnames['NTree']['force_del_ref_records'].short_title_rel }} - und {{ colnames['NTree']['do_del_pqdn'].short_title_rel }}</button> - </form> - </div> - </div> - </tr> - {% endfor %} - </tbody> - </table> -</div> diff --git a/middleware/net_suite/modules/dnsvs/templates/inspect_area.html b/middleware/net_suite/modules/dnsvs/templates/inspect_area.html deleted file mode 100644 index 6e246d0cec2e60ebc1d578d0373498479d8bf186..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/inspect_area.html +++ /dev/null @@ -1,286 +0,0 @@ -{% extends "base.html" %} -{% block overview_table %} - <table class="table address-table"> - <tr> - <th title="{{ colnames['DBNetArea']['name'].long_title }}">{{ colnames['DBNetArea']['name'].short_title_abs }}</th> - <td colspan="2">{{ area.print_name }}</td> - </tr> - <tr> - <th title="{{ colnames['DBNetArea']['description'].long_title }}">{{ colnames['DBNetArea']['description'].short_title_abs }}</th> - <td>{{ area.description }}</td> - <td> - <a href="{{ url_for('dnsvs.edit_range_descr', area=area.name, suffix=area.suffix) }}" - class="btn btn-outline-primary d-print-none"><i - class="fa fa-pencil" aria-hidden="true"></i></a> - </td> - </tr> - <tr> - <th title="{{ colnames['Facility']['short_name'].long_title }}">{{ colnames['Facility']['short_name'].short_title_abs }}</th> - <td title="{{ area.facility.name }}" colspan="2">{{ area.facility.short_name }}</td> - </tr> - <tr> - <th title="{{ colnames['Net']['net'].long_title }}">{{ colnames['Net']['net'].short_title_abs }}</th> - <td colspan="2"><code>{{ area.net.net }}</code></td> - </tr> - {% if area.net.net.version == 4 %} - <tr> - <th title="{{ colnames['Net']['ip_mask'].long_title }}">{{ colnames['Net']['ip_mask'].short_title_abs }}</th> - <td colspan="2"><code>{{ area.net.net.netmask }}</code></td> - </tr> - {% endif %} - <tr> - <th title="{{ colnames['Net']['b0'].long_title }}">{{ colnames['Net']['b0'].short_title_abs }}</th> - <td colspan="2" data-network-address="{{ area.net.net.network_address }}"><code>{{ area.net.net.network_address }}</code></td> - </tr> - {% if area.net.net.version == 4 %} - <tr> - <th title="{{ colnames['Net']['b1'].long_title }}">{{ colnames['Net']['b1'].short_title_abs }}</th> - <td colspan="2" data-max-address="{{ area_max.ip_addr }}" data-min-address="{{ area_min.ip_addr }}" data-broadcast-address="{{ area.net.net.broadcast_address }}"><code>{{ area.net.net.broadcast_address }}</code></td> - </tr> - {% endif %} - <tr> - <th title="{{ colnames['DBNetArea']['gateway_list'].long_title }}">{{ colnames['DBNetArea']['gateway_list'].short_title_abs }}</th> - <td colspan="2"> - <ul class="list-unstyled">{% for g in gateways %} - <li><code>{{ g }}</code></li> - {% endfor %} - </ul> - </td> - </tr> - {% if area.vlan %} - <tr> - <th>VLAN</th> - <td colspan="2" title="{{ area.vlan.ni_name }}">{{ area.vlan.name }} (<a title="VLAN {{ area.vlan.id }} in der NETDOC" href="https://www-net{% if not omdl.OP_ENV_IS_PROD %}-devel{% endif %}.scc.kit.edu/~netadmin/netdoc/user/wrapper.cgi/{{ area.vlan.ni_name }}/{{ area.vlan.id }}/" - target="_blank">{{ area.vlan.id }}</a>)</td> - </tr> - {% endif %} - {% if nat_range %} - <tr> - <th>NATVS-Bereich</th> - <td colspan="2"><a target="_blank" href="https://www-net{% if not omdl.OP_ENV_IS_PROD %}-devel{% endif %}.scc.kit.edu/~netadmin/natvs/user/wrapper.cgi/{{ nat_range.print_name }}/{{ area.print_name }}/">{{ nat_range.print_name }}</a></td> - </tr> - {% endif %} - <tr> - <th title="{{ colnames['DBNetArea']['owner_list'].long_title}}">{{ colnames['DBNetArea']['owner_list'].short_title_abs }}</th> - <td> - <ul class="list-unstyled"> - {% for m in mgrs %} - <li> - {% if m.is_locked %} - <i class="fa fa-ban text-danger" - aria-hidden="true"></i> - <s class="alert-danger">{% endif %}{{ m.first_name }} {{ m.last_name }} - ({{ m.login_name }}{% if m.is_scc_itb %}, ITB{% endif %}){% if m.is_locked %}</s>{% endif %} - {% if not m.is_locked %} - <a href="mailto:{{ m.first_name }} {{ m.last_name }}<{{ m.email }}>?subject=DNSVS: Adressbereich '{{ area.print_name}}' ({{ area.net.net }})" - class="d-print-none"> - <i - class="fa fa-envelope" - aria-hidden="true"></i> - </a> - {% endif %} - </li> - {% endfor %} - </ul> - </td> - <td class="d-print-none"> - {% if mgrs|length > 0 %} - <a href="mailto: {% for m in mgrs %}{{ m.first_name }} {{ m.last_name }}<{{ m.email }}>,{% endfor %}?subject=DNSVS: Adressbereich '{{ area.print_name }}' ({{ area.net.net }})" - class="btn btn-outline-primary"> - <i class="fa fa-envelope" aria-hidden="true"></i> - </a> - {% endif %} - {% if user.is_scc_itb or user.has_permission('dns.rw_range') %} - <a href="{{ url_for('dnsvs.edit_mgrs', area=area.name, suffix=area.suffix) }}" - class="btn btn-outline-primary"><i - class="fa fa-pencil" aria-hidden="true"></i></a></td> - {% endif %} - </tr> - <tr> - <th title="{{ colnames['DBNetArea']['subdom_list'].long_title}}">{{ colnames['DBNetArea']['subdom_list'].short_title_abs}}</th> - <td> - <ul class="list-unstyled"> - {% for n in ntree %} - <li title="{{ n.description }}">{{ n.fqdn }}</li> - {% endfor %} - </ul> - </td> - <td class="d-print-none"> - {% if user.is_scc_itb or user.has_permission('dns.rw_range') %} - <a href="{{ url_for('dnsvs.edit_range_domains', area=area.name, suffix=area.suffix) }}" - class="btn btn-outline-primary"><i - class="fa fa-pencil" aria-hidden="true"></i></a> - {% endif %} - </td> - </tr> - <tr> - <th>Letzte Änderung</th> - {% if last_ev %} - <td>{{ last_ev.timestamp|strftime }} durch {{ last_ev.mgr.first_name }} {{ last_ev.mgr.last_name }} - ({{ last_ev.mgr.login_name }})</td> - <td class="d-print-none"><a class="btn btn-outline-primary" - href="{{ url_for('dnsvs.area_evlog', area=area.name, suffix=area.suffix) }}">Letzte - Änderungen</a> - </td> - {% else %} - <td colspan="2"><i>Keine Änderungen vorhanden</i></td> - {% endif %} - </tr> - </table> -{% endblock %} -{% block body %} - <div class="row d-print-table"> - <div class="col-md-10" role="main"> - <section id="overview"> - <div class="card d-print-table-row"> - <div class="card-header">Bereich</div> - {{ self.overview_table() }} - </div> - </section> - <h2 class="page-header rr-head-anchor" id="recs">DNS Records</h2> - <div class="net-filter d-print-none"> - <div class="input-group"> - <div class="input-group-prepend"> - <span class="input-group-text" id="basic-addon1"><i class="fa fa-filter" - aria-hidden="true"></i></span> - </div> - <input class="search form-control" id="filterbar" placeholder="Filter" autofocus="yes"/> - </div> - </div> - <div id="listReserved"> - <section id="secReserved" class="rr-list-anchor"> - <div class="card d-print-table-row"> - <div data-toggle="collapse" data-target="#reserved" - aria-expanded="true" - class="card-header mouse-link netsuite-collapse collapsed"> - Reservierte Adressen - <i class="caret fa fa-caret-down pull-right d-print-none"></i></div> - <div class="table-responsive collapse d-print-block" id="reserved"> - <table class="table table-striped address-table"> - <tr> - <th class="vertical-center">Adresse</th> - </tr> - <tbody class="list"> - {% for i in reserved_addrs %} - <td class="rr-data" data-rr="{{ i.ip_addr }}"> - <code>{{ i.ip_addr }}</code> - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - </div> - </section> - </div> - {% for r in rr_types if r.name in possible_rr_names or r.name in rrs %} - <div id="list{{ r.name }}" class="padding-card-sections"> - <section id="sec{{ r.name }}" class="rr-list-anchor"> - <div class="card d-print-table-row"> - <div data-toggle="collapse" data-target="#{{ r.name }}" - aria-expanded="true" - class="card-header mouse-link netsuite-collapse collapsed">{{ r.name }} - Records - <i class="caret pull-right fa fa-caret-down d-print-none"></i></div> - <div class="collapse d-print-block" id="{{ r.name }}"> - <table class="table table-striped fill address-table"> - <thead> - <tr data-rrt="{{ r.name }}"> - <th class="vertical-center" title="{{ colnames['NTree']['fqdn'].long_title }}" - colspan="2">{{ colnames['NTree']['fqdn'].short_title_abs }} <a class="sort" data-order="asc" data-rectype="{{ r.name }}" data-target="fqdn" href="javascript:void(0)"><i class="fa fa-sort-asc"></i></a></th> - <th class="vertical-center" - title="{{ colnames['NTree']['description'].long_title }}">{{ colnames['NTree']['description'].short_title_abs }} <a class="sort" data-rectype="{{ r.name }}" data-order="" data-target="description" href="javascript:void(0)"><i class="fa fa-sort"></i></a></th> - <th class="vertical-center">Record-Data <a class="sort" data-order="" data-rectype="{{ r.name }}" data-target="rr-data" href="javascript:void(0)"><i class="fa fa-sort"></i></a></th> - <th class="vertical-center d-print-none">Aktionen</th> - <th class="d-print-none"> - {% if r.name in possible_rr_names %} - <a href="{{ url_for('dnsvs.create_rr_data', area=area.name, suffix=area.suffix, type=r.name) }}" - title="Neuen Record anlegen" class="btn btn-outline-success"><i - class="fa fa-plus"></i></a> - {% endif %} - </th> - </tr> - </thead> - <tbody class="list card-table"> - {% for i in rrs[r.name] %} - <tr data-rrt="{{ r.name }}"> - <td class="fqdn vertical-center" title="{{ i['NTree'].dbnt_name }}"> - {{ i['NTree'].fqdn }} {% if i['NTree'].is_d %}<span class="badge badge-info">Domain</span>{% endif %} - </td> - <td class="vertical-center"> - <div class="btn-group d-print-none"> - <button type="button" class="btn btn-default dropdown-toggle" - data-toggle="dropdown" aria-haspopup="true" - aria-expanded="false"> - <span class="fa fa-info-circle" - aria-hidden="true"></span> <span class="caret"></span> - </button> - <div class="dropdown-menu"> - <a class="dropdown-item" - href="{{ url_for('dnsvs.inspect_fqdn_recs', fqdn=i['NTree'].fqdn) }}">Alle - Records zu FQDN</a> - <a class="dropdown-item" - href="{{ url_for('dnsvs.inspect_fqdn_refs', fqdn=i['NTree'].fqdn) }}">Alle - Referenzen auf FQDN</a> - </div> - </div> - </td> - <td class="description vertical-center"> - {{ i['NTree'].description }} - </td> - <td class="rr-data" data-rr="{% if 'IPv6Address' in i['rr'].rr_data_target.__class__.__name__ %}{{ i['rr'].rr_data_target.exploded }}{% else %}{{ i['rr'].rr_data }}{% endif %}"> - <code title="{{ i['rr'].inttype.name }}">{{ i['rr'].rr_data }}</code> - {% if i['rr'].inttype.is_set %} - <span class="badge badge-warning" title="Teil eines RR-Sets">Set</span> - {% endif %} - {% if i['rr'].rr_data in reserved_addrs %} - <span class="badge badge-danger" title="{{ colnames['DNSAddr']['reserved'].long_title }}">Reserviert</span> - {% endif %} - {% if i['rr'].host_is_nws %} - <a class="badge badge-primary" target="_blank" href= - "https://www-net{% if not omdl.OP_ENV_IS_PROD %}-devel{% endif %}.scc.kit.edu/~netadmin/natvs/user/wrapper.cgi/{{ nat_range.print_name }}/{{ area.print_name }}/nat_index.html"> - NATVS</a> - {% endif %} - </td> - <td colspan="2" class="d-print-none"> - {% if i['rr'].inttype.name and not i['rr'].force_auto_dml %} - <a href="{{ url_for('dnsvs.edit_rr_data', area=area.name, suffix=area.suffix, inttype=i['rr'].inttype.name, rr_data=i['rr'].rr_data, fqdn=i['NTree'].fqdn) }}" - class="btn btn-outline-primary"><i - class="fa fa-pencil"></i></a> - <form method="POST" - action="{{ url_for('dnsvs.delete_rr', area=area.name, suffix=area.suffix) }}" - class="inline"> - {{ i['del_form'].hidden_tag() }} - <button type="submit" class="btn btn-outline-danger"><i - class="fa fa-trash"></i></button> - </form> - {% endif %} - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - </div> - </section> - </div> - {% endfor %} - </div> - <div class="col-md-2 d-print-none" role="complementary"> - <ul data-spy="affix" data-offset-top="0" id="area-nav" - class="area-sidebar hidden-print hidden-sm hidden-xs nav flex-column"> - <li class="nav-item"><a class="nav-link" href="#overview">Bereichsinfo</a></li> - <li class="nav-item"><a class="nav-link" id="spy_rr_click_reserved" data-target="#reserved" - href="#secReserved">Reservierte Adressen</a></li> - {% for r in rr_types if r.name in possible_rr_names or r.name in rrs %} - <li class="nav-item"><a class="nav-link" id="spy_rr_click_{{ r.name }}" data-target="#{{ r.name }}" - href="#sec{{ r.name }}">{{ r.name }}</a></li> - {% endfor %} - </ul> - </div> - </div> -{% endblock %} -{% block post_script %} - <script src="/static/js/netsuite.dnsvs.rr-scrollspy.js"></script> - <script src="/static/js/netsuite.dnsvs.rr-list.js"></script> -{% endblock %} diff --git a/middleware/net_suite/modules/dnsvs/templates/inspect_fqdn_recs.html b/middleware/net_suite/modules/dnsvs/templates/inspect_fqdn_recs.html deleted file mode 100644 index 9ab0237efe12c72ffc4af0fb5cdce66cc911ebe4..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/inspect_fqdn_recs.html +++ /dev/null @@ -1,89 +0,0 @@ -{% extends "base.html" %} -{% block body %} - {% if not user.has_permission('dns.ro') %} - <div class="alert alert-warning" role="alert"> - <strong><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></strong> Möglicherweise - werden hier nicht alle Records angezeigt (je nach Berechtigung). - </div> - {% endif %} - <div id="list{{ fqdn }}"> - <table class="table table-striped" id="{{ type }}"> - <tr> - <th class="vertical-center" colspan="2" - title="{{ colnames['NTree']['fqdn'].long_title }}">{{ colnames['NTree']['fqdn'].short_title_abs }}</th> - <th class="vertical-center" - title="{{ colnames['NTree']['description'].long_title }}">{{ colnames['NTree']['description'].short_title_abs }}</th> - <th class="vertical-center">Record-Data</th> - <th class="rr-list-anchor">Record-Typ</th> - <th class="vertical-center">Bereiche</th> - <th class="vertical-center">Aktionen</th> - <th> - <a href="{{ url_for('dnsvs.create_rr_data_fqdn', fqdn=fqdn, src='recs') }}" - title="Neuen Record anlegen" class="btn btn-outline-success"><i - class="fa fa-plus"></i></a> - </th> - </tr> - <tbody class="list"> - {% for i in rr %} - <tr> - {% if loop.first %} - <td rowspan="{{ rr|length }}" class="fqdn vertical-center" title="{{ i['NTree'].dbnt_name }}"> - {{ fqdn }} - </td> - <td rowspan="{{ rr|length }}" class="vertical-center"> - <div class="btn-group"> - <button type="button" class="btn btn-default dropdown-toggle" - data-toggle="dropdown" aria-haspopup="true" - aria-expanded="false"> - <i class="fa fa-info-circle" - aria-hidden="true"></i> <span class="caret"></span> - </button> - <div class="dropdown-menu"> - <a class="dropdown-item" href="{{ url_for('dnsvs.inspect_fqdn_refs', fqdn=fqdn) }}">Alle - Referenzen auf FQDN</a> - </div> - </div> - </td> - <td rowspan="{{ rr|length }} " class="description vertical-center"> - {{ i['NTree'].description }} - </td> - {% endif %} - <td class="rr-data" data-rr="{{ i['rr'].rr_data }}"> - <code title="{{ i['rr'].inttype.name }}">{{ i['rr'].rr_data }}</code> - {% if i['rr'].host_is_nws %} - <a class="badge badge-primary" target="_blank" href= - "https://www-net{% if not omdl.OP_ENV_IS_PROD %}-devel{% endif %}.scc.kit.edu/~netadmin/natvs/user/wrapper.cgi/{{ i['ranges'][0] }}/{{ i['nws_range'].print_name }}/nat_index.html"> - NATVS</a> - {% endif %} - </td> - <td>{{ i['rr'].inttype.dns_rr_type_name }}</td> - <td>{% for a in i['ranges'] %} - <a href="{{ url_for('dnsvs.inspect_area', area=a.split('/')[0],suffix= a.split('/')[1], _anchor='sec'+i['rr'].inttype.dns_rr_type_name) }}">{{ a }}</a> - {% if not loop.last %},{% endif %} - {% endfor %} - </td> - <td colspan="2"> - {% if i['rr'].inttype.name and not i['rr'].force_auto_dml%} - <a href="{{ url_for('dnsvs.edit_rr_data_fqdn', inttype=i['rr'].inttype.name, rr_data=i['rr'].rr_data, fqdn=i['NTree'].fqdn, src='recs') }}" - class="btn btn-outline-primary"><i - class="fa fa-pencil"></i></a> - <form method="post" class="inline" - action="{{ url_for('dnsvs.delete_rr_fqdn', fqdn=fqdn) }}"> - {{ rr_del_form.csrf_token() }} - <input type="hidden" name="src" value="recs"> - <input type="hidden" name="{{ rr_del_form.fqdn.name }}" value="{{ fqdn }}"> - <input type="hidden" name="{{ rr_del_form.rr_data.name }}" - value="{{ i['rr'].rr_data }}"> - <input type="hidden" name="{{ rr_del_form.inttype.name }}" - value="{{ i['rr'].inttype.name }}"> - <button type="submit" class="btn btn-outline-danger"><i - class="fa fa-trash"></i></button> - </form> - {% endif %} - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> -{% endblock %} diff --git a/middleware/net_suite/modules/dnsvs/templates/inspect_fqdn_refs.html b/middleware/net_suite/modules/dnsvs/templates/inspect_fqdn_refs.html deleted file mode 100644 index 9c622b142e35c832a7089195fa7e4acc4778d4f6..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/inspect_fqdn_refs.html +++ /dev/null @@ -1,95 +0,0 @@ -{% extends "base.html" %} -{% block body %} - {% if not user.has_permission('dns.ro') %} - <div class="alert alert-warning" role="alert"> - <strong><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></strong> Möglicherweise - werden hier nicht alle Records angezeigt (je nach Berechtigung). - </div> - {% endif %} - {% for type, r in rr.items() %} - <div id="list{{ type }}" class="padding-card-sections"> - <section id="sec{{ type }}" class="rr-list-anchor"> - <div class="card"> - <div data-toggle="collapse" data-target="#{{ type }}" - aria-expanded="true" - class="card-header mouse-link netsuite-collapse">{{ type }} - Records - <i class="caret fa fa-caret-up pull-right"></i></div> - <div class="table-responsive collapse show" id="{{ type }}"> - <table class="table table-striped"> - <tr> - <th class="vertical-center" title="{{ colnames['NTree']['fqdn'].long_title }}" - colspan="2">{{ colnames['NTree']['fqdn'].short_title_abs }}</th> - <th class="vertical-center" - title="{{ colnames['NTree']['description'].long_title }}">{{ colnames['NTree']['description'].short_title_abs }}</th> - <th class="vertical-center">Record-Data</th> - <th class="vertical-center">Bereiche</th> - <th class="vertical-center">Aktionen</th> - <th></th> - </tr> - <tbody class="list"> - {% for i in r %} - <tr> - <td class="fqdn vertical-center" title="{{ i['NTree'].dbnt_name }}"> - {{ i['NTree'].fqdn }} - </td> - <td class="vertical-center"> - <div class="btn-group"> - <button type="button" class="btn btn-default dropdown-toggle" - data-toggle="dropdown" aria-haspopup="true" - aria-expanded="false"> - <span class="fa fa-info-circle" - aria-hidden="true"></span> <span class="caret"></span> - </button> - <div class="dropdown-menu"> - <a class="dropdown-item" - href="{{ url_for('dnsvs.inspect_fqdn_recs', fqdn=i['NTree'].fqdn) }}">Alle - Records zu FQDN</a> - <a class="dropdown-item" - href="{{ url_for('dnsvs.inspect_fqdn_refs', fqdn=i['NTree'].fqdn) }}">Alle - Referenzen auf FQDN</a> - </div> - </div> - </td> - <td class="description"> - {{ i['NTree'].description }} - </td> - <td class="rr-data" data-rr="{{ i['rr'].rr_data }}"> - <code title="{{ i['rr'].inttype.name if i['rr'].inttype else '' }}">{{ i['rr'].rr_data }}</code> - {% if i['rr'].host_is_nws %} - <a class="badge badge-primary" target="_blank" href= - "https://www-net{% if not omdl.OP_ENV_IS_PROD %}-devel{% endif %}.scc.kit.edu/~netadmin/natvs/user/wrapper.cgi/{{ i['ranges'][0] }}/{{ i['nws_range'].print_name }}/nat_index.html"> - NATVS</a> - {% endif %} - </td> - <td>{% for a in i['ranges'] %} - <a href="{{ url_for('dnsvs.inspect_area', area=a.split('/')[0],suffix= a.split('/')[1], _anchor='sec'+type) }}">{{ a }}</a> - {% if not loop.last %},{% endif %} - {% endfor %} - </td> - <td colspan="2" style="white-space: nowrap"> - {% if i['rr'].inttype and not i['rr'].force_auto_dml%} - <a href="{{ url_for('dnsvs.edit_rr_data_fqdn', inttype=i['rr'].inttype.name, rr_data=i['rr'].rr_data, fqdn=i['NTree'].fqdn, src='refs') }}" - class="btn btn-outline-primary"><i - class="fa fa-pencil"></i></a> - <form method="post" class="inline" action="{{ url_for('dnsvs.delete_rr_fqdn', fqdn=i['rr'].rr_data) }}"> - {{ rr_del_form.csrf_token() }} - <input type="hidden" name="src" value="refs"> - <input type="hidden" name="{{ rr_del_form.fqdn.name }}" value="{{ i['NTree'].fqdn }}"> - <input type="hidden" name="{{ rr_del_form.rr_data.name }}" value="{{ i['rr'].rr_data }}"> - <input type="hidden" name="{{ rr_del_form.inttype.name }}" value="{{ i['rr'].inttype.name }}"> - <button type="submit" class="btn btn-outline-danger"><i - class="fa fa-trash"></i></button> - </form> - {% endif %} - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - </div> - </section> - </div> - {% endfor %} -{% endblock %} diff --git a/middleware/net_suite/modules/dnsvs/templates/inspect_fqdns.html b/middleware/net_suite/modules/dnsvs/templates/inspect_fqdns.html deleted file mode 100644 index 4a59d899aeb26d7a6fc2de8ba60cae10861e9026..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/inspect_fqdns.html +++ /dev/null @@ -1,70 +0,0 @@ -{% extends "base.html" %} -{% block body %} - {% if fqdn.fqdn_has_rr %} - <div class="btn-group"> - <button type="button" class="btn btn-default dropdown-toggle" - data-toggle="dropdown" aria-haspopup="true" - aria-expanded="false"> Informationen zu '{{ fqdn.fqdn }}' - <i class="fa fa-info-circle" - aria-hidden="true"></i> <span class="caret"></span> - </button> - <div class="dropdown-menu"> - <a class="dropdown-item" - href="{{ url_for('dnsvs.inspect_fqdn_recs', fqdn=fqdn.fqdn if not fqdn.fqdn == '.' else '$') }}">Alle - Records zu FQDN</a> - <a class="dropdown-item" - href="{{ url_for('dnsvs.inspect_fqdn_refs', fqdn=fqdn.fqdn if not fqdn.fqdn == '.' else '$') }}">Alle - Referenzen auf FQDN</a> - </div> - </div> - {% endif %}<a href="{{ url_for('dnsvs.edit_fqdn', fqdn=fqdn.fqdn) }}" class="btn btn-outline-primary"><i class="fa fa-pencil"></i></a> - <div class="btn-group"> - <button type="button" class="btn btn-outline-danger dropdown-toggle" - data-toggle="dropdown" aria-haspopup="true" - aria-expanded="false"> - <i class="fa fa-trash" - aria-hidden="true"></i> <span class="caret"></span> - </button> - <div class="dropdown-menu dropdown-menu-right"> - <form method="post" target=""> - {{ form.csrf_token }} - <input type="hidden" value="{{ fqdn.fqdn }}" name="fqdn"> - <input type="hidden" value="False" name="do_del_pqdn"> - <input type="hidden" value="False" name="force_del_ref_records"> - <button type="submit" class="dropdown-item">FQDN löschen</button> - </form> - <form method="post" target=""> - {{ form.csrf_token }} - <input type="hidden" value="{{ fqdn.fqdn }}" name="fqdn"> - <input type="hidden" value="False" name="do_del_pqdn"> - <input type="hidden" value="True" name="force_del_ref_records"> - <button type="submit" class="dropdown-item">FQDN löschen - und {{ colnames['NTree']['force_del_ref_records'].short_title_rel }}</button> - </form> - <form method="post" target=""> - {{ form.csrf_token }} - <input type="hidden" value="{{ fqdn.fqdn }}" name="fqdn"> - <input type="hidden" value="True" name="do_del_pqdn"> - <input type="hidden" value="False" name="force_del_ref_records"> - <button type="submit" class="dropdown-item">FQDN löschen - und {{ colnames['NTree']['do_del_pqdn'].short_title_rel }}</button> - </form> - <form method="post" target=""> - {{ form.csrf_token }} - <input type="hidden" value="{{ fqdn.fqdn }}" name="fqdn"> - <input type="hidden" value="True" name="do_del_pqdn"> - <input type="hidden" value="True" name="force_del_ref_records"> - <button type="submit" class="dropdown-item">FQDN - löschen, {{ colnames['NTree']['force_del_ref_records'].short_title_rel }} - und {{ colnames['NTree']['do_del_pqdn'].short_title_rel }}</button> - </form> - </div> - </div> - <blockquote class="blockquote"> - <p class="mb-0">{{ fqdn.description }}</p> - </blockquote> - {% include "dnsvs/fqdn-list.html" %} -{% endblock body %} -{% block post_script %} - <script src="/static/js/netsuite.dnsvs.list-fqdns.js"></script> -{% endblock post_script %} \ No newline at end of file diff --git a/middleware/net_suite/modules/dnsvs/templates/main_areas.html b/middleware/net_suite/modules/dnsvs/templates/main_areas.html deleted file mode 100644 index c7f693654d920c7b30134a877d0dcf876eccdd93..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/main_areas.html +++ /dev/null @@ -1,93 +0,0 @@ -{% extends "dnsvs/entry_page.html" %} -{% block entry_page_body %} - <h2>Ihre Bereiche</h2> - <div id="areas"> - <div class="net-filter-direct d-print-none"> - <form data-templateurl="{{ url_for('dnsvs.inspect_area', area='[area]', suffix='[suffix]') }}" - id="form-direct"> - <div class="input-group"> - <div class="input-group-prepend"> - <span class="input-group-text"><i class="fa fa-filter" - aria-hidden="true"></i></span> - </div> - <input class="search form-control" id="filter-direct" placeholder="Filter & Direktwahl" autofocus="yes"/> - <div class="input-group-append"> - <button title="Gehe direkt zu Bereich" - class="btn btn-outline-secondary" type="submit"> - <i class="fa fa-arrow-right"></i> - </button> - </div> - </div> - </form> - </div> - <table class="table table-responsive table-striped"> - <tr> - <th>{{ colnames['DBNetArea']['name'].short_title_abs }} <a class="sort d-print-none" data-order="" data-target="name" - href="javascript:void(0)"><i - class="fa fa-sort"></i></a></th> - <th>{{ colnames['DBNetArea']['description'].short_title_abs }} <a class="sort d-print-none" data-order="" - data-target="description" - href="javascript:void(0)"><i - class="fa fa-sort"></i></a></th> - <th>{{ colnames['Net']['net'].short_title_abs }} <a class="sort d-print-none" data-order="" data-target="net" - href="javascript:void(0)"><i class="fa fa-sort"></i></a> - </th> - <th>Ausnutzung <a class="sort d-print-none" data-order="" data-target="utilization" href="javascript:void(0)"><i - class="fa fa-sort"></i></a></th> - <th>{{ colnames['Facility']['name'].short_title_abs }} <a class="sort d-print-none" data-order="asc" - data-target="facility" - href="javascript:void(0)"><i - class="fa fa-sort-asc"></i></a></th> - <th>VLAN <a class="sort d-print-none" data-order="" data-target="vlan" href="javascript:void(0)"><i - class="fa fa-sort"></i></a></th> - </tr> - <tbody class="list"> - {% for a in areas %} - <tr> - <th class="name" data-name="{{ a.print_name }}"><a - href="{{ url_for('dnsvs.inspect_area', area=a.name, suffix=a.suffix, _anchor='recs') }}"> - {{ a.print_name }}</a></th> - <td class="description">{{ a.description }}</td> - <td class="net"><code>{{ a.net.net }}</code></td> - {% if a.print_name in counts %} - {% set util=(counts[a.print_name]/(a.net.net.num_addresses|float)*100) %} - {% else %} - {% set util=0 %} - {% endif %} - {% if a.net.net.version == 4 %} - {% set util=util|round(method='ceil')|int %} - <td data-utilization="{{ (util+1)*10000 }}" class="utilization"> - <div class="progress d-print-none"> - <div class="progress-bar {% if util < 50 %} bg-success {% elif util >=50 and util < 75 %} bg-warning {% else %} bg-danger {% endif %}" - role="progressbar" - aria-valuenow="{{ util }}" - aria-valuemin="0" - aria-valuemax="100">{{ util }}% - </div> - - </div> - <span class="d-none d-print-inline">{{ util }}%</span> - </td> - {% else %} - {% if a.print_name in counts %} - <td data-utilization="{{ counts[a.print_name]*10 }}" - class="utilization">{{ counts[a.print_name] }} Adresse(n) genutzt - </td> - {% else %} - <td data-utilization="0" class="utilization"><i>keine</i> Adresse genutzt</td> - {% endif %} - {% endif %} - <td class="facility" title="{{ a.facility.name }}">{{ a.facility.short_name }}</td> - <td class="vlan" title="{{ a.vlan.ni_name }}"> - {% if a.vlan.name %}{{ a.vlan.name }} (<a title="VLAN {{ a.vlan.id }} in der NETDOC" href="https://www-net{% if not omdl.OP_ENV_IS_PROD %}-devel{% endif %}.scc.kit.edu/~netadmin/netdoc/user/wrapper.cgi/{{ a.vlan.ni_name }}/{{ a.vlan.id }}/" - target="_blank">{{ a.vlan.id }}</a>){% endif %} - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> -{% endblock entry_page_body %} -{% block post_script %} - <script src="/static/js/netsuite.dnsvs.list-areas.js"></script> -{% endblock post_script %} \ No newline at end of file diff --git a/middleware/net_suite/modules/dnsvs/templates/main_fqdns.html b/middleware/net_suite/modules/dnsvs/templates/main_fqdns.html deleted file mode 100644 index 990e4273ea2f009caaa27a0c17f80a89d814e47c..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/main_fqdns.html +++ /dev/null @@ -1,8 +0,0 @@ -{% extends "dnsvs/entry_page.html" %} -{% block entry_page_body %} - <h2>Ihre FQDNs</h2> -{% include "dnsvs/fqdn-list.html" %} -{% endblock entry_page_body %} -{% block post_script %} - <script src="/static/js/netsuite.dnsvs.list-fqdns.js"></script> -{% endblock post_script %} \ No newline at end of file diff --git a/middleware/net_suite/modules/dnsvs/templates/search/fqdn_search_result.html b/middleware/net_suite/modules/dnsvs/templates/search/fqdn_search_result.html deleted file mode 100644 index 4e48e374f866b432bf624181e13c2b831ad329c7..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/search/fqdn_search_result.html +++ /dev/null @@ -1,5 +0,0 @@ -<span class="badge badge-info">FQDN</span> -<div class="d-flex w-100 justify-content-between"> - <h5 class="mb-1">{{ fqdn }}</h5> -</div> -<p class="mb-1">{% if fqdn_description %}{{ fqdn_description }}{% else %}<i>Keine FQDN-Beschreibung vorhanden.</i>{% endif %}</p> diff --git a/middleware/net_suite/modules/dnsvs/templates/search/range_search_result.html b/middleware/net_suite/modules/dnsvs/templates/search/range_search_result.html deleted file mode 100644 index 6c1d8face8de631ea426f1d7994820d8c99f57a0..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/search/range_search_result.html +++ /dev/null @@ -1,20 +0,0 @@ -<span class="badge badge-primary">Bereich</span> -<div class="d-flex w-100 justify-content-between"> - <h5 class="mb-1">{{ range.print_name }}</h5> -</div> -<table class="table table-responsive table-striped"> - <tr> - <th>{{ colnames['DBNetArea']['description'].short_title_abs }}</th> - <th>{{ colnames['Net']['net'].short_title_abs }}</th> - <th>{{ colnames['Facility']['name'].short_title_abs }}</th> - <th>VLAN</th> - </tr> - <tbody> - <tr> - <td>{% if range.description %}{{ range.description }}{% else %}<i>Keine Beschreibung gesetzt</i>{% endif %}</i></td> - <td><code>{{ range.net.net }}</code></td> - <td title="{{ range.facility.name }}">{{ range.facility.short_name }}</td> - <td title="{{ range.vlan.name }}">{{ range.vlan.id }}</td> - </tr> - </tbody> -</table> diff --git a/middleware/net_suite/modules/dnsvs/templates/search/rr_search_result.html b/middleware/net_suite/modules/dnsvs/templates/search/rr_search_result.html deleted file mode 100644 index 53238e47e2154b130a37e8cb5a5dc00a2cd821f1..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/templates/search/rr_search_result.html +++ /dev/null @@ -1,14 +0,0 @@ -<span class="badge badge-warning" title="Resource Record">RR</span> -<div class="d-flex w-100 justify-content-between"> - <h5 class="mb-1">{{ rr_type }}-Record</h5> -</div> -<table class="table table-striped"> - <tr> - <th class="cell-50">FQDN</th> - <th>RR-Data</th> - </tr> - <tr> - <td>{{ fqdn }}</td> - <td><code>{{ rr_data }}</code></td> - </tr> -</table> diff --git a/middleware/net_suite/modules/dnsvs/views.py b/middleware/net_suite/modules/dnsvs/views.py deleted file mode 100644 index 88da8815e8076dc7e1528b81aed2a7ba05278511..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/dnsvs/views.py +++ /dev/null @@ -1,618 +0,0 @@ -from flask import render_template, request, redirect, url_for, abort, jsonify, flash -from net_suite.model import * -from flask_breadcrumbs import register_breadcrumb -from . import dnsvs, METADATA -from net_suite import db, app -from net_suite.views import login_required, api_login_required, get_db_conn -from flask_wtf import FlaskForm -from wtforms import HiddenField, SelectField, StringField, FieldList, FormField, BooleanField -from wtforms.validators import DataRequired, Length, HostnameValidation -import itertools - - -@dnsvs.route('/range') -@api_login_required -def get_ranges(): - s = request.environ['beaker.session'] - ranges =s['login'].get_areas(db=db, connection=get_db_conn()) - counts = DBNetArea.get_area_utilization(db=db, connection=get_db_conn(), login=s['login'], areas=s['login'].get_areas(db=db, connection=get_db_conn())) - return jsonify({'ranges': ranges, 'utilization': counts}) - - -@dnsvs.route('/range/<name>/<suffix>/records') -@api_login_required -def get_range_records(name, suffix): - s = request.environ['beaker.session'] - area_db = DBNetArea.get_by_name(name=name, suffix=suffix, db=db, connection=get_db_conn()) - if area_db is None: - return abort(404) - rrs = area_db.get_rr(db, get_db_conn(), s['login'].login_name) - possible_inttypes = s['login'].get_possible_rr_inttypes(db=db, connection=get_db_conn()) - disp_rr_types = [r for r in RRType.get_all(db, get_db_conn()) if - not r.is_intern or len( - [res for res in rrs if res['rr'].inttype.dns_rr_type_name == r.name]) > 0] # TODO: filter/gen - - if area_db.net.net.version == 4: # TODO: s.o - disp_rr_types = [d for d in disp_rr_types if d.name != "AAAA"] - else: - disp_rr_types = [d for d in disp_rr_types if d.name != "A"] - - reserved_addrs = area_db.get_reserved_addrs(db=db, connection=get_db_conn()) - possible_rr_names = list(set((p.dns_rr_type_name for p in possible_inttypes))) - rrs_by_r_name = dict() - for r in rrs: - if r['rr'].inttype.dns_rr_type_name not in rrs_by_r_name: - rrs_by_r_name[r['rr'].inttype.dns_rr_type_name] = list() - rrs_by_r_name[r['rr'].inttype.dns_rr_type_name].append(r) - return jsonify({'reserved_addresses': reserved_addrs, 'possible_rr_types': disp_rr_types, 'records': rrs_by_r_name, 'editable_rr_types': possible_rr_names}) - - - -@dnsvs.route('/range/<name>/<suffix>') -@api_login_required -def get_range(name, suffix): - s = request.environ['beaker.session'] - area_db = DBNetArea.get_by_name(name=name, suffix=suffix, db=db, connection=get_db_conn()) - if area_db is None: - return abort(404) - nat_range = area_db.get_nat_range(db=db, connection=get_db_conn()) - mgrs = area_db.get_mgrs(db=db, connection=get_db_conn()) - rrs = area_db.get_rr(db, get_db_conn(), s['login'].login_name) - rrs_by_r_name = dict() - for r in rrs: - if r['rr'].inttype.dns_rr_type_name not in rrs_by_r_name: - rrs_by_r_name[r['rr'].inttype.dns_rr_type_name] = list() - rrs_by_r_name[r['rr'].inttype.dns_rr_type_name].append(r) - gateways = area_db.get_gateways(db, get_db_conn()) - return jsonify( - {'range': area_db, 'range_managers': mgrs, 'domains': area_db.get_n_trees(db, get_db_conn()), - 'gateways': gateways, 'nat_range': nat_range}) - - -@dnsvs.route('/') -@register_breadcrumb(dnsvs, '.', METADATA.printable_name) -@login_required -def vs(): - return redirect(url_for('dnsvs.entry_ranges')) - - -@dnsvs.route('/ranges') -@register_breadcrumb(dnsvs, '.ranges', 'Bereiche') -@login_required -def entry_ranges(): - s = request.environ['beaker.session'] - areas = s['login'].get_areas(db=db, connection=get_db_conn()) - counts = DBNetArea.get_area_utilization(db=db, connection=get_db_conn(), login=s['login'], areas=areas) - return render_template('dnsvs/main_areas.html', areas=areas, counts=counts, - title=METADATA.printable_name) - - -@dnsvs.route('/fqdns', methods=['GET', 'POST']) -@register_breadcrumb(dnsvs, '.fqdns', 'FQDNs') -@login_required -def entry_fqdns(): - s = request.environ['beaker.session'] - if request.method == 'POST': - del_f = FQDNDeleteForm() - if del_f.validate_on_submit(): - s = request.environ['beaker.session'] - s['plan'].add_action(NTree.delete(fqdn=del_f.fqdn.data, do_del_pqdn=del_f.do_del_pqdn.data == 'True', - force_del_ref_records=del_f.force_del_ref_records.data == 'True')) - s.save() - return redirect(url_for('dnsvs.entry_fqdns')) - del_form = RRDeleteForm() - fqdns = s['login'].get_fqdn_root_nodes(db=db, connection=get_db_conn()) - return jsonify(fqdns=fqdns) - - -def view_net(*args, **kwargs): - if 'area' not in request.view_args: - if 'fqdn' in request.view_args: - return view_fqdn(args, kwargs) - else: - return list() - return [{'text': request.view_args['area'] + '/' + request.view_args['suffix'], - 'url': url_for('dnsvs.inspect_area', area=request.view_args['area'], - suffix=request.view_args['suffix'])}] - - -def view_fqdn(*args, **kwargs): - fqdn = request.view_args['fqdn'] - fqdn_path = fqdn.split('.') - res = list() - buf = '' - for f in reversed(fqdn_path): - if not f == '' and not f == '$': - buf = f + '.' + buf - rbuf = buf - else: - rbuf = '$' - res.append({'text': (rbuf if not rbuf == '$' else '.'), 'url': url_for('dnsvs.inspect_fqdn', fqdn=rbuf)}) - return res - - -def view_net_rr(*args, **kwargs): - if 'area' not in request.view_args: - return [ - {'text': 'Record: ' + request.args['rr_data'], - 'url': url_for('dnsvs.edit_rr_data_fqdn', fqdn=request.view_args['fqdn'], - inttype=request.view_args['inttype'], - rr_data=request.args['rr_data'])} - ] - return [ - {'text': request.view_args['fqdn'], - 'url': url_for('dnsvs.edit_rr_data', area=request.view_args['area'], fqdn=request.view_args['fqdn'], - suffix=request.view_args['suffix'], inttype=request.view_args['inttype'], - rr_data=request.args['rr_data'])} - ] - - -@dnsvs.route('/fqdns/<fqdn>', methods=['GET', 'POST']) -@register_breadcrumb(dnsvs, '.fqdns.fqdn', 'Referenzen', dynamic_list_constructor=view_fqdn) -@login_required -def inspect_fqdn(fqdn): - s = request.environ['beaker.session'] - if fqdn == '$': - fqdn = '.' - if request.method == 'POST': - del_f = FQDNDeleteForm() - if del_f.validate_on_submit(): - s = request.environ['beaker.session'] - s['plan'].add_action(NTree.delete(fqdn=del_f.fqdn.data, do_del_pqdn=del_f.do_del_pqdn.data == 'True', - force_del_ref_records=del_f.force_del_ref_records.data == 'True')) - s.save() - return redirect(url_for('dnsvs.inspect_fqdn', fqdn=fqdn)) - fqdns = s['login'].get_fqdn_nodes(db=db, connection=get_db_conn(), root=fqdn) - fqdn = s['login'].get_fqdn(db=db, connection=get_db_conn(), fqdn=fqdn) - if fqdn is None: - return abort(404) - del_form = RRDeleteForm() - return jsonify(fqdns=fqdns) - - -@dnsvs.route('/fqdns/<fqdn>/refs') -@register_breadcrumb(dnsvs, '.fqdns.fqdn.refs', 'Referenzen') -@login_required -def inspect_fqdn_refs(fqdn): - s = request.environ['beaker.session']['login'] - if fqdn == '$': - fqdn = '.' - rr = RR.get_by_target_fqdn(login_name=s.login_name, target_fqdn=fqdn, connection=get_db_conn(), db=db) - rr_grouped = dict() - # group by rr_type and display panels like in inspect_area - group_key_fn = lambda r: r['rr'].inttype.dns_rr_type_name - for key, value_iter in itertools.groupby(rr, key=group_key_fn): - rr_grouped[key] = [v for v in value_iter] - return jsonify({'fqdn_ref_records_by_type': rr_grouped}) - -@dnsvs.route('/fqdns/<fqdn>/recs') -@register_breadcrumb(dnsvs, '.fqdns.fqdn.recs', 'Records') -@login_required -def inspect_fqdn_recs(fqdn): - s = request.environ['beaker.session']['login'] - if fqdn == '$': - fqdn = '.' - rr = RR.get_by_fqdn(login_name=s.login_name, fqdn=fqdn, connection=get_db_conn(), db=db) - return jsonify({'fqdn_records': rr}) - -@dnsvs.route('/ranges/<area>/<suffix>/eventlog', methods=['GET', 'POST']) -@register_breadcrumb(dnsvs, '.ranges.net.eventlog', 'Eventlog') -@login_required -def area_evlog(area, suffix): - s = request.environ['beaker.session'] - area_db = DBNetArea.get_by_name(name=area, suffix=suffix, db=db, connection=get_db_conn()) - if area_db is None: - return abort(404) - if not (s['login'].has_permission('dns.ro') or s['login'] in area_db.get_mgrs(db, connection=get_db_conn())): - return abort(403) - top_n = int(request.args.get('top_n', 10)) - ev = area_db.get_event_log(db=db, connection=get_db_conn(), top_n=top_n, - bnd_entity_id=area_db.print_name) - group_by_date = dict() - for e in ev: - if e.timestamp not in group_by_date: - group_by_date[e.timestamp] = list() - group_by_date[e.timestamp].append(e) - return render_template('dnsvs/eventlog.html', top_n=top_n, - title="Eventlog für Bereich '{area}'".format(area=area_db.print_name), area=area_db, - evitems=reversed(sorted(group_by_date.items()))) - - -@dnsvs.route('/ranges/<area>/<suffix>', methods=['GET', 'POST']) -@register_breadcrumb(dnsvs, '.ranges.net', '', dynamic_list_constructor=view_net) -@login_required -def inspect_area(area, suffix): - s = request.environ['beaker.session'] - area_db = DBNetArea.get_by_name(name=area, suffix=suffix, db=db, connection=get_db_conn()) - if area_db is None: - return abort(404) - nat_range = area_db.get_nat_range(db=db, connection=get_db_conn()) - mgrs = area_db.get_mgrs(db=db, connection=get_db_conn()) - rrs = area_db.get_rr(db, get_db_conn(), s['login'].login_name) - possible_inttypes = s['login'].get_possible_rr_inttypes(db=db, connection=get_db_conn()) - disp_rr_types = [r for r in RRType.get_all(db, get_db_conn()) if - not r.is_intern or len( - [res for res in rrs if res['rr'].inttype.dns_rr_type_name == r.name]) > 0] # TODO: filter/gen - for r in rrs: - del_form = RRDeleteForm(inttype=r['rr'].inttype.name, rr_data=r['rr'].rr_data, fqdn=r['NTree'].fqdn) - r['del_form'] = del_form - - if area_db.net.net.version == 4: # TODO: s.o - disp_rr_types = [d for d in disp_rr_types if d.name != "AAAA"] - else: - disp_rr_types = [d for d in disp_rr_types if d.name != "A"] - - reserved_addrs = area_db.get_reserved_addrs(db=db, connection=get_db_conn()) - possible_rr_names = [p.dns_rr_type_name for p in possible_inttypes] - rrs_by_r_name = dict() - for r in rrs: - if r['rr'].inttype.dns_rr_type_name not in rrs_by_r_name: - rrs_by_r_name[r['rr'].inttype.dns_rr_type_name] = list() - rrs_by_r_name[r['rr'].inttype.dns_rr_type_name].append(r) - gateways = area_db.get_gateways(db, get_db_conn()) - evlog = area_db.get_event_log(db=db, connection=get_db_conn(), - bnd_entity_id=area_db.print_name) - return render_template('dnsvs/inspect_area.html', - last_ev=evlog[0] if len(evlog) > 0 else None, - area=area_db, mgrs=mgrs, - ntree=area_db.get_n_trees(db, get_db_conn()), page_header_class="net-header", - title="Bereich '{}'".format(area_db.print_name), - subtitle='<code>' + str(area_db.net.net) + '</code>', - possible_rr_names=possible_rr_names, - rr_types=disp_rr_types, - rrs=rrs_by_r_name, - reserved_addrs=reserved_addrs, area_max=area_db.get_max_addr(db, get_db_conn()), - area_min=area_db.get_min_addr(db, get_db_conn()), - gateways=gateways, - nat_range=nat_range) - - -def generate_data_fields_from_inttype(inttype): - parts = inttype.name.split(':') - left = [l for l in parts[1].split(',') if l is not ''] - right = [r for r in parts[2].split(',') if r is not ''][:-1] - return left, right - - -@dnsvs.route('/ranges/<area>/<suffix>/<fqdn>/<inttype>/<rr_data>/typeahead-api-helper') -@dnsvs.route('/ranges/<area>/<suffix>/new/typeahead-api-helper') -@login_required -def fqdn_typeahed_helper(area, suffix, fqdn=None, inttype=None, rr_data=None): - area_n_trees = DBNetArea.get_by_name(name=area, suffix=suffix, db=db, connection=get_db_conn()).get_n_trees(db=db, - connection=get_db_conn()) - return jsonify([n.fqdn for n in area_n_trees]) - - -@dnsvs.route('/fqdns/add', methods=['GET', 'POST']) -@register_breadcrumb(dnsvs, '.fqdns.new', 'Neuen FQDN anlegen') -@login_required -def add_fqdn(): - s = request.environ['beaker.session']['login'] - types = s.get_possible_fqdn_types(db=db, connection=get_db_conn()) - fqdn_form = FQDNAddForm() - fqdn_form.inttype.choices = [(p.name, p.description) for p in types] - if request.method == 'POST': - if fqdn_form.validate_on_submit(): - s = request.environ['beaker.session'] - s['plan'].add_action(NTree.create(fqdn=fqdn_form.fqdn.data, description=fqdn_form.description.data, - type=fqdn_form.inttype.data)) - s.save() - return redirect(url_for('dnsvs.entry_fqdns')) - return render_template('dnsvs/edit_fqdn.html', fqdn_form=fqdn_form, return_url=url_for('dnsvs.entry_fqdns')) - - -@dnsvs.route('/fqdns/<fqdn>/edit', methods=['GET', 'POST']) -@register_breadcrumb(dnsvs, '.fqdns.edit', 'Bearbeiten', dynamic_list_constructor=view_fqdn) -@login_required -def edit_fqdn(fqdn): - s = request.environ['beaker.session']['login'] - types = s.get_possible_fqdn_types(db=db, connection=get_db_conn()) - ntree = s.get_fqdn(db=db, connection=get_db_conn(), fqdn=fqdn) - if ntree is None: - return abort(403) - fqdn_form = FQDNAddForm(fqdn=ntree.fqdn, description=ntree.description) - fqdn_form.inttype.choices = [(p.name, p.description) for p in types] - if request.method == 'POST': - if fqdn_form.validate_on_submit(): - s = request.environ['beaker.session'] - s['plan'].add_action(ntree.update(new_description=fqdn_form.description.data, - new_fqdn=fqdn_form.fqdn.data, - new_inttype=fqdn_form.inttype.data)) - s.save() - return redirect(request.args.get('src', url_for('dnsvs.entry_fqdns'))) - - fqdn_form.inttype.data = ntree.inttype - return render_template('dnsvs/edit_fqdn.html', fqdn_form=fqdn_form, return_url=url_for('dnsvs.entry_fqdns'), - edit=True, ntree=ntree) - - -@dnsvs.route('/fqdns/<fqdn>/record/new', methods=['GET', 'POST'], endpoint='create_rr_data_fqdn') -@dnsvs.route('/record/new', methods=['GET', 'POST'], endpoint='create_rr_data_fast') -@dnsvs.route('/ranges/<area>/<suffix>/new/<type>', methods=['GET', 'POST']) -@register_breadcrumb(dnsvs, '.ranges.net.new', 'Neuen Record anlegen') -@login_required -def create_rr_data(type=None, area=None, suffix=None, fqdn=None): # TODO - s = request.environ['beaker.session']['login'] - inputs = app.config.get('DBRT_INPUTS')[type] if type in app.config.get('DBRT_INPUTS') else app.config.get( - 'DEFAULT_DBRT_INPUTS') - rr_form = RRAddForm(rr_data=[{} for d in inputs['r']]) - i = 0 - for inp in inputs['r']: - rr_form.rr_data[i].label = inp['label'] - rr_form.rr_data[i].description = inp['placeholder'] - if not request.method == 'POST': - rr_form.rr_data[i].data = None - i += 1 - possible_inttypes = s.get_possible_rr_inttypes(db=db, connection=get_db_conn()) - rr_form.inttype.choices = [(p.name, p.description) for p in possible_inttypes] - area_obj = DBNetArea.get_by_name(connection=get_db_conn(), db=db, name=area, - suffix=suffix) if area is not None else None - prefix = None - if (type == 'A' or type == 'AAAA') and request.method == 'GET': - i = 0 - if 'rr_data' in request.args: - prefix = request.args['rr_data'] - else: - max = str(area_obj.net.net.broadcast_address) - min = str(area_obj.net.net.network_address) - prefix = '' - while min[i] == max[i]: - prefix = prefix + min[i] - i = i + 1 - if i >= len(min): - break - ret = None - if 'description' in request.args: - rr_form.description.data = request.args['description'] - if area_obj is None: - if 'src' in request.args: - if request.args['src'] == 'recs': - ret = url_for('dnsvs.inspect_fqdn_recs', fqdn=fqdn) - else: - ret = url_for('dnsvs.vs') - else: - ret = url_for('dnsvs.inspect_area', area=area, suffix=suffix, - _anchor='sec' + type) - if request.method == 'POST': - if rr_form.validate_on_submit(): - s = request.environ['beaker.session'] - ntree = s['login'].get_fqdn(db=db, connection=get_db_conn(), fqdn=rr_form.fqdn.data) - create_action = RR.create(fqdn=rr_form.fqdn.data, - rr_data=rr_form.rr_data[1].data if len(rr_form.rr_data) > 1 else - rr_form.rr_data[0].data, - rr_data_unref=rr_form.rr_data[0].data if len(rr_form.rr_data) > 1 else None, - inttype=rr_form.inttype.data, description=rr_form.description.data, - with_description=ntree is None) # todo sepcial error here - if ntree is not None: - if ntree.description is not None: - if rr_form.description_override.data and not ntree.description == rr_form.description.data: - s['plan'].add_action( - NTree.update_fqdn_description_deferrable(old_description=ntree.description, - new_description=rr_form.description.data, - fqdn=rr_form.fqdn.data)) - elif not rr_form.description_override.data and not rr_form.description.data == '': - rr_form.description.errors.append('DNS-FQDN-Info für diesen FQDN bereits gesetzt.') - return render_template('dnsvs/area_edit_rr.html', inputs=inputs, - possible_inttypes=possible_inttypes, - rr_form=rr_form, area=area_obj, - was_sub=True, rr=None, rr_type=type, - return_url=ret) - - s['plan'].add_action(create_action) - s.save() - if (type == 'A' or type == 'AAAA') and 'add_next' in request.form: - try: - addr = area_obj.get_next_free_address_after(db=db, connection=get_db_conn(), addr=( - ipaddress.IPv4Address(rr_form.rr_data[0].data) if type == 'A' else ipaddress.IPv6Address( - rr_form.rr_data[0].data))) - except ipaddress.AddressValueError: - addr = None - if addr is not None: - return redirect( - url_for('dnsvs.create_rr_data', type=type, area=area, suffix=suffix, rr_data=str(addr))) - else: - return redirect( - url_for('dnsvs.create_rr_data', type=type, area=area, suffix=suffix, rr_data="")) - return redirect(ret) - else: - rr_form.fqdn.data = fqdn - return render_template('dnsvs/area_edit_rr.html', prefix=prefix, inputs=inputs, rr_type=type, rr=None, - possible_inttypes=possible_inttypes, rr_form=rr_form, area=area_obj, - return_url=ret) - - -@dnsvs.route('/ranges/<area>/<suffix>/<fqdn>/<inttype>/edit', methods=['GET', 'POST']) -@dnsvs.route('/fqdns/<fqdn>/record/<inttype>/edit', methods=['GET', 'POST'], endpoint='edit_rr_data_fqdn') -@register_breadcrumb(dnsvs, '.ranges.net.edit', '', dynamic_list_constructor=view_net_rr) -@login_required -def edit_rr_data(fqdn, inttype, area=None, suffix=None): - rr_data = request.args['rr_data'] - s = request.environ['beaker.session'] - type = inttype.split(',')[-1] - inputs = app.config.get('DBRT_INPUTS')[type] if type in app.config.get('DBRT_INPUTS') else app.config.get( - 'DEFAULT_DBRT_INPUTS') - rr_form = RRAddForm(rr_data=[{} for d in inputs['r']]) - i = 0 - area_obj = DBNetArea.get_by_name(connection=get_db_conn(), db=db, name=area, - suffix=suffix) if area is not None else None - ret = None - if area_obj is None: - if request.args['src'] == 'recs': - ret = url_for('dnsvs.inspect_fqdn_recs', fqdn=fqdn) - else: - ret = url_for('dnsvs.inspect_fqdn_refs', fqdn=rr_data) - else: - ret = url_for('dnsvs.inspect_area', area=area, suffix=suffix, _anchor='sec' + type) - rr = RR.get(fqdn=fqdn, inttype=inttype, rr_data=rr_data, connection=get_db_conn(), - db=db, login_name=s['login'].login_name) - if rr is None: - if 'trans_ret' in request.args: - return redirect(ret) - return abort(404) - rr_data_list = [rr['rr'].rr_data_unref, rr['rr'].rr_data_target] if rr['rr'].rr_data_unref else [ - rr['rr'].rr_data_target] # FIXME! I'm ugly - for inp in inputs['r']: - rr_form.rr_data[i].label = inp['label'] - rr_form.rr_data[i].description = inp['placeholder'] - if request.method != 'POST': - rr_form.rr_data[i].data = rr_data_list[i] - i += 1 - if not request.method == 'POST': - rr_form.fqdn.data = rr['NTree'].fqdn - rr_form.description.data = rr['NTree'].description - rr_form.inttype.data = rr['rr'].inttype.name - possible_inttypes = s['login'].get_possible_rr_inttypes(db=db, connection=get_db_conn()) - rr_form.inttype.choices = [(p.name, p.description) for p in possible_inttypes] - if request.method == 'POST': - if rr_form.validate_on_submit(): - s['plan'].add_action(rr['rr'].update_rr( - rr_data=str(rr_form.rr_data[1].data) if len(rr_form.rr_data) > 1 else str( - rr_form.rr_data[0].data), - rr_data_unref=rr_form.rr_data[0].data if len(rr_form.rr_data) > 1 else '', - inttype=rr_form.inttype.data, - old_fqdn=fqdn, new_fqdn=fqdn)) - s.save() - return redirect(ret) - if rr is None: - abort(404) - return render_template('dnsvs/area_edit_rr.html', inputs=inputs, rr=rr, possible_inttypes=possible_inttypes, - rr_form=rr_form, area=area_obj, - return_url=ret) - - -@dnsvs.route('/fqdns/<fqdn>/delete_rr', endpoint='delete_rr_fqdn', methods=['POST']) -@dnsvs.route('/ranges/<area>/<suffix>/delete_rr', methods=['POST']) -@login_required -def delete_rr(area=None, suffix=None, fqdn=None): - s = request.environ['beaker.session'] - del_form = RRDeleteForm(request.form) - if del_form.validate_on_submit(): - s['plan'].add_action( - RR.delete(fqdn=del_form.fqdn.data, inttype=del_form.inttype.data, rr_data=del_form.rr_data.data)) - s.save() - if area is None: - ret = None - if request.form['src'] == 'recs': - ret = url_for('dnsvs.inspect_fqdn_recs', fqdn=fqdn) - else: - ret = url_for('dnsvs.inspect_fqdn_refs', fqdn=fqdn) - return redirect(ret) - return redirect(url_for('dnsvs.inspect_area', suffix=suffix, area=area)) - else: - pass # TODO: correct handling - - -class FQDNAddForm(FlaskForm): - inttype = SelectField('inttype', validators=[DataRequired()]) - fqdn = StringField('fqdn', validators=[DataRequired()]) - description = StringField('fqdn-descr') - - -class RRDeleteForm(FlaskForm): - action = HiddenField('delete', validators=[Length(0)]) - inttype = HiddenField('inttype') - rr_data = HiddenField('rr_data') - fqdn = HiddenField('fqdn') - - -class FQDNDeleteForm(FlaskForm): - action = HiddenField('delete', validators=[Length(0)]) - fqdn = HiddenField('fqdn') - do_del_pqdn = HiddenField('do_del_pqdn') - force_del_ref_records = HiddenField('force_del_ref_records') - - -class RRAddForm(FlaskForm): - inttype = SelectField('inttype', validators=[DataRequired()]) - fqdn = StringField('fqdn') - rr_data = FieldList(StringField(), min_entries=1) - description = StringField('fqdn-descr') - description_override = BooleanField() - - -class AreaDescriptionForm(FlaskForm): - description = StringField('description') - - -class AreaDomainDelForm(FlaskForm): - fqdn = HiddenField('fqdn') - - -class AreaDomainAddForm(FlaskForm): - fqdn = StringField('fqdn') - - -@dnsvs.route('/ranges/<area>/<suffix>/description', methods=['get', 'post']) -@login_required -@register_breadcrumb(dnsvs, '.ranges.net.description', 'Bereichs-Info') -def edit_range_descr(area, suffix): - db_area = DBNetArea.get_by_name(name=area, suffix=suffix, db=db, connection=get_db_conn()) - descr_form = AreaDescriptionForm(description=db_area.description) - if descr_form.validate_on_submit(): - s = request.environ['beaker.session'] - s['plan'].add_action(db_area.update_description(description=descr_form.description.data)) - s.save() - return redirect(url_for('dnsvs.inspect_area', area=area, suffix=suffix)) - return render_template('dnsvs/area_edit_descr.html', descr_form=descr_form, area=db_area, - title='{} für Bereich \'{}\''.format('Bereichs-Info', - db_area.name + str(suffix))) - - -@dnsvs.route('/ranges/<area>/<suffix>/domains', methods=['post', 'get']) -@register_breadcrumb(dnsvs, '.ranges.net.domains', 'Domains') -@login_required -def edit_range_domains(area, suffix): - a = DBNetArea.get_by_name(db=db, connection=get_db_conn(), name=area, suffix=suffix) - add_form = AreaDomainAddForm() - del_form = AreaDomainDelForm() - if request.method == 'POST': - if 'del' in request.form: - if del_form.validate_on_submit(): - s = request.environ['beaker.session'] - s['plan'].add_action(a.delete_domains([del_form.fqdn.data])) - s.save() - if 'add' in request.form: - if add_form.validate_on_submit(): - s = request.environ['beaker.session'] - s['plan'].add_action(a.add_domains(add_form.fqdn.data.split(' '))) - s.save() - return render_template('dnsvs/area_domains.html', add_form=add_form, del_form=del_form, - title="Domains für Bereich '{}' bearbeiten".format(a.print_name), - domains=a.get_n_trees(db=db, connection=get_db_conn()), area=a) - - -@dnsvs.route('/ranges/<area>/<suffix>/mgrs') -@register_breadcrumb(dnsvs, '.ranges.net.mgrs', 'Betreuer') -@login_required -def edit_mgrs(area, suffix): - user = request.environ['beaker.session']['login'] - if not (user.is_scc_itb or user.has_permission('dns.rw_range')): - return abort(403) - a = DBNetArea.get_by_name(db=db, connection=get_db_conn(), name=area, suffix=suffix) - return render_template('dnsvs/area_mgrs.html', - title="Betreuer für Bereich '{}' bearbeiten".format(a.print_name), - mgrs=a.get_mgrs(db, get_db_conn()), area=a) - - -@dnsvs.route('/ranges/<area>/<suffix>/mgrs/del', methods=['POST']) -@login_required -def del_mgr(area, suffix): - user = request.environ['beaker.session']['login'] - a = DBNetArea.get_by_name(db=db, connection=get_db_conn(), name=area, suffix=suffix) - mgr = request.form['login_name'] - s = request.environ['beaker.session'] - s['plan'].add_action(a.remove_mgrs([mgr])) - s.save() - return redirect(url_for('dnsvs.edit_mgrs', area=area, suffix=suffix)) - - -@dnsvs.route('/ranges/<area>/<suffix>/mgrs/add', methods=['POST']) -@login_required -def add_mgr(area, suffix): - user = request.environ['beaker.session']['login'] - a = DBNetArea.get_by_name(db=db, connection=get_db_conn(), name=area, suffix=suffix) - mgr = request.form['login_name'] - s = request.environ['beaker.session'] - s['plan'].add_action(a.add_mgrs(mgr.strip().split(' '))) - s.save() - return redirect(url_for('dnsvs.edit_mgrs', area=area, suffix=suffix)) diff --git a/middleware/net_suite/modules/ip_contact/templates/main.html b/middleware/net_suite/modules/ip_contact/templates/main.html deleted file mode 100644 index 022ba12299909cf596e1bd055ff2ab3c74add352..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/ip_contact/templates/main.html +++ /dev/null @@ -1,27 +0,0 @@ -{% extends "base.html" %} -{% block body %} - {% if not omdl.OP_ENV_IS_PROD %} - <div class="alert alert-warning" role="alert"> - <i class="fa fa-exclamation-circle"></i> In den Test- und Devel-Instanzen wird die Nachricht an den angemeldeten - Account anstatt an die Bereichsbetreuer geschickt. - </div> - {% endif %} - <div class="alert alert-info" role="alert"> - <i class="fa fa-info-circle"></i> In Missbrauchsfällen können Sie sich auch direkt an das <a target="_blank" href="https://www.scc.kit.edu/dienste/incidentresponse">KIT CERT wenden</a>. - </div> - <div class="jumbotron"> - <div class="logincont"> - <form method="POST"> - {{ request_form.hidden_tag() }} - <label for="address">IP-Adresse/Subnetz in CIDR-Notation</label> - <input class="form-control" required id="address" autofocus type="text" value="{{ request_form.net.data }}" name="{{ request_form.net.name }}"/> - <label for="message">Nachricht</label> - <textarea class="form-control" rows="7" required name="{{ request_form.message.name }}">{{ request_form.message.data }}</textarea> - <button type="submit" class="btn btn-outline-primary pull-right"><i - class="fa fa-send" aria-hidden="true"> </i> Abschicken - </button> - </form> - </div> - <span class="clearfix"></span> - </div> -{% endblock body %} diff --git a/middleware/net_suite/modules/ip_contact/views.py b/middleware/net_suite/modules/ip_contact/views.py index 641f635dcc1d9af1ca6d94822eb278eddc1edf89..80787094e0d7c0a803d32b018ee364c0fb1e3fa8 100644 --- a/middleware/net_suite/modules/ip_contact/views.py +++ b/middleware/net_suite/modules/ip_contact/views.py @@ -1,18 +1,13 @@ from . import ip_contact, METADATA from net_suite.model import * -from flask_breadcrumbs import register_breadcrumb from net_suite import app from net_suite.views import login_required, get_db_conn, db -from flask_wtf import FlaskForm -from wtforms import StringField -from wtforms.validators import DataRequired, Length, HostnameValidation from flask import request, flash, redirect, url_for import smtplib from email.mime.text import MIMEText @ip_contact.route('/', methods=['GET', 'POST']) -@register_breadcrumb(ip_contact, '.', METADATA.printable_name) @login_required def main(): request_form = ContactForm(request.form) @@ -59,7 +54,3 @@ Nachricht: return render_template('ip_contact/main.html', title='Adressbetreuer kontaktieren', request_form=request_form) - -class ContactForm(FlaskForm): - net = StringField('net', validators=[DataRequired()]) - message = StringField('message') diff --git a/middleware/net_suite/modules/login_db/views.py b/middleware/net_suite/modules/login_db/views.py index a1eb355e76f724a630fc04b52f6ad2d60bb72293..d0609f8e3bedcc1afe5429dfc85aa2105acada4b 100644 --- a/middleware/net_suite/modules/login_db/views.py +++ b/middleware/net_suite/modules/login_db/views.py @@ -4,34 +4,6 @@ from net_suite import db from net_suite.views import get_db_conn from net_suite.model import * - -@login_db.route('/login', methods=['GET', 'POST']) -def login(): - s = request.environ['beaker.session'] - if 'login' not in s: - error = False - if request.method == 'POST': - username = request.form['username'].strip() - password = request.form['password'] - if ldap_con.login(username=username, password=password): - user = DBMgr.get_by_login_name(db, get_db_conn(), username) - if user is not None: - s['login'] = user - s['plan'] = Transaction() - s.save() - return redirect('/') if 'next' not in request.args else redirect(request.args['next']) - else: - s['login'] = ldap_con.get_simple_kit_user(username=username) - s['plan'] = Transaction() - s.save() - else: - flash('Benutzername/Passwort fehlerhaft.', 'danger') - error = True - if error or 'login' not in s: - return render_template('login.html', title='Netzdienste-Portal des SCC am KIT') - return redirect('/') if 'next' not in request.args else redirect(request.args['next']) - - @login_db.route('/api/login', methods=['GET', 'POST']) def api_login(): s = request.environ['beaker.session'] @@ -43,13 +15,11 @@ def api_login(): user = DBMgr.get_by_login_name(db, get_db_conn(), username) if user is not None: s['login'] = user - s['plan'] = Transaction() s.save() return jsonify({'login': user, 'token': user.create_session_token(db, get_db_conn(), False)}) else: user = ldap_con.get_simple_kit_user(username=username) s['login'] = user - s['plan'] = Transaction() s.save() return jsonify({'login': user}) else: diff --git a/middleware/net_suite/modules/login_oic/__init__.py b/middleware/net_suite/modules/login_oic/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..770e5e172cf634f97e054a6e0b67dee58d4044b0 --- /dev/null +++ b/middleware/net_suite/modules/login_oic/__init__.py @@ -0,0 +1,7 @@ +from flask import Blueprint +from net_suite import app + +login_url = 'login_oic.login' +login_oic = Blueprint('login_oic', __name__) + +from . import views diff --git a/middleware/net_suite/modules/login_oic/views.py b/middleware/net_suite/modules/login_oic/views.py new file mode 100644 index 0000000000000000000000000000000000000000..48eb20db83761e885371f8445a390dc66059e58f --- /dev/null +++ b/middleware/net_suite/modules/login_oic/views.py @@ -0,0 +1,130 @@ +from flask import render_template, request, redirect, abort, flash, jsonify +from net_suite import db +from net_suite.views import get_db_conn +from net_suite.model import * +from . import login_oic, app +from oic.oic.message import RegistrationResponse, AuthorizationResponse +from oic.oic import Client +from oic.utils.authn.client import CLIENT_AUTHN_METHOD +from oic import rndstr +from oic.utils.http_util import Redirect + + +def get_client(): + oic_client = Client(client_authn_method=CLIENT_AUTHN_METHOD) + oic_provider_info = oic_client.provider_config(app.config.get('OIC_ENDPOINT')) + info = {"client_id": app.config.get('OIC_CLIENT_ID'), "client_secret": app.config.get('OIC_CLIENT_SECRET')} + client_reg = RegistrationResponse(**info) + oic_client.store_registration_info(client_reg) + return oic_client + + +def get_authorization_response(client): + authorization_response = client.parse_response( + AuthorizationResponse, + info=request.args, + sformat='dict') + return authorization_response + + +@login_oic.route('/api/login', methods=['POST']) +def api_login(): + s = request.environ['beaker.session'] + if 'login' not in s: + oic_client = get_client() + s["state"] = rndstr() + s["nonce"] = rndstr() + debug_t_host = request.environ.get('HTTP_ORIGIN', None) + s.save() + args = { + "client_id": oic_client.client_id, + "response_type": "code", + "scope": ["openid", 'profile', 'email'], + "nonce": s["nonce"], + "redirect_uri": app.config.get('DEBUG_OIC_REDIR') + '/' + debug_t_host.split('//', 1)[ + 1] if db.host_omdl.OP_ENV_IS_DEVEL and request.host.split(':')[0] == 'localhost' else app.config.get( + 'OIC_REDIR'), + "state": s["state"] + } + auth_req = oic_client.construct_AuthorizationRequest(request_args=args) + login_url = auth_req.request(oic_client.authorization_endpoint) + return jsonify({'status': 'usr_redir', 'url': login_url}) + if not 'login_token' in s and not isinstance(s['login'], SimpleKITUser): + s['login_token'] = s['login'].create_session_token(db, get_db_conn(), False) + s.save() + return jsonify({'login': s['login'], 'token': s.get('login_token', None)}) + + +def user_from_userinfo(db, conn, userinfo): + user = DBMgr.get_by_login_name(db, conn, userinfo['preferred_username']) + if user is not None: + return user + return SimpleKITUser(login_name=userinfo['preferred_username'], + first_name=userinfo.get('givenName', None), + last_name=userinfo.get('sn', None), + email=userinfo['email']) + + +@login_oic.route('/api/oic_responder') +def oic_responder(t_host=None): + s = request.environ['beaker.session'] + oic_client = get_client() + aresp = get_authorization_response(oic_client) + + code = aresp["code"] + assert aresp["state"] == s["state"] + args = { + "code": aresp['code'], + "redirect_uri": app.config.get('OIC_REDIR'), + } + + resp = oic_client.do_access_token_request(state=aresp['state'], + request_args=args, + authn_method='client_secret_basic') + userinfo = oic_client.do_user_info_request(state=s["state"]) + s['login'] = user_from_userinfo(db, get_db_conn(), userinfo) + s.save() + return redirect('/oic_login') + + +@login_oic.route('/api/debug_oic_responder/<t_host>') +def debug_oic_responder(t_host=None): + if not (db.host_omdl.OP_ENV_IS_DEVEL and t_host is not None and t_host.split(':')[0] == 'localhost'): + abort(404) + + oic_client = get_client() + aresp = get_authorization_response(oic_client) + code = aresp["code"] + args = { + "code": aresp['code'], + "redirect_uri": app.config.get('DEBUG_OIC_REDIR') + '/' + t_host, + } + + resp = oic_client.do_access_token_request(state=aresp['state'], + request_args=args, + authn_method='client_secret_basic') + print(resp) + userinfo = oic_client.do_user_info_request(state=aresp["state"]) + new_target = 'http://' + t_host + '/api/debug_oic_receiver' + return render_template('debug_forward.html', **{'redir': t_host, 'new_target': new_target, 'userinfo': userinfo}) + + +@login_oic.route('/api/debug_oic_receiver', methods=['POST']) +def debug_oic_receiver(): + if not db.host_omdl.OP_ENV_IS_DEVEL: + abort(404) + s = request.environ['beaker.session'] + s['login'] = user_from_userinfo(db, get_db_conn(), request.form) + s.save() + return redirect('http://' + request.form['redir'] + '/oic_login') + + +@login_oic.route('/api/logout', methods=['POST']) +def api_logout(): + s = request.environ['beaker.session'] + if 'login' in s: + if request.json.get('token_pk', None) is not None: + APIToken(login_name=s['login'].login_name, pk=int(request.json['token_pk'])).delete(db, get_db_conn()) + s.delete() + s.save() + return jsonify({'logout': 'success'}) diff --git a/middleware/net_suite/modules/macfinder/templates/main.html b/middleware/net_suite/modules/macfinder/templates/main.html deleted file mode 100644 index 4b0021ced104048bb46cb340a6118cfd8413d8e0..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/macfinder/templates/main.html +++ /dev/null @@ -1,129 +0,0 @@ -{% extends 'base.html' %} -{% block body %} - <div class="alert alert-warning" role="alert"> - <i class="fa fa-exclamation-circle"></i> Aufgrund eines Fehlers in der Firmware können derzeit keine - MAC-Adressen an Kanaleinbauswitchen des Herstellers "Nexans" gefunden werden. Der Hersteller hat eine Behebung - des Problems mit dem nächsten Release zugesichert. - </div> - <form method="post" action=""> - {{ macfind_form.hidden_tag() }} - <div class="form-group"> - <label for="mac">MAC</label> - <input class="form-control {% if macfind_form.mac.errors|length > 0 %}is-invalid{% endif %}" - id="mac" type="text" name="{{ macfind_form.mac.name }}" - value="{% if macfind_form.mac.data %}{{ macfind_form.mac.data }}{% elif 'pre_mac' in request.args %}{{ request.args['pre_mac'] }}{% endif %}" required placeholder="MAC-Adresse in beliebigem Format"> - {% if macfind_form.mac.errors %} - <div class="invalid-feedback"> - <ul> - {% for e in macfind_form.mac.errors %} - <li>{{ e }}</li> - {% endfor %} - </ul> - </div> - {% endif %} - </div> - <div class="form-group form-group-inline"> - <label for="vlan">VLAN-ID</label> - <input class="form-control {% if macfind_form.vlan.errors|length > 0 %}is-invalid{% endif %}" - id="vlan" type="number" min="2" max="4096" name="{{ macfind_form.vlan.name }}" - value="{% if macfind_form.vlan.data %}{{ macfind_form.vlan.data }}{% elif 'pre_vlan' in request.args %}{{ request.args['pre_vlan'] }}{% endif %}"> - {% if macfind_form.vlan.errors %} - <div class="invalid-feedback"> - <ul> - {% for e in macfind_form.vlan.errors %} - <li>{{ e }}</li> - {% endfor %} - </ul> - </div> - {% endif %} - </div> - <button type="submit" class="btn btn-outline-primary" - title="Auf Switches des KIT-Netzes suchen"><i class="fa fa-search"></i> Suchen - </button> - </form> - {% if jobs|length > 0 %} - <h2>Suchergebnisse dieser Sitzung</h2> - <table class="table table-striped"> - <tr> - <th>Startzeit</th> - <th>MAC</th> - <th>VLAN-ID</th> - <th>Devices</th> - <th colspan="2">Status</th> - </tr> - {% for id,res in jobs.items() %} - <tr class="job" data-jobid="{{ id }}"> - <td>{{ res.started|strftime }}</td> - <td class="mac" data-mac="{{ res.mac }}"><code>{{ res.mac }}</code> {% if res.vendor %}<br/>({{ res.vendor }}){% endif %}</td> - <td class="vlan" data-vlan="{{ res.vlan }}">{{ res.vlan }}</td> - <td class="result"> - {% if not res.finished and not res.failed %}<i>Suche läuft...</i>{% endif %} - {% if res.finished %} - {% if res.status.result|length == 0 %} - <i>Keine Ergebnisse</i> - {% else %} - <ul> - {% for r in res.status.result if r %} - <li>{{ r.host }}, - Port {{ r.port }}<br/>{% if r['nd_p_port'] %}Modul: - <span title="{{ r['nd_p_port'].module.root_module.module_type.name }} ({{ r['nd_p_port'].module.root_module.module_type.type_class.name }})"> - {% if not r['nd_p_port'].name == r['nd_p_port'].module.root_module.name %} - {{ r['nd_p_port'].module.root_module.name }}::{% endif %}{{ r['nd_p_port'].name }}</span>, - Gebäude <a target="_blank" - href="https://www.kit.edu/campusplan/index.php?id={{ r['nd_p_port'].module.root_module.building.nr }}"> - {{ r['nd_p_port'].module.root_module.building.nr }} - ({{ r['nd_p_port'].module.root_module.building.name }})</a>, - Raum <span - title="{{ r['nd_p_port'].module.root_module.room.name }}">{{ r['nd_p_port'].module.root_module.room.nr }}</span>, - <span - title="{{ r['nd_p_port'].module.root_module.floor.description }}">{{ r['nd_p_port'].module.root_module.floor.nr }}</span> - {% else %} - <i>Fehler bei der Modulauflösung!</i> - {% endif %} - </li> - {% endfor %} - </ul> - {% endif %} - {% endif %} - </td> - <td class="status_container"> - {% if not res.finished and not res.failed %} - <span class="status" data-status="running"> - <i class="fa fa-circle-o-notch fa-spin"></i> {% endif %} - {% if res.failed %}<span data-status="failed" class="status text-danger"> - <i class="fa fa-exclamation-triangle"></i> {% endif %} - {% if res.finished %}<span data-status="finished" class="status text-success"> - <i class="fa fa-check"></i> {% endif %} - {% if res.status.status == 'queued' %} - <span class="status_text">Wartet auf Ausführung</span> - {% elif res.status.status == 'started' %} - <span class="status_text">Suche läuft</span> - {% elif res.status.status == 'finished' %} - <span class="status_text">Abgeschlossen</span> - {% elif res.failed %} - <span class="status_text">Fehlgeschlagen ({{ res.status.message }})</span> - {% else %} - {{ res.status.status }} - {% endif %} - </span> - </td> - <td class="repeat-action"> - {% if res.failed or res.finished %} - <form class="inline" method="post" action=""> - {{ macfind_form.hidden_tag() }} - <input type="hidden" name="{{ macfind_form.mac.name }}" value="{{ res.mac }}"> - <input type="hidden" name="{{ macfind_form.vlan.name }}" value="{{ res.vlan }}"> - <button title="Erneut suchen" type="submit" class="btn btn-outline-primary"><i - class="fa fa-repeat"></i> - </button> - </form> - {% endif %} - </td> - </tr> - {% endfor %} - </table> - {% endif %} -{% endblock body %} -{% block post_script %} - <script src="/static/js/netsuite.macfinder.js"></script> -{% endblock post_script %} \ No newline at end of file diff --git a/middleware/net_suite/modules/user_nd/__init__.py b/middleware/net_suite/modules/user_nd/__init__.py deleted file mode 100644 index fc1d1d10380176e0b7baa1e94ea32fac755a5850..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/user_nd/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -from flask import Blueprint -from net_suite import app, get_git_version, ModMetaData -import requests - - -# we are assuming, that at the time of loading the app is initializes and the config is loaded -bb_name = 'user_nd' -user_nd = Blueprint(bb_name, __name__) - -METADATA = ModMetaData(name=bb_name, mod_path=__name__, gitlab_url='https://git.scc.kit.edu/scc-net/net-suite/net-suite', - printable_name='User-Netdoc', version=get_git_version(__file__), - contact_email='dns-betrieb@scc.kit.edu', is_tool=False) -MENU = [] -from . import views diff --git a/middleware/net_suite/modules/user_nd/views.py b/middleware/net_suite/modules/user_nd/views.py deleted file mode 100644 index b8d94a1b8229c6859a1a5015d7d448530c546873..0000000000000000000000000000000000000000 --- a/middleware/net_suite/modules/user_nd/views.py +++ /dev/null @@ -1,22 +0,0 @@ -from . import user_nd, METADATA -from net_suite.model import * -from net_suite import app -from net_suite.views import login_required, get_db_conn, db -import requests -from flask import render_template, request, flash, jsonify, redirect, url_for, abort - - -@user_nd.route('/vlans/<ni_name>/<vlan>/ports') -@login_required -def get_dev_ports(ni_name, vlan): - vlan = int(vlan) - s = request.environ['beaker.session'] - areas = s['login'].get_areas(db=db, connection=get_db_conn()) - vlan_valid = False - for a in areas: - if a.vlan is not None and a.vlan.id == vlan and a.vlan.ni_name == ni_name: - vlan_valid = True - break - if not vlan_valid: - return abort(404) - return jsonify(NDPPort.get_nd_p_port_by_vlan(db, get_db_conn(), ni_name=ni_name, vlan_id=vlan)) diff --git a/middleware/net_suite/search_results.py b/middleware/net_suite/search_results.py deleted file mode 100644 index 87ff30299689e1e204f3d55a140b08c627fa836e..0000000000000000000000000000000000000000 --- a/middleware/net_suite/search_results.py +++ /dev/null @@ -1,12 +0,0 @@ -from flask import render_template - - -class SearchResult(object): - def __init__(self, type, match_ref, match_text): - self.type = type - self.match_ref = match_ref - self.match_text = match_text - - def render(self): - return render_template('search/generic_search_result.html', - type=self.type, match_ref=self.match_ref, match_text=self.match_text) diff --git a/middleware/net_suite/static/css/bootstrap-progress.css b/middleware/net_suite/static/css/bootstrap-progress.css deleted file mode 100644 index 5353145a21f14f80385ceed911460c8361084e9d..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/css/bootstrap-progress.css +++ /dev/null @@ -1,314 +0,0 @@ -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="0"] { - width: 0%; - color: #000; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="1"] { - width: 1%; - color: #000; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="2"] { - width: 2%; - color: #000; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="3"] { - width: 3%; - color: #000; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="4"] { - width: 4%; - color: #000; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="5"] { - width: 5%; - color: #000; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="6"] { - width: 6%; - color: #000; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="7"] { - width: 7%; - color: #000; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="8"] { - width: 8%; - color: #000; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="9"] { - width: 9%; - color: #000; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="10"] { - width: 10%; - color: #000; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="11"] { - width: 11%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="12"] { - width: 12%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="13"] { - width: 13%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="14"] { - width: 14%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="15"] { - width: 15%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="16"] { - width: 16%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="17"] { - width: 17%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="18"] { - width: 18%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="19"] { - width: 19%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="20"] { - width: 20%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="21"] { - width: 21%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="22"] { - width: 22%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="23"] { - width: 23%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="24"] { - width: 24%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="25"] { - width: 25%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="26"] { - width: 26%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="27"] { - width: 27%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="28"] { - width: 28%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="29"] { - width: 29%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="30"] { - width: 30%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="31"] { - width: 31%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="32"] { - width: 32%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="33"] { - width: 33%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="34"] { - width: 34%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="35"] { - width: 35%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="36"] { - width: 36%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="37"] { - width: 37%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="38"] { - width: 38%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="39"] { - width: 39%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="40"] { - width: 40%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="41"] { - width: 41%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="42"] { - width: 42%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="43"] { - width: 43%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="44"] { - width: 44%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="45"] { - width: 45%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="46"] { - width: 46%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="47"] { - width: 47%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="48"] { - width: 48%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="49"] { - width: 49%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="50"] { - width: 50%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="51"] { - width: 51%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="52"] { - width: 52%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="53"] { - width: 53%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="54"] { - width: 54%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="55"] { - width: 55%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="56"] { - width: 56%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="57"] { - width: 57%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="58"] { - width: 58%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="59"] { - width: 59%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="60"] { - width: 60%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="61"] { - width: 61%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="62"] { - width: 62%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="63"] { - width: 63%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="64"] { - width: 64%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="65"] { - width: 65%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="66"] { - width: 66%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="67"] { - width: 67%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="68"] { - width: 68%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="69"] { - width: 69%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="70"] { - width: 70%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="71"] { - width: 71%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="72"] { - width: 72%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="73"] { - width: 73%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="74"] { - width: 74%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="75"] { - width: 75%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="76"] { - width: 76%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="77"] { - width: 77%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="78"] { - width: 78%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="79"] { - width: 79%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="80"] { - width: 80%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="81"] { - width: 81%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="82"] { - width: 82%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="83"] { - width: 83%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="84"] { - width: 84%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="85"] { - width: 85%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="86"] { - width: 86%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="87"] { - width: 87%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="88"] { - width: 88%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="89"] { - width: 89%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="90"] { - width: 90%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="91"] { - width: 91%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="92"] { - width: 92%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="93"] { - width: 93%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="94"] { - width: 94%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="95"] { - width: 95%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="96"] { - width: 96%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="97"] { - width: 97%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="98"] { - width: 98%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="99"] { - width: 99%; -} -.progress-bar[aria-valuemax="100"][aria-valuemin="0"][aria-valuenow="100"] { - width: 100%; -} \ No newline at end of file diff --git a/middleware/net_suite/static/css/net-suite-devel.css b/middleware/net_suite/static/css/net-suite-devel.css deleted file mode 100644 index 56cca6669ecfdebc19e53c6e2801cddc6855bcbe..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/css/net-suite-devel.css +++ /dev/null @@ -1,4 +0,0 @@ -.bg-devel { - background-color: #35383B; - border: 2px solid red; -} \ No newline at end of file diff --git a/middleware/net_suite/static/css/net-suite-prod.css b/middleware/net_suite/static/css/net-suite-prod.css deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/middleware/net_suite/static/css/net-suite-test.css b/middleware/net_suite/static/css/net-suite-test.css deleted file mode 100644 index 960c3411077e262b8808efebce6451102c50c3e0..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/css/net-suite-test.css +++ /dev/null @@ -1,3 +0,0 @@ -.bg-test { - background-color: #35383B; -} \ No newline at end of file diff --git a/middleware/net_suite/static/css/net-suite.css b/middleware/net_suite/static/css/net-suite.css deleted file mode 100644 index 8d05f8df93e6d06fe11c61711e7c0b7023438db3..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/css/net-suite.css +++ /dev/null @@ -1,316 +0,0 @@ -body { - padding-top: 70px; - position: relative; -} - -.area-sidebar > .nav-item > a.nav-link.active:focus, .area-sidebar > .nav-item > a.nav-link.active, .area-sidebar > .nav-item > a.nav-link.active { - background-color: transparent; - border-left: 2px solid #2a7c3b; - color: #2a7c3b; - font-weight: 700; - padding-left: 18px; -} - -.area-sidebar .nav > li > a { - color: #767676; - display: block; - font-size: 13px; - font-weight: 500; - padding: 4px 20px; -} - -.btn.btn-outline-reset { - background-color: #fff; - color: #de7e00; - border-color: #fc9403 -} - -.btn.btn-outline-reset:hover { - background-color: #fc9403; - border-color: #de7e00; - color: #fff; -} - -[class*="col-"] { - margin-bottom: 25px; -} - -#area-nav { - position: sticky; - top: 130px; -} - -.scc-img { - height: 30px; -} - -.container { - width: 90% !important; - max-width: 100vw !important; -} - -.logincont { - padding-left: 35px; - width: calc(100% - 205px); -} - -.logincont textarea { - margin-bottom: 1em; -} - -@media (max-width: 991px) { - .logincont { - padding-left: 0px; - width: 100%; - } -} - -.mouse-link { - cursor: pointer; -} - -.card-table { - width: 100%; -} - -.table-responsive { - display: table; -} - -.table-responsive.collapse:not(.show) { - display: none; -} - -.padding-card-sections { - margin: 15px 0; -} - -.btn { - cursor: pointer; -} - -@-moz-keyframes rotatecaret /*--for firefox--*/ -{ - - from { - -moz-transform: rotate(0deg); - } - to { - -moz-transform: rotate(-180deg); - } - -} - -@-webkit-keyframes rotatecaret /*--for webkit--*/ -{ - - from { - -webkit-transform: rotate(0deg); - } - to { - -webkit-transform: rotate(-180deg); - } - -} - -@keyframes rotatecaret /*--for firefox--*/ -{ - - from { - transform: rotate(0deg); - } - to { - transform: rotate(-180deg); - } - -} - -@-moz-keyframes rotatecaret-back /*--for firefox--*/ -{ - - from { - -moz-transform: rotate(-180deg); - } - to { - -moz-transform: rotate(0deg); - } - -} - -@-webkit-keyframes rotatecaret-back /*--for webkit--*/ -{ - - from { - -webkit-transform: rotate(-180deg); - } - to { - -webkit-transform: rotate(0deg); - } - -} - -@keyframes rotatecaret-back /*--for firefox--*/ -{ - - from { - transform: rotate(-180deg); - } - to { - transform: rotate(0deg); - } - -} - -.rotatecaret { - animation-name: rotatecaret; - animation-duration: 300ms; - animation-fill-mode: forwards; - transform: rotate(-180deg); -} - -.rotatecaret-up { - animation-name: rotatecaret-back; - animation-duration: 300ms; - animation-fill-mode: forwards; - transform: rotate(0deg); -} - -table.collapse.in { - display: table; -} - -.net-header { - position: sticky; - top: 51px; - background-color: rgba(255, 255, 255, 1); - z-index: 10; - padding: 15px 0; -} - -.net-header small, .net-header code { - font-size: .6em !important; -} - -.net-filter { - position: sticky; - top: 110px; - background: rgba(255, 255, 255, 0.9); - padding: 20px 0; - z-index: 10; -} - -.net-filter-direct { - top: 40px; - position: sticky; - background: rgba(255, 255, 255, 0.9); - padding: 20px 0; - z-index: 10; -} - -.inline { - display: inline; -} - -/* - Anchor offset for fixed header - */ -.rr-list-anchor { - padding-top: 200px; - margin-top: -200px; -} - -.rr-head-anchor { - padding-top: 130px; - margin-top: -130px; -} - -.vertical-center { - display: table-cell; - vertical-align: middle !important; -} - -.fill { - width: 100%; -} - -.tr-row { - align-items: center; - margin-bottom: 15px; -} - -#wrapper { - padding-left: 0; - padding-right: 0; - transition: none; -} - -#wrapper.toggled { - padding-right: 380px; - padding-left: 0 !important; -} - -#sidebar-wrapper { - left: auto; - right: 0; - margin-top: -20px; - background: #efefef; - margin-left: 0; - margin-right: -380px; - padding-top: 25px; - width: 380px; - transition: none; -} - -.ease { - transition: all 0.5s ease !important; -} - -.sidebar_cont { - padding-bottom: 100px; -} - -#wrapper.toggled #sidebar-wrapper { - margin-right: 0; - width: 380px; -} - -#page-content-wrapper { - width: 100%; - position: absolute; - padding: 15px; -} - -#wrapper.toggled #page-content-wrapper { - margin-right: 0; -} - -.progress { - height: 20px; -} - -.cell-50 { - width: 50%; -} - -@media print { - .address-table { - width: 99vw; - max-width: 100vw; - overflow-x: none; - } - .card-header { - font-weight: bold; - } -} -.address-table .rr-data, .address-table .fqdn { - word-break: break-all; -} - -.main-alert { - z-index: 1029; - position: fixed; - top: 55px; - left: 0; - width: 100vw; - border-radius: 0; -} \ No newline at end of file diff --git a/middleware/net_suite/static/css/pace-theme-minimal-low-kit.css b/middleware/net_suite/static/css/pace-theme-minimal-low-kit.css deleted file mode 100644 index ddcad97ed98616610711c68773a6afb774756b77..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/css/pace-theme-minimal-low-kit.css +++ /dev/null @@ -1,23 +0,0 @@ -/* derived from 'minimal' pace.js theme */ -.pace { - -webkit-pointer-events: none; - pointer-events: none; - - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.pace-inactive { - display: none; -} - -.pace .pace-progress { - background: #2CA897; - position: fixed; - z-index: 2000; - top: 0; - right: 100%; - width: 100%; - height: 4px; -} diff --git a/middleware/net_suite/static/img/favicon.ico b/middleware/net_suite/static/img/favicon.ico deleted file mode 100644 index 621226c9ae9d6a04c4a2ac3c19aa00f38bfee60a..0000000000000000000000000000000000000000 Binary files a/middleware/net_suite/static/img/favicon.ico and /dev/null differ diff --git a/middleware/net_suite/static/img/scc_logo.png b/middleware/net_suite/static/img/scc_logo.png deleted file mode 100644 index f830d2d47bb73423c284ceffd7e611060f6603ac..0000000000000000000000000000000000000000 Binary files a/middleware/net_suite/static/img/scc_logo.png and /dev/null differ diff --git a/middleware/net_suite/static/img/scc_logo_small.png b/middleware/net_suite/static/img/scc_logo_small.png deleted file mode 100644 index 71117c51c106f75ec1389738bda8281755b5509b..0000000000000000000000000000000000000000 Binary files a/middleware/net_suite/static/img/scc_logo_small.png and /dev/null differ diff --git a/middleware/net_suite/static/js/.gitignore b/middleware/net_suite/static/js/.gitignore deleted file mode 100644 index c2658d7d1b31848c3b71960543cb0368e56cd4c7..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/middleware/net_suite/static/js/netsuite.collapse.js b/middleware/net_suite/static/js/netsuite.collapse.js deleted file mode 100644 index 413cbaadc02b6f0be210813f4d65968c15100489..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.collapse.js +++ /dev/null @@ -1,21 +0,0 @@ -$(function () { - $(".main-alert").fadeTo(5000, 500).slideUp(500, function () { - $(".main-alert").slideUp(500); - }); - $.each($('.netsuite-collapse'), function (index, value) { - value = $(value); - value.click(function () { - $.each(value.find('.caret'), function (index, value) { - value = $(value); - if (value.hasClass('rotatecaret')) { - value.addClass('rotatecaret-up'); - value.removeClass('rotatecaret'); - } else { - value.addClass('rotatecaret'); - value.removeClass('rotatecaret-up'); - } - }); - }); - - }); -}); \ No newline at end of file diff --git a/middleware/net_suite/static/js/netsuite.dhcp_leases.list-areas.js b/middleware/net_suite/static/js/netsuite.dhcp_leases.list-areas.js deleted file mode 100644 index 8239348ce38c8f22b23e35b43545590493e18a61..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.dhcp_leases.list-areas.js +++ /dev/null @@ -1,26 +0,0 @@ -var options = { - valueNames: [{name: 'name', attr: 'data-name'}, 'description', 'facility', 'vlan', 'net', {name: 'leases', attr: 'data-leases'}], -}; -var areaList = new List('areas', options); -$('#form-direct').submit(function (event) { - event.preventDefault(); - if ($('#filter-direct').val().length > 0) { - var parts = $('#filter-direct').val().split('/'); - if (parts.length == 2) { - window.location = decodeURIComponent(this.getAttribute('data-templateurl')).replace('[area]', parts[0]).replace('[suffix]', parts[1]); - } - } -}); - -$('.sort').on('click', function () { - var old_attr = this.getAttribute('data-order'); - reset_sort(); - if(old_attr == 'asc') - this.setAttribute('data-order', 'desc'); - else if (old_attr == 'desc') - this.setAttribute('data-order', 'asc'); - else - this.setAttribute('data-order', 'asc'); - upd_sort(); - areaList.sort(this.getAttribute('data-target'), {'order':this.getAttribute('data-order')}); -}); diff --git a/middleware/net_suite/static/js/netsuite.dnsvs.evlog_select.js b/middleware/net_suite/static/js/netsuite.dnsvs.evlog_select.js deleted file mode 100644 index bcff0271a12ae224fd834aff5853f7f14f725e03..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.dnsvs.evlog_select.js +++ /dev/null @@ -1,3 +0,0 @@ -$('#top_n_selector').on('change', function () { - $('#top_n_form').submit(); -}); \ No newline at end of file diff --git a/middleware/net_suite/static/js/netsuite.dnsvs.fqdn-typeahead.js b/middleware/net_suite/static/js/netsuite.dnsvs.fqdn-typeahead.js deleted file mode 100644 index bb3c8baacc7f8b5c6304116c8c1b17f8157ca009..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.dnsvs.fqdn-typeahead.js +++ /dev/null @@ -1,28 +0,0 @@ -var domain_complete = function (source) { - return function (q, cb) { - var matches = []; - q = q.split('.')[0]; - if (!q.endsWith('.')) { - q += '.'; - } - for (var i = 0; i < source.length; i++) { - matches.push(q + source[i]); - } - window.console.log(matches); - cb(matches); - } -}; - -var source = $.getJSON('typeahead-api-helper', function (source) { - $('#fqdn').typeahead({ - hint: false, - highlight: true, - minLength: 1 - }, - { - name: 'fqdn', - source: domain_complete(source) - }); -}); - - diff --git a/middleware/net_suite/static/js/netsuite.dnsvs.list-areas.js b/middleware/net_suite/static/js/netsuite.dnsvs.list-areas.js deleted file mode 100644 index 763a027d63cfc7019ad441d343a03710781c064a..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.dnsvs.list-areas.js +++ /dev/null @@ -1,26 +0,0 @@ -var options = { - valueNames: [{name: 'utilization', attr: 'data-utilization'}, {name: 'name', attr: 'data-name'}, 'description', 'facility', 'vlan', 'net'], -}; -var areaList = new List('areas', options); -$('#form-direct').submit(function (event) { - event.preventDefault(); - if ($('#filter-direct').val().length > 0) { - var parts = $('#filter-direct').val().split('/'); - if (parts.length == 2) { - window.location = decodeURIComponent(this.getAttribute('data-templateurl')).replace('[area]', parts[0]).replace('[suffix]', parts[1]); - } - } -}); - -$('.sort').on('click', function () { - var old_attr = this.getAttribute('data-order'); - reset_sort(); - if(old_attr == 'asc') - this.setAttribute('data-order', 'desc'); - else if (old_attr == 'desc') - this.setAttribute('data-order', 'asc'); - else - this.setAttribute('data-order', 'asc'); - upd_sort(); - areaList.sort(this.getAttribute('data-target'), {'order':this.getAttribute('data-order')}); -}); diff --git a/middleware/net_suite/static/js/netsuite.dnsvs.list-fqdns.js b/middleware/net_suite/static/js/netsuite.dnsvs.list-fqdns.js deleted file mode 100644 index cf0e12272765d9d42418ed9487f5c7fb57f2e95d..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.dnsvs.list-fqdns.js +++ /dev/null @@ -1,28 +0,0 @@ -var options = { - valueNames: [{name: 'fqdn', attr: 'data-fqdn'}, 'description', {name: 'rr-data', attr: 'data-data'}], -}; -var areaList = new List('fqdns', options); -$('#form-direct').submit(function (event) { - event.preventDefault(); - if ($('#filter-direct').val().length > 0) { - window.location = decodeURIComponent(this.getAttribute('data-templateurl')).replace('[fqdn]', $('#filter-direct').val()); - } -}); - -$('.sort').on('click', function () { - var old_attr = this.getAttribute('data-order'); - reset_sort(); - if (old_attr == 'asc') - this.setAttribute('data-order', 'desc'); - else if (old_attr == 'desc') - this.setAttribute('data-order', 'asc'); - else - this.setAttribute('data-order', 'asc'); - upd_sort(); - var target = this.getAttribute('data-target'); - if(target == 'fqdn') { - areaList.sort(target, {'alphabet': '0123456789abcdefghijklmnopqrstuvwxyz_', 'order': this.getAttribute('data-order')}); - } else { - areaList.sort(target, {'order': this.getAttribute('data-order')}); - } -}); diff --git a/middleware/net_suite/static/js/netsuite.dnsvs.rr-list.js b/middleware/net_suite/static/js/netsuite.dnsvs.rr-list.js deleted file mode 100644 index 6b7c7fea70c3f853f31f92546537ecdf6e6eaeb5..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.dnsvs.rr-list.js +++ /dev/null @@ -1,263 +0,0 @@ -var options = { - valueNames: [{name: 'rr-data', attr: 'data-rr'}, 'fqdn', 'description'], -}; -var lists = []; -var listsByRecType = {}; -$("[id^=list]").each(function (i, ele) { - var d; - if($(ele).attr('id').indexOf('AAAA') != -1) { - d = new List($(ele).attr('id'), { - valueNames: [{name: 'rr-data', attr: 'data-rr'}, 'fqdn', 'description'], - sortFunction: function(a, b) { - var int_a = ipv6_to_ints(a._values['rr-data']); - var int_b = ipv6_to_ints(b._values['rr-data']); - for(var i = 0; i<4;i++) { - if(int_a[i] > int_b[i]){ - return 1; - } else if(int_a[i] < int_b[i]) { - return -1; - } - } - return 0; - } - }); - } else { - d = new List($(ele).attr('id'), options); - } - lists.push(d); - listsByRecType[$(ele).attr('id').substr(4)] = d; -}); -$(".search").keyup(function () { - for (var i = 0; i < lists.length; i++) { - lists[i].search($(this).val()); - } -}); -var ipv6_to_ints = function (v6){ - window.console.debug(v6); - var doubleBytes = v6.split(':'); - var res = []; - for(var i = 0; i< 4; i++) { - res.push(parseInt('0x'+doubleBytes[2*i]+doubleBytes[2*i+1], 16)); - } - return res; -}; - -var ip_to_int = function (ip) { - var byteString = '0x'; - var bytes = ip.split('.'); - for (var i = 0; i < 4; i++) { - var res = Number(bytes[i]).toString(16); - if (res.length == 1) { - res = '0' + res; - } - byteString += res; - } - return parseInt(byteString, 16); -}; - -var int_to_ip = function (ip) { - var bytestring = ip.toString(16); - while (bytestring.length < 8) { - bytestring = '0' + bytestring; - } - var bytes = []; - for (var i = 0; i < 8; i++) { - bytes.push(parseInt(bytestring.substr(i, 2), 16)); - i++; - } - return bytes.join('.'); -}; - -var diff_ip4 = function (a, b) { - var a_ip = ip_to_int(b); - var b_ip = ip_to_int(a); - if (a_ip > b_ip) { - return a_ip - b_ip; - } - return b_ip - a_ip; -}; - -var upd_sort_rr = function (rrt) { - $('.sort').each(function () { - if ($($(this).parent()).parent().attr('data-rrt') != rrt) { - return; - } - if (this.getAttribute('data-order') != '') { - $(this).children('.fa').attr('class', 'fa fa-sort-' + this.getAttribute('data-order')); - } else { - $(this).children('.fa').attr('class', 'fa fa-sort'); - } - }); -}; - -var reset_sort_rr = function (rrt) { - $('.sort').each(function () { - if ($(this).parent().parent().attr('data-rrt') != rrt) { - return; - } - this.setAttribute('data-order', ''); - $(this).children('.fa').attr('class', 'fa fa-sort'); - }); -}; - -var is_reserved = function (addr) { - var found = false; - $('#reserved .list .rr-data').each(function (k, v) { - found = v.getAttribute('data-rr') == addr; - if (found) { - return false; - } - }); - return found; -}; - -$('.sort').on('click', function () { - var old_attr = this.getAttribute('data-order'); - var rrt = $(this).parent().parent().attr('data-rrt'); - reset_sort_rr(rrt); - if (old_attr == 'asc') - this.setAttribute('data-order', 'desc'); - else if (old_attr == 'desc') - this.setAttribute('data-order', 'asc'); - else - this.setAttribute('data-order', 'asc'); - upd_sort_rr(rrt); - if (this.getAttribute('data-rectype') == 'A') { - $('.ip-block').remove(); - } - var target = this.getAttribute('data-target'); - // Cheap workaround to sort "around" grouped lines by simply destroying the group at first reorder - var self = this; - $('[rowspan]').each(function (i, ele) { - var span = Number(ele.getAttribute('rowspan')); - if (span <= 1 || $(ele).parent().attr('data-rrt') != self.getAttribute('data-rectype')) { - return; - } - var index = $(ele).index(); - var c = ele.getAttribute('class'); - var val; - if (c) { - val = '<td class="' + ele.getAttribute('class') + '">' + ele.innerHTML + '</td>'; - } else { - val = '<td>' + ele.innerHTML + '</td>'; - } - var row = $($(ele).parent()); - for (var i = 1; i < span; i++) { - row = $(row.next()); - $(row.children().get(index)).before($(val)); - } - $(ele).attr('rowspan', 1); - listsByRecType[self.getAttribute('data-rectype')].reIndex(); - }); - if (target == 'fqdn') { - listsByRecType[this.getAttribute('data-rectype')].sort(target, { - 'alphabet': '0123456789abcdefghijklmnopqrstuvwxyz_', - 'order': this.getAttribute('data-order') - }); - } else { - listsByRecType[this.getAttribute('data-rectype')].sort(target, {'order': this.getAttribute('data-order')}); - } - if (this.getAttribute('data-rectype') == 'A' && target == 'rr-data') { - $('.ip-block').remove(); - listsByRecType[self.getAttribute('data-rectype')].reIndex(); - var items = listsByRecType[this.getAttribute('data-rectype')].items; - var firstIndexComp = 'data-min-address'; - var lastIndexComp = 'data-max-address'; - var is_desc = false; - if (this.getAttribute('data-order') == 'desc') { - var f = firstIndexComp; - firstIndexComp = lastIndexComp; - lastIndexComp = f; - is_desc = true; - } - var d = diff_ip4($('[' + firstIndexComp + ']').attr(firstIndexComp), items[0].values()['rr-data']); - if (d > 0) { - var usable = 0; - var reserved = 0; - for (var j = 0; j < d; j++) { - if (is_reserved(int_to_ip(ip_to_int(items[0].values()['rr-data'])+(is_desc?d-j:-d + j)))) { - if (usable != 0) { - $("[data-rrt='A'] [data-rr='" + items[0].values()['rr-data'] + "']").last().parent().before($('<tr class="table-success table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[0].values()['rr-data']) + (is_desc?1-j:-1+j)) + '" class="badge badge-success">' + usable + ' nutzbare Adresse(n)</a></td><td colspan="3"></td>')); - usable = 0; - } - reserved++; - } else { - if (reserved != 0) { - $("[data-rrt='A'] [data-rr='" + items[0].values()['rr-data'] + "']").last().parent().before($('<tr class="table-warning table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[0].values()['rr-data']) + (is_desc?1-j:-1+j)) + '" class="badge badge-warning">' + reserved + ' reservierte Adresse(n)</a></td><td colspan="3"></td>')); - reserved = 0; - } - usable++; - } - } - if (usable != 0) { - $("[data-rrt='A'] [data-rr='" + items[0].values()['rr-data'] + "']").last().parent().before($('<tr class="table-success table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[0].values()['rr-data']) +(is_desc?1-usable+d:-1+usable - d)) + '" class="badge badge-success">' + usable + ' nutzbare Adresse(n)</a></td><td colspan="3"></td>')); - } - else if (reserved != 0) { - $("[data-rrt='A'] [data-rr='" + items[0].values()['rr-data'] + "']").last().parent().before($('<tr class="table-warning table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[0].values()['rr-data']) +(is_desc?1-reserved+d:-1+reserved -d)) + '" class="badge badge-warning">' + reserved + ' reservierte Adresse(n)</a></td><td colspan="3"></td>')); - } - } - d = diff_ip4($('[' + lastIndexComp + ']').attr(lastIndexComp), items[items.length - 1].values()['rr-data']); - if (d > 0) { - var usable = 0; - var reserved = 0; - for (var j = 0; j < d; j++) { - if (is_reserved(int_to_ip(ip_to_int(items[items.length-1].values()['rr-data']) + (is_desc?-j-1:j+1)))) { - if (usable != 0) { - $("[data-rrt='A'] [data-rr='" + items[items.length-1].values()['rr-data'] + "']").last().parent().parent().append($('<tr class="table-success table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[items.length-1].values()['rr-data']) + (is_desc?-j:j)) + '" class="badge badge-success">' + usable + ' nutzbare Adresse(n)</a></td><td colspan="3"></td>')); - usable = 0; - } - reserved++; - } else { - if (reserved != 0) { - $("[data-rrt='A'] [data-rr='" + items[items.length-1].values()['rr-data'] + "']").last().parent().parent().append($('<tr class="table-warning table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[items.length-1].values()['rr-data']) + (is_desc?-j:j)) + '" class="badge badge-warning">' + reserved + ' reservierte Adresse(n)</a></td><td colspan="3"></td>')); - reserved = 0; - } - usable++; - } - } - if (usable != 0) { - $("[data-rrt='A'] [data-rr='" + items[items.length-1].values()['rr-data'] + "']").last().parent().parent().append($('<tr class="table-success table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[items.length-1].values()['rr-data'])+(is_desc?-1+usable-d:1-usable+d)) + '" class="badge badge-success">' + usable + ' nutzbare Adresse(n)</a></td><td colspan="3"></td>')); - } - else if (reserved != 0) { - $("[data-rrt='A'] [data-rr='" + items[items.length-1].values()['rr-data'] + "']").last().parent().parent().append($('<tr class="table-warning table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[items.length-1].values()['rr-data'])+(is_desc?-1+reserved-d:1-reserved+d)) + '" class="badge badge-warning">' + reserved + ' reservierte Adresse(n)</a></td><td colspan="3"></td>')); - } - } - for (var i = 0; i < items.length - 1; i++) { - d = diff_ip4(items[i].values()['rr-data'], items[i + 1].values()['rr-data']) - 1; - if (d> 0) { - var usable = 0; - var reserved = 0; - for (var j = 0; j < d; j++) { - if (is_reserved(int_to_ip(ip_to_int(items[i].values()['rr-data']) + (is_desc?-1-j:1+j)))) { - if (usable != 0) { - $("[data-rrt='A'] [data-rr='" + items[i+1].values()['rr-data'] + "']").first().parent().before($('<tr class="table-success table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[i].values()['rr-data']) +(is_desc?-j:j)) + '" class="badge badge-success">' + usable + ' nutzbare Adresse(n)</a></td><td colspan="3"></td>')); - usable = 0; - } - reserved++; - } else { - if (reserved != 0) { - $("[data-rrt='A'] [data-rr='" + items[i+1].values()['rr-data'] + "']").first().parent().before($('<tr class="table-warning table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[i].values()['rr-data']) +(is_desc?-j:j)) + '" class="badge badge-warning">' + reserved + ' reservierte Adresse(n)</a></td><td colspan="3"></td>')); - reserved = 0; - } - usable++; - } - } - if (usable != 0) { - $("[data-rrt='A'] [data-rr='" + items[i+1].values()['rr-data'] + "']").first().parent().before($('<tr class="table-success table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[i].values()['rr-data']) +(is_desc?-1-d+usable:1+d-usable)) + '" class="badge badge-success">' + usable + ' nutzbare Adresse(n)</a></td><td colspan="3"></td>')); - } - else if (reserved != 0) { - $("[data-rrt='A'] [data-rr='" + items[i+ 1].values()['rr-data'] + "']").first().parent().before($('<tr class="table-warning table-sm ip-block"><td colspan="3"></td><td><a href="' + window.location.href.split('#')[0].split('?')[0] + '/new/A?rr_data=' + int_to_ip(ip_to_int(items[i].values()['rr-data']) +(is_desc?-1-d+reserved:1+d-reserved)) + '" class="badge badge-warning">' + reserved + ' reservierte Adresse(n)</a></td><td colspan="3"></td>')); - } - } - } - listsByRecType[self.getAttribute('data-rectype')].reIndex(); - } else if (this.getAttribute('data-rectype') == 'A') { - $('.ip-block').remove(); - listsByRecType[self.getAttribute('data-rectype')].reIndex(); - } -}); - -$(document).ready(function () { - $("#A table thead tr th [data-target='rr-data']").click(); - $("#AAAA table thead tr th [data-target='rr-data']").click(); -}); \ No newline at end of file diff --git a/middleware/net_suite/static/js/netsuite.dnsvs.rr-scrollspy.js b/middleware/net_suite/static/js/netsuite.dnsvs.rr-scrollspy.js deleted file mode 100644 index 9d31323f00e2e7528e876935dce6b05666137e92..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.dnsvs.rr-scrollspy.js +++ /dev/null @@ -1,13 +0,0 @@ -$(function () { - $('body').scrollspy({target: '#area-nav', offset: 300}); - if (window.location.hash.indexOf('#sec') == 0) { - $('#' + window.location.hash.substr(4)).collapse('show'); - } else { - $('#A').collapse('show'); - $('#AAAA').collapse('show'); - } - $('#filterbar').focus(); - $("[id^=spy_rr_click_]").on('click', function () { - $(this.dataset.target).collapse('show'); - }); -}); \ No newline at end of file diff --git a/middleware/net_suite/static/js/netsuite.macfinder.js b/middleware/net_suite/static/js/netsuite.macfinder.js deleted file mode 100644 index 5b0af10d65013add5fc9fff76b1fd461e4638281..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.macfinder.js +++ /dev/null @@ -1,90 +0,0 @@ -function doPoll() { - setTimeout(function () { - $('.job').each(function () { - var job = this; - var status_cont = $(this).children('.status_container').first(); - var status_dom = status_cont.children('.status').first(); - var status = status_dom.attr('data-status'); - if (status == 'finished' || status == 'failed') { - return; - } - $.ajax({ - url: 'api/poll/' + job.getAttribute('data-jobid'), - type: 'GET', - dataType: 'json', - success: function (data) { - var api_status = data['status']; - if (api_status == 'failed' || api_status == 'finished') { - var csrf_token = $('#csrf_token').first(); - var rescan_form = document.createElement('form'); - rescan_form.setAttribute('action', ''); - rescan_form.setAttribute('method', 'POST'); - rescan_form.setAttribute('class', 'inline'); - $(rescan_form).append(csrf_token.clone()); - var mac_input = document.createElement('input'); - mac_input.setAttribute('type', 'hidden'); - mac_input.setAttribute('name', 'mac'); - mac_input.setAttribute('value', $(job).children('.mac').first().attr('data-mac')); - var vlan_input = document.createElement('input'); - vlan_input.setAttribute('type', 'hidden'); - vlan_input.setAttribute('name', 'vlan'); - vlan_input.setAttribute('value', $(job).children('.vlan').first().attr('data-vlan')); - rescan_form.appendChild(mac_input); - rescan_form.appendChild(vlan_input); - var rescan_button = $.parseHTML('<button type="submit" class="btn btn-outline-primary"><i class="fa fa-repeat"></i>'); - $(rescan_form).append(rescan_button); - $(job).children('.repeat-action').append(rescan_form); - } - var status_text = status_dom.children('.status_text').first(); - if (api_status == 'started') { - status_text.text('Suche läuft'); - } else if (api_status == 'finished') { - var icon = $(status_dom).children('.fa').first(); - icon.removeClass('fa-circle-o-notch'); - icon.removeClass('fa-spin'); - icon.addClass('fa-check'); - status_dom.addClass('text-success'); - $(status_dom).attr('data-status', 'finished'); - status_text.text('Abgeschlossen'); - var result_dom = $(job).children('.result').first(); - result_dom.text(''); - if (data['result'].length == 0) { - result_dom.html('<i>Keine Ergebnisse</i>'); - return; - } - var list = document.createElement('ul'); - for (var i = 0; i < data['result'].length; i++) { - var ele = document.createElement('li'); - $(ele).text(data['result'][i]['host'] + ', Port ' + data['result'][i]['port']); - var root_mod = data['result'][i]['nd_p_port']['module']['root_module']; - var mod_name = root_mod['name']; - if (mod_name != data['result'][i]['nd_p_port']['name']) { - mod_name += '::' + data['result'][i]['nd_p_port']['name']; - } - $(ele).html($(ele).text() + '<br/>Modul: <span title="'+root_mod['module_type']['name']+' ('+root_mod['module_type']['type_class']['name']+')">' + mod_name + '</span>, Gebäude: <a target="_blank" href="https://www.kit.edu/campusplan/index.php?id=' + root_mod['building']['nr'] + '">' + root_mod['building']['nr'] + ' (' + root_mod['building']['name'] + ')</a>, Raum <span title="' + root_mod['room']['name'] + '">' + root_mod['room']['nr'] + '</span>, <span title="' + root_mod['floor']['description'] + '">' + root_mod['floor']['nr']); - - list.appendChild(ele); - } - result_dom.append(list); - } else if (api_status == 'failed') { - var icon = $(status_dom).children('.fa').first(); - icon.removeClass('fa-circle-o-notch'); - icon.removeClass('fa-spin'); - icon.addClass('fa-exclamation-triangle'); - status_dom.addClass('text-danger'); - $(status_dom).attr('data-status', 'failed'); - status_text.text('Fehlgeschlagen (' + data['message'] + ')'); - var result_dom = $(job).children('.result').first(); - result_dom.text(''); - } - - } - }); - }); - doPoll(); - }, 5000); -} - -$(function () { - doPoll(); -}); \ No newline at end of file diff --git a/middleware/net_suite/static/js/netsuite.nav-searchbar.js b/middleware/net_suite/static/js/netsuite.nav-searchbar.js deleted file mode 100644 index 93bd04775b255051c5c8801fdc04ea8eec69773e..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.nav-searchbar.js +++ /dev/null @@ -1,7 +0,0 @@ -$('#nav-search').keypress(function (event) { - if(event.target.selectionStart==0 && event.which == 8) { - $('#scope_filter').after('<input type="hidden" name="all_scopes" value="on">'); - $('#scope_filter').remove(); - $('#scope_filter_display').remove(); - } -}); \ No newline at end of file diff --git a/middleware/net_suite/static/js/netsuite.search.filter-logic.js b/middleware/net_suite/static/js/netsuite.search.filter-logic.js deleted file mode 100644 index 12f223f6a4da6f79c36f7c3ff40c70c1c9f21a2c..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.search.filter-logic.js +++ /dev/null @@ -1,6 +0,0 @@ -$('.all-select').on('click', function() { - $(this).parent().parent().siblings('.form-check').children('.form-check-input').prop('checked', true); -}); -$('.nothing-select').on('click', function() { - $(this).parent().parent().siblings('.form-check').children('.form-check-input').prop('checked', false); -}); diff --git a/middleware/net_suite/static/js/netsuite.sort-utils.js b/middleware/net_suite/static/js/netsuite.sort-utils.js deleted file mode 100644 index 72b633ff3f6a3abc17f01f462f08b17747b32a6c..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.sort-utils.js +++ /dev/null @@ -1,16 +0,0 @@ -var upd_sort = function(){ - $('.sort').each(function(){ - if(this.getAttribute('data-order') != '') { - $(this).children('.fa').attr('class', 'fa fa-sort-'+this.getAttribute('data-order')); - } else { - $(this).children('.fa').attr('class', 'fa fa-sort'); - } - }); -}; - -var reset_sort = function() { - $('.sort').each(function(){ - this.setAttribute('data-order', ''); - $(this).children('.fa').attr('class', 'fa fa-sort'); - }); -}; diff --git a/middleware/net_suite/static/js/netsuite.toggle-sidebar.js b/middleware/net_suite/static/js/netsuite.toggle-sidebar.js deleted file mode 100644 index 462d74501023184002403748b90c5e1e2b565921..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.toggle-sidebar.js +++ /dev/null @@ -1,26 +0,0 @@ -console.debug(document.documentElement.clientWidth); -if (document.documentElement.clientWidth > 1350) { - if ($('#trans_count').text() + 0 > 0) { - $("#wrapper").toggleClass("toggled"); - $("#view-transactions").parent().toggleClass("active"); - } -} else { - if (Number($('#trans_count').text()) == 1) { - //$('#view-transactions').popover('show'); - } -} -if (document.documentElement.clientWidth > 1176) { - $("#view-transactions").click(function (e) { - $('#view-transactions').popover('dispose'); - e.preventDefault(); - $("#wrapper").toggleClass("toggled"); - $('#sidebar-wrapper').addClass("ease"); - $('#wrapper').addClass("ease"); - $("#view-transactions").parent().toggleClass("active"); - }); -} else { - $("#view-transactions").click(function (e) { - e.preventDefault(); - window.location = '/transaction'; - }); -} diff --git a/middleware/net_suite/static/js/netsuite.transaction.sort-list.js b/middleware/net_suite/static/js/netsuite.transaction.sort-list.js deleted file mode 100644 index 55d99da1f7e6695617471f051a67f35c5afc83c7..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.transaction.sort-list.js +++ /dev/null @@ -1,10 +0,0 @@ -Sortable.create(transactionList, { - handle: '.fa-bars', - group: '.tr-row', - animation: 150, - onUpdate: function (evt) { - $.post('/api/transaction/swap_items', {'old': evt.oldIndex, 'new': evt.newIndex}).fail(function () { - alert("Fehler beim Senden der Änderung."); - }); - } -}); \ No newline at end of file diff --git a/middleware/net_suite/static/js/netsuite.transaction_page.sort-list.js b/middleware/net_suite/static/js/netsuite.transaction_page.sort-list.js deleted file mode 100644 index 68696b6538c2ab5f199f31847444338c9b8ec225..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/netsuite.transaction_page.sort-list.js +++ /dev/null @@ -1,10 +0,0 @@ -Sortable.create(transactionListOverview, { - handle: '.fa-bars', - group: '.tr-row', - animation: 150, - onUpdate: function (evt) { - $.post('/api/transaction/swap_items', {'old': evt.oldIndex, 'new': evt.newIndex}).fail(function () { - alert("Fehler beim Senden der Änderung."); - }); - } -}); \ No newline at end of file diff --git a/middleware/net_suite/static/js/package.json b/middleware/net_suite/static/js/package.json deleted file mode 100644 index a46ab74dc13d44d1dd52a2adc3b443b306c22a28..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "net-suite", - "license": "MIT", - "dependencies": { - "bootstrap": "4.0.0", - "font-awesome": "^4.7.0", - "jquery": "^3.2.1", - "list.js": "^1.5.0", - "pace-js": "^1.0.2", - "popper.js": "^1.12.3", - "sortablejs": "^1.7.0", - "startbootstrap-simple-sidebar": "^4.0.0-beta", - "typeahead.js": "^0.11.1", - "typeahead.js-bootstrap-css": "^1.2.1" - } -} diff --git a/middleware/net_suite/static/js/yarn.lock b/middleware/net_suite/static/js/yarn.lock deleted file mode 100644 index 9628f64ec782bf1498bc15c57aea570837e54b17..0000000000000000000000000000000000000000 --- a/middleware/net_suite/static/js/yarn.lock +++ /dev/null @@ -1,58 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -bootstrap@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.0.0.tgz#ceb03842c145fcc1b9b4e15da2a05656ba68469a" - -font-awesome@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" - -jquery@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" - -jquery@>=1.7, jquery@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.2.1.tgz#5c4d9de652af6cd0a770154a631bba12b015c787" - -list.js@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/list.js/-/list.js-1.5.0.tgz#a4cbfc8281ddefc02fdb2d30c8748bfae25fbcda" - dependencies: - string-natural-compare "^2.0.2" - -pace-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pace-js/-/pace-js-1.0.2.tgz#673a717f833ccb4f4315531b75ee4788376600f7" - -popper.js@^1.12.3: - version "1.12.6" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.12.6.tgz#91e12a97b07815258b76915d64044e8ac053d426" - -sortablejs@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.7.0.tgz#80a2b2370abd568e1cec8c271131ef30a904fa28" - -startbootstrap-simple-sidebar@^4.0.0-beta: - version "4.0.0" - resolved "https://registry.yarnpkg.com/startbootstrap-simple-sidebar/-/startbootstrap-simple-sidebar-4.0.0.tgz#2172784771fdf987f59c62dfa2411161394869c4" - dependencies: - bootstrap "4.0.0" - jquery "3.3.1" - -string-natural-compare@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-2.0.2.tgz#c5ce4e278ab5d1265ae6fc55435aeb7b76fcb001" - -typeahead.js-bootstrap-css@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/typeahead.js-bootstrap-css/-/typeahead.js-bootstrap-css-1.2.1.tgz#f8df40f563c4fdbc23176bc471c26ba877a663b6" - -typeahead.js@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/typeahead.js/-/typeahead.js-0.11.1.tgz#4e64e671b22310a8606f4aec805924ba84b015b8" - dependencies: - jquery ">=1.7" diff --git a/middleware/net_suite/templates/404_error.html b/middleware/net_suite/templates/404_error.html deleted file mode 100644 index aec825eccee9524ee5faf7cc8878d284f1e758c9..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/404_error.html +++ /dev/null @@ -1,8 +0,0 @@ -{% extends "base.html" %} -{% block body %} - <div class="alert alert-danger" role="alert"> - <h4><i class="fa fa-exclamation-triangle" aria-hidden="true"></i> 404 - Seite nicht gefunden. - </h4> - <p>Die angeforderte Ressource existiert nicht. Prüfen Sie, ob die angegeben URL korrekt ist und Sie die nötige Bereichtigung für den Zugriff besitzen.</p> - </div> -{% endblock %} \ No newline at end of file diff --git a/middleware/net_suite/templates/base.html b/middleware/net_suite/templates/base.html deleted file mode 100644 index 1a449b2d69f5f5e40b65ea7c4e3768c9881c2fb8..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/base.html +++ /dev/null @@ -1,277 +0,0 @@ -<!DOCTYPE html> -<html lang="de"> -<head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <script src="/static/js/node_modules/pace-js/pace.js"></script> - <link href="/static/css/pace-theme-minimal-low-kit.css" rel="stylesheet"/> - <title>{% if not omdl.OP_ENV_IS_PROD %}[{{ omdl.OP_ENV_MODE.upper() }}] {% endif %}SCC - NETVS | {{ title }}</title> - <link href="/static/img/favicon.ico" type="image/x-icon" rel="shortcut icon"> - <link href="/static/js/node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> - <link href="/static/js/node_modules/font-awesome/css/font-awesome.min.css" rel="stylesheet"> - <link href="/static/js/node_modules/typeahead.js-bootstrap-css/typeaheadjs.css" rel="stylesheet"> - <link href="/static/js/node_modules/startbootstrap-simple-sidebar/css/simple-sidebar.css" rel="stylesheet"> - - <link href="/static/css/bootstrap-progress.css" rel="stylesheet"> - - <link href="/static/css/net-suite.css" rel="stylesheet"> - - {% if not omdl.OP_ENV_IS_PROD %} - <link href="/static/css/net-suite-{{ omdl.OP_ENV_MODE.lower() }}.css" rel="stylesheet">{% endif %} - <link href="/static/img/favicon.ico" type="image/x-icon" rel="shortcut icon"> -</head> -<body> -{% if omdl.OP_ENV_IS_PROD %} - <nav class="navbar navbar-expand-lg fixed-top navbar-light bg-light"> -{% else %} - <nav class="navbar navbar-expand-lg fixed-top navbar-dark bg-{{ omdl.OP_ENV_MODE.lower() }}"> -{% endif %} -<!-- Brand and toggle get grouped for better mobile display --> -<a class="navbar-brand" href="/"> - <img class="d-inline-block align-top scc-img" alt="SCC" src="/static/img/scc_logo_small.png"/> - {% if not omdl.OP_ENV_IS_PROD %} - Instanz: {{ omdl.OP_ENV_MODE.upper() }} - {% endif %} -</a> -<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" - aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> - <i class="fa fa-bars"></i>{% if plan.plan|length > 0 %} - <sup><span class="badge badge-pill badge-danger">{{ plan.plan|length }}</span></sup>{% endif %} -</button> - -<!-- Collect the nav links, forms, and other content for toggling --> -<div class="collapse navbar-collapse" id="navbarNavDropdown"> - <ul class="navbar-nav mr-auto"> - {% if user %} - {% for k,v in menu.items() recursive %} - {% if v is string %} - <li {% if v|string() == active|string() or (active|string()).startswith(v) %}class="nav-item active" - {% else %}class="nav-item"{% endif %}> - <a href="{{ v }}" class="nav-link">{{ k }}</a> - </li> - {% else %} - <li class="nav-item dropdown"> - <a href="#" - class="nav-link dropdown-toggle {% if (active|string()).startswith('/'+((v.values()|string()).split('/')[1])|string()) %}active{% endif %}" - data-toggle="dropdown" role="button" - aria-haspopup="true" - aria-expanded="false">{{ k }}</a> - <div class="dropdown-menu"> - {% for drop_name,drop_url in v.items() %} - <a href="{{ drop_url }}" - class="dropdown-item {% if drop_url|string() == active|string() or (active|string()).startswith(drop_url) %}active{% endif %}">{{ drop_name }}</a> - {% endfor %} - </div> - </li> - {% endif %} - {% endfor %} - {% endif %} - <li class="nav-item"> - <a href="https://www-net{% if not omdl.OP_ENV_IS_PROD %}-{{ omdl.OP_ENV_MODE }}{% endif %}.scc.kit.edu/~netadmin/natvs/user/wrapper.cgi/" - target="_blank" class="nav-link">NATVS+</a> - </li> - <li class="nav-item"> - <a href="https://www-net{% if not omdl.OP_ENV_IS_PROD %}-{{ omdl.OP_ENV_MODE }}{% endif %}.scc.kit.edu/~netadmin/netdoc/user/wrapper.cgi/" - target="_blank" class="nav-link">NETDOC</a> - </li> - </ul> - <form method="get" action="{{ url_for('_search') }}" class="d-none d-xl-block form-inline my-2 my-lg-0"> - <div class="input-group mr-sm-2"> - {% if request.blueprint and current_mod.search_func %} - <div id="scope_filter_display" class="input-group-prepend"> - <span class="input-group-text">{{ current_mod.printable_name }}</span> - </div> - <input type="hidden" id="scope_filter" name="check_filter_{{ current_mod.printable_name }}"> - {% else %} - <input type="hidden" name="all_scopes" value="on"> - {% endif %} - {% for mod_opt,opts in s_opts.items() recursive %} - {% for opt in opts.values() recursive %} - {% if opt is mapping %} - {{ loop(opt.items()) }} - {% else %} - {% for item in opt %} - {% if item.default %} - <input type="hidden" name="{{ mod_opt }}_{{ item.form_name }}" - value="on"> - {% endif %} - {% endfor %} - {% endif %} - {% endfor %} - {% endfor %} - <input class="form-control" type="search" id="nav-search" name="search" placeholder="Suchbegriff" - aria-label="Search"> - <div class="input-group-append"> - <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Suchen</button> - </div> - </div> - </form> - <ul class="navbar-nav navbar-right"> - <li {% if '/search' == active|string() or (active|string()).startswith('/search') %}class="navbar-item active" - {% else %}class="navbar-item" {% endif %}> - <a href="{{ url_for('_search') }}" class="nav-link"> - <span class="d-none d-xl-inline">Erweiterte </span>Suche - </a> - {% if user %} - <li {% if '/transaction' == active|string() or (active|string()).startswith('/transaction') %}class="navbar-item active" - {% else %}class="navbar-item" {% endif %}> - <a href="#" id="view-transactions" class="nav-link" data-trigger="focus" - title="Aktuelle Transaktion" data-placement="bottom" - data-content="Hier befindet sich jetzt Ihre geplante Änderung. Alle Änderungen werden erst nach deren Anwendung aktiv."> - <i class="fa fa-tasks" aria-hidden="true"></i> Transaktion <span - class="badge badge-pill badge-{% if plan.plan|length == 0 %}success{% else %}danger{% endif %}" - id="trans_count">{{ plan.plan|length }}</span> - </a> - </li> - <li class="nav-item dropdown"> - <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" - aria-haspopup="true" - aria-expanded="false"><i class="fa fa-user" aria-hidden="true"></i> - {{ user.login_name }} {% if user.is_scc_itb %} (ITB){% endif %}<span - class="caret"></span></a> - <div class="dropdown-menu"> - <a class="dropdown-item" href="/logout">Abmelden</a> - </div> - </li> - {% else %} - <li class="nav-item"><a class="nav-link" href="/login"><i class="fa fa-user" aria-hidden="true"> </i> - Anmelden</a></li> - {% endif %} - </ul> -</div><!-- /.navbar-collapse --> -</nav> -<div id="wrapper"> - <div id="sidebar-wrapper"> - <div class="container sidebar_cont"> - {% if plan.plan|length > 1 %} - <div class="alert alert-dark" role="alert"> - Die Reihenfolge der Aktionen kann per Drag&Drop (<i class="fa fa-bars"></i>) verändert werden.<br/> - Die Transaktion wird von oben nach unten ausgeführt. - </div> - {% endif %} - <div id="transactionList"> - {% for p in plan.plan %} - <div class="row tr-row no-gutters"> - <div class="col-1"> - <i - class="fa fa-bars"></i></div> - <div class="col-10 {% if p.last_error %}table-danger{% endif %}">{{ p.render()|safe }} - {% if p.last_error %} - <p> - <a href="{{ url_for('_transaction_error', pos=loop.index0) }}" - class="text-danger"><i class="fa fa-exclamation-triangle"></i> Fehler bei letzter - Ausführung</a> - </p> - {% endif %} - </div> - <div class="col-1"> - <form method="POST" action="{{ url_for('_transaction') }}"> - {{ _transaction_action_del_form.csrf_token }} - <input type="hidden" name="next" value="{{ request.url }}"> - <input type="hidden" name="index" value="{{ loop.index0 }}"> - <button class="btn btn-outline-danger" type="submit" name="action_delete"><i - class="fa fa-trash"></i></button> - </form> - </div> - </div> - {% endfor %} - </div> - {% if plan.plan|length == 0 %} - <div class="alert alert-info" role="alert"> - Keine geplanten Aktionen vorhanden. - </div> - {% else %} - <div class="row align-items-center"> - <form action="{{ url_for('_transaction') }}" method="post"> - {{ _transaction_control_form.hidden_tag() }} - <input type="hidden" name="next" value="{{ request.url }}"> - <button type="submit" name="cancel" class="btn btn-outline-danger"><i class="fa fa-times" - aria-hidden="true"></i> - Verwerfen - </button> - <button type="submit" name="dry-run" class="btn btn-outline-info"><i class="fa fa-undo" - aria-hidden="true"></i> - Testen - </button> - <button type="submit" name="apply" class="btn btn-outline-success"><i class="fa fa-check" - aria-hidden="true"></i> - Anwenden - </button> - </form> - </div> - {% endif %} - </div> - </div> - <div id="page-content-wrapper"> - <div class="container"> - <noscript> - <div class="alert alert-danger">Um alle Funktionen nutzen zu können, empfehlen wir die Aktivierung von - JavaScript. - </div> - </noscript> - <ol class="breadcrumb"> - {% for breadcrumb in breadcrumbs %} - - <li {% if loop.last %} class="breadcrumb-item active" {% else %} - class="breadcrumb-item" {% endif %}> - {% if not loop.last %} <a href="{{ breadcrumb.url }}">{% endif %}{{ breadcrumb.text }} - {% if not loop.last %} </a>{% endif %} - </li> - {% endfor %} - </ol> - <div class="page-header {% if page_header_class %}{{ page_header_class }}{% endif %}"> - <h1>{{ title }} - <small class="text-muted">{{ subtitle|safe }}</small> - </h1> - </div> - {% with messages = get_flashed_messages(with_categories=true) %} - {% if messages %} - {% for category, message in messages %} - <div class="main-alert alert alert-{{ category }} alert-dismissible fade show"> - {{ message }} - <button type="button" class="close" data-dismiss="alert" aria-label="Close"> - <span aria-hidden="true">×</span> - </button> - </div> - {% endfor %} - {% endif %} - {% endwith %} - {% block body %}{% endblock %} - <footer> - <hr/> - <p class="pull-right d-print-none"><a target="_blank" - href="https://www-net-{% if not omdl.OP_ENV_IS_PROD %}devel-{% endif %}doku.scc.kit.edu/webapi/release/intro/"><i - class="fa fa-code"></i> API</a> | <a target="_blank" - href="https://git.scc.kit.edu/scc-net/net-suite/net-suite/issues"><i - class="fa fa-bug"></i> - Fehler melden</a> | Kontakt: <a href="mailto:dns-betrieb@scc.kit.edu">dns-betrieb∂scc.kit.edu</a> - </p> - <p class="pull-left">Instanz: {{ omdl.OP_ENV_MODE }} | Version: <a - href="https://git.scc.kit.edu/scc-net/net-suite/net-suite/commit/{{ version }}" - target="_blank">{{ version }}</a> - {% for m in mods %} - | MOD_{{ m.mod_path }}: {% if m.gitlab_url %} - <a target="_blank" href="{{ m.gitlab_url }}/commit/{{ m.version }}">{{ m.version }}</a> - {% else %} {{ m.version }} - {% endif %} - {% endfor %} - </p> - </footer> - </div> - </div> -</div> -<!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> -<script src="/static/js/node_modules/jquery/dist/jquery.min.js"></script> -<script src="/static/js/node_modules/popper.js/dist/umd/popper.min.js"></script> -<script src="/static/js/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script> -<script src="/static/js/node_modules/list.js/dist/list.min.js"></script> -<script src="/static/js/node_modules/sortablejs/Sortable.min.js"></script> -<script src="/static/js/netsuite.collapse.js"></script> -<script src="/static/js/netsuite.toggle-sidebar.js"></script> -<script src="/static/js/netsuite.transaction.sort-list.js"></script> -<script src="/static/js/netsuite.nav-searchbar.js"></script> -<script src="/static/js/netsuite.sort-utils.js"></script> -{% block post_script %}{% endblock %} -</body> -</html> diff --git a/middleware/net_suite/templates/generic_error.html b/middleware/net_suite/templates/generic_error.html deleted file mode 100644 index c22f22aa887be88988d6e54d3a939cd934d5f483..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/generic_error.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "base.html" %} -{% block body %} - <div class="alert alert-danger" role="alert"> - <h4><i class="fa fa-exclamation-triangle" aria-hidden="true"></i> Server-Fehler</h4> - <p> - {{ e|nl2br }} - </p> - </div> -{% endblock %} \ No newline at end of file diff --git a/middleware/net_suite/templates/login.html b/middleware/net_suite/templates/login.html deleted file mode 100644 index 0030c7461206aa8471da3a92ce8672aa7a7af0a6..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/login.html +++ /dev/null @@ -1,26 +0,0 @@ -{% if (date.month == 4 and date.day == 1) or 'f' in request.args.get('dst', '') %} - {% include "temp/login.html" %} -{% else %} - {% extends "base.html" %} - {% block body %} - <p>Willkommen auf der Eingangsseite zur Selbstverwaltung der aktuell angebotenen Basisdienste für das - KITnet.</p> - <div class="jumbotron"> - <div class="pull-left"> - <img class="hidden-xs hidden-sm pull-left" src="/static/img/scc_logo.png"/> - </div> - <div class="pull-left logincont"> - <form method="POST"> - <label for="username">KIT-Account</label> - <input class="form-control" id="username" autofocus type="text" name="username"/> - <label for="password">Passwort</label> - <input class="form-control" type="password" name="password"/><br/> - <button type="submit" class="btn btn-outline-primary pull-right"><i - class="fa fa-sign-in" aria-hidden="true"> </i> Anmelden - </button> - </form> - </div> - <span class="clearfix"></span> - </div> - {% endblock body %} -{% endif %} diff --git a/middleware/net_suite/templates/logout_warning.html b/middleware/net_suite/templates/logout_warning.html deleted file mode 100644 index cc951082dcb4f8404b502d6c517b3539d25feac4..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/logout_warning.html +++ /dev/null @@ -1,8 +0,0 @@ -{% extends "base.html" %} -{% block body %} - <p>Sie sind im Begriff sich abzumelden. Dabei gehen sämtliche <a href="{{ url_for('_transaction') }}">geplanten Änderungen</a> verloren.</p> - <form method="POST"> - {{ logout_confirm.hidden_tag() }} - <button type="submit" class="btn btn-outline-danger">Transaktion verwerfen und Abmelden</button> - </form> -{% endblock %} diff --git a/middleware/net_suite/templates/pg_error.html b/middleware/net_suite/templates/pg_error.html deleted file mode 100644 index 6e2e6558ad58a19d1a5cb3c4063e61cd0e020d4b..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/pg_error.html +++ /dev/null @@ -1,4 +0,0 @@ -{% extends "base.html" %} -{% block body %} -{% include "pg_error_cont.html" %} -{% endblock %} \ No newline at end of file diff --git a/middleware/net_suite/templates/pg_error_cont.html b/middleware/net_suite/templates/pg_error_cont.html deleted file mode 100644 index f3c46497be43ec6c49a12880509a5c25e3a6865c..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/pg_error_cont.html +++ /dev/null @@ -1,46 +0,0 @@ -<div class="alert alert-danger" role="alert"> - <h4><i class="fa fa-exclamation-triangle" - aria-hidden="true"></i> {{ e['error_params_dict']['et']['description'] }} - </h4> - <p>{{ e['error_params_dict']['e']['description'] }}</p> - <p>{{ e['error_params_dict']['e']['details'] }}</p> - <h4>Übergebene Parameter</h4> - <div> - <table class="table"> - <tr> - <th>Funktion</th> - <th>Parameter</th> - <th>Wert</th> - </tr> - {% for pack in e['user_params_list'] if not (pack.fpkg == 'wapi' and pack.fname == 'exec_data_importer') %} - <tr> - <th class="vertical-center" - rowspan="{{ pack.kv_list|length }}">{{ pack.fpkg }}.{{ pack.fname }}</th> - {% for param in pack.kv_list %} - {% if not loop.first %} - <tr> - {% endif %} - <th>{{ param.name }}</th> - <td>{{ param.val_wi }}</td> - </tr> - {% endfor %} - - {% endfor %} - </table> - </div> -</div> -<p> - <a data-toggle="collapse" href="#collapseErrorDetail" data-toggle="collapse" aria-expanded="false" - aria-controls="collapseErrorDetail"> - Technische Details - </a> -<div class="collapse" id="collapseErrorDetail"> - <pre>{{ e|tojson(indent=4) }}</pre> -</div> -</p> -<p class="clearfix"> - <small class="pull-right">Code: - ET_{{ e['error_params_dict']['et']['code'] }}_E_{{ e['error_params_dict']['e']['code'] }}</small> - <a href="{{ ref }}">Zur vorigen Seite zurückkehren</a> -</p> -</div> diff --git a/middleware/net_suite/templates/search.html b/middleware/net_suite/templates/search.html deleted file mode 100644 index bed4dc6319d88f1a5ae195a87aa7c0f42d2b07fd..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/search.html +++ /dev/null @@ -1,84 +0,0 @@ -{% extends "base.html" %} -{% block body %} - <form method="get" action="{{ url_for('_search') }}"> - <div class="input-group mb-3"> - <input type="text" class="form-control" value="{{ request.args.search }}" - placeholder="Suchbegriff. Regex, IP-Adresse, IP-Adresse/Netz in CIDR-Notation möglich" - aria-label="Suchbegriff" name="search" - aria-describedby="basic-addon2"> - <div class="input-group-append"> - <button class="btn btn-outline-success" type="submit">Suchen</button> - </div> - </div> - <h4>Suche in</h4> - {% for m in mods if not m.search_func == None %} - <div class="form-check form-check-inline"> - <input class="form-check-input" type="checkbox" - {% if('search' in request.args and 'check_filter_'+m.printable_name in request.args) or 'search' not in request.args or 'all_scopes' in request.args %} - checked {% endif %} name="check_filter_{{ m.printable_name }}" - id="check_filter_{{ m.printable_name }}" - value="option1"> - <label class="form-check-label" for="check_filter_{{ m.printable_name }}">{{ m.printable_name }}</label> - </div> - {% endfor %} - <h4><a data-toggle="collapse" href="#collapseSearchOpts" data-toggle="collapse" aria-expanded="false" - aria-controls="collapseErrorDetail">Erweiterte Filteroptionen</a></h4> - <div class="container-fluid collapse" id="collapseSearchOpts"> - {% for mod_opt,opts in s_opts.items() recursive %} - <h5>{{ mod_opt }}</h5> - {% for g,o in opts.items() %} - <div class="select-scope"> - <h6>{{ g }} - <small><a class="all-select" href="javascript:void(0)">alles auswählen</a> | <a - class="nothing-select" href="javascript:void(0)">nichts auswählen</a></small> - </h6> - {% if o is mapping %} - {{ loop(o.items()) }} - {% else %} - {% for item in o %} - <div class="form-check form-check-inline"> - <input class="form-check-input" type="checkbox" - name="{{ mod_opt }}_{{ item.form_name }}" - {% if ('all_opts_default' in request.args and item.default) or ('search' not in request.args and item.default) or ('search' in request.args and mod_opt+'_'+item.form_name in request.args) %} - checked {% endif %} id="{{ mod_opt }}_{{ item.form_name }}"> - <label class="form-check-label" - for="{{ mod_opt }}_{{ item.form_name }}">{{ item.name }}</label> - </div> - {% endfor %} - {% endif %} - </div> - {% endfor %} - {% endfor %} - </div> - </form> - {% if request.args.search %} - <h3>Ergebnisse</h3> - {% if s_results|length > 0 %} - {% for mod,res in s_results.items() %} - <h4>{{ mod }}</h4> - {% if res|length > 0 %} - <div class="list-group"> - {% for s in res %} - <a href="{{ s.match_ref }}" - class="list-group-item list-group-item-action flex-column align-items-start"> - {{ s.render()|safe }} - </a> - {% endfor %} - {% else %} - <div class="alert alert-primary" role="alert"> - Keine Ergebnisse in '{{ mod }}' gefunden. - </div> - {% endif %} - {% endfor %} - {% else %} - <div class="alert alert-primary" role="alert"> - Keine Ergebnisse in den gewählten NETVS-Bereichen gefunden. - </div> - - {% endif %} - {% endif %} -</div> -{% endblock %} -{% block post_script %} - <script src="/static/js/netsuite.search.filter-logic.js"></script> -{% endblock %} diff --git a/middleware/net_suite/templates/search/generic_search_result.html b/middleware/net_suite/templates/search/generic_search_result.html deleted file mode 100644 index fee90b1e3e7181f5f42c4b3b7291b806abedb63b..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/search/generic_search_result.html +++ /dev/null @@ -1,4 +0,0 @@ -<div class="d-flex w-100 justify-content-between"> - <span class="badge badge-danger">{{ type }}</span> -</div> -<p class="mb-1">{{ match_text }}</p> \ No newline at end of file diff --git a/middleware/net_suite/templates/temp/login.html b/middleware/net_suite/templates/temp/login.html deleted file mode 100644 index ec05e4734eaf211bc95958013993945963da0bfb..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/temp/login.html +++ /dev/null @@ -1,22 +0,0 @@ -<html lang="de"><head> -<meta http-equiv="content-type" content="text/html; charset=utf-8"> -<meta http-equiv="Cache-Control" content="private, no-transform"> -<meta http-equiv="X-UA-Compatible" content="IE=edge"> -<meta name="format-detection" content="telephone=no"> -<meta http-equiv="x-rim-auto-match" content="none"> -<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes, minimal-ui"> -<meta name="mobile-web-app-capable" content="yes"> -<meta name="apple-mobile-web-app-capable" content="yes"> -<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> -<meta http-equiv="cleartype" content="on"> -<style> -</style> - -<link rel="stylesheet" type="text/css" href="/static/temp/2736fab291f04e69b62d490c3c09361f5b82461a.css"> -<title> -FRITZ!Box 9999 Pro XL -</title> -</head> -<body> -<header id="blueBarBox" name="" class=""><div id="" name="" class="logoBox"></div><div id="blueBarTitel" name="" class="blue_bar_title">FRITZ!Box 9999 Pro XL</div><div id="" name="" class="logoBox fake"></div></header><div class="dialog_outer"><div id="dialogInner" class="dialog_inner"><div id="dialogHeadBox" class="dialog_head_box"><h2 id="dialogTitle">Willkommen bei Ihrer FRITZ!Box</h2></div><div id="dialogContent" class="dialog_content"><form method="post" id="loginForm" class="loginForm"><div class="formular"><p>Bitte melden Sie sich mit Ihrem Benutzernamen und Ihrem Kennwort an.</p><label for="uiViewUser">Benutzername</label><input type="text" name="username"/><br><p id="uiUsernameError" class="ErrorMsg hidden">Bitte geben Sie einen Benutzernamen an.</p><label for="uiPass">Kennwort</label><input tabindex="2" id="uiPass" name="password" type="password"><div id="uiLoginError" class="hidden"><p class="error_text">Anmeldung fehlgeschlagen.</p><p class="error_text">Haben Sie sich vielleicht vertippt oder fehlt Ihnen die Zugangsberechtigung für diesen Bereich?</p><p id="uiWait" class="error_text"></p></div></div><div class="btn_form_foot"><input name="response" id="uiResp" value="" type="hidden"><input name="lp" value="" type="hidden"><input name="username" id="username" value="netadmin" type="hidden"><button type="submit" tabindex="3" id="submitLoginBtn">Anmelden</button></div></form></div></div></div> -</body></html> diff --git a/middleware/net_suite/templates/transaction_inspect.html b/middleware/net_suite/templates/transaction_inspect.html deleted file mode 100644 index 022618a043feec773a1f210b2a16ed70caef206b..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transaction_inspect.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "base.html" %} -{% block body %} - <div class="row tr-row no-gutters"> - <div class="col-12 vertical-center"> - {{ plan.plan[pos].render()|safe }} - {% set e = plan.plan[pos].last_error %} - </div> - </div> - {% include "pg_error_cont.html" %} -{% endblock %} -{% block post_script %} -{% endblock %} \ No newline at end of file diff --git a/middleware/net_suite/templates/transactions.html b/middleware/net_suite/templates/transactions.html deleted file mode 100644 index 5c9a07951cd3d50db7ada46e5c30f8f303ca3a11..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions.html +++ /dev/null @@ -1,61 +0,0 @@ -{% extends "base.html" %} -{% block body %} - {% if plan.plan|length > 1 %} - <div class="alert alert-dark" role="alert"> - Die Reihenfolge der Aktionen kann per Drag&Drop (<i class="fa fa-bars"></i>) verändert werden. - <br/>Die Transaktion wird von oben nach unten ausgeführt. - </div> - {% endif %} - <div id="transactionListOverview"> - {% for p in plan.plan %} - <div class="row tr-row no-gutters"> - <div class="col-1"> - <span class="pull-left"><i - class="fa fa-bars"></i></span> - </div> - <div class="col-10 vertical-center {% if p.last_error %}table-danger{% endif %}"> - {{ p.render()|safe }} - {% if p.last_error %} - <p> - <a href="{{ url_for('_transaction_error', pos=loop.index0) }}" class="text-danger"><i class="fa fa-exclamation-triangle"></i> Fehler bei letzter Ausführung</a> - </p> - {% endif %} - </div> - <div class="col-1"> - <form method="POST" target="."> - {{ action_del_form.csrf_token }} - <input type="hidden" name="index" value="{{ loop.index0 }}"> - <button class="btn btn-outline-danger" type="submit" name="action_delete"><i - class="fa fa-trash"></i></button> - </form> - </div> - </div> - {% endfor %} - {% if plan.plan|length == 0 %} - <div class="alert alert-info" role="alert"> - Keine geplanten Aktionen vorhanden. - </div> - </div> - {% else %} - <div class="row align-items-center"> - <form action="" method="post"> - {{ tr_form_control.hidden_tag() }} - <button type="submit" name="cancel" class="btn btn-outline-danger"><i class="fa fa-times" - aria-hidden="true"></i> - Verwerfen - </button> - <button type="submit" name="dry-run" class="btn btn-outline-info"><i class="fa fa-undo" - aria-hidden="true"></i> - Testen - </button> - <button type="submit" name="apply" class="btn btn-outline-success"><i class="fa fa-check" - aria-hidden="true"></i> - Anwenden - </button> - </form> - </div> - {% endif %} -{% endblock %} -{% block post_script %} - <script src="/static/js/netsuite.transaction_page.sort-list.js"></script> -{% endblock %} \ No newline at end of file diff --git a/middleware/net_suite/templates/transactions/add.html b/middleware/net_suite/templates/transactions/add.html deleted file mode 100644 index c8938a0c6d6f70d06eaeaae85e40b91c789a02d1..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/add.html +++ /dev/null @@ -1,6 +0,0 @@ -<div class="row align-items-cente"> - <div class="col vertical-center text-center"> - <i class="fa text-success fa-plus fa-2x"></i> - </div> - <div class="col-11 vertical-center"><span class="badge badge-primary">{{ add_type }}</span> {{ name }}</div> -</div> diff --git a/middleware/net_suite/templates/transactions/add_domains.html b/middleware/net_suite/templates/transactions/add_domains.html deleted file mode 100644 index 84adc0b3bac76a551339bd7c4644a56143614226..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/add_domains.html +++ /dev/null @@ -1,12 +0,0 @@ -<div class="row align-items-center vertical-center"> - <div class="col"><span - class="badge badge-primary" title="Bereich">Bereich</span> <span class="badge badge-success">Hinzufügen</span> - {{ domains|length }} Domain(s) in Bereich '<a - href="{{ url_for('dnsvs.inspect_area', area=area.name, suffix=area.suffix) }}">{{ area.print_name }}</a>': - <ul> - {% for d in domains %} - <li>{{ d }}</li> - {% endfor %} - </ul> - </div> -</div> diff --git a/middleware/net_suite/templates/transactions/add_fqdn.html b/middleware/net_suite/templates/transactions/add_fqdn.html deleted file mode 100644 index 735d2d71504bf9058a5123aa539e275d58815127..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/add_fqdn.html +++ /dev/null @@ -1,12 +0,0 @@ -<div class="row align-items-center vertical-center"> - <div class="col"><span - class="badge badge-info" title="Resource Record">FQDN</span> <span - class="badge badge-success">Anlegen</span> - '{{ fqdn }}' - <ul> - {% if description %} - <li>Beschreibung: '{{ description }}'</li> - {% endif %} - </ul> - </div> -</div> diff --git a/middleware/net_suite/templates/transactions/add_mgrs.html b/middleware/net_suite/templates/transactions/add_mgrs.html deleted file mode 100644 index 1d45a07c75758ed9681e163114ec62cbb2a30081..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/add_mgrs.html +++ /dev/null @@ -1,12 +0,0 @@ -<div class="row align-items-center vertical-center"> - <div class="col"><span - class="badge badge-primary" title="Bereich">Bereich</span> <span class="badge badge-success">Hinzufügen</span> - {{ mgrs|length }} Betreuer zum Bereich '<a - href="{{ url_for('dnsvs.inspect_area', area=area.name, suffix=area.suffix) }}">{{ area.print_name }}</a>': - <ul> - {% for m in mgrs %} - <li>{{ m }}</li> - {% endfor %} - </ul> - </div> -</div> diff --git a/middleware/net_suite/templates/transactions/add_record.html b/middleware/net_suite/templates/transactions/add_record.html deleted file mode 100644 index 43932e86d3e38652e5c0dcc66bac822ce1a8b161..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/add_record.html +++ /dev/null @@ -1,7 +0,0 @@ -<div class="row align-items-center vertical-center"> - <div class="col"><span - class="badge badge-warning" title="Resource Record">RR</span> <span class="badge badge-success">Anlegen</span> <code - title="{{ inttype }}">{{ rr_data }}</code> zum - FQDN '{{ fqdn }}' - </div> -</div> diff --git a/middleware/net_suite/templates/transactions/del_mgrs.html b/middleware/net_suite/templates/transactions/del_mgrs.html deleted file mode 100644 index d0e8370719555fad1a73b6d913bf4cbbc6b2a644..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/del_mgrs.html +++ /dev/null @@ -1,12 +0,0 @@ -<div class="row align-items-center vertical-center"> - <div class="col"><span - class="badge badge-primary" title="Bereich">Bereich</span> <span class="badge badge-danger">Löschen</span> - {{ mgrs|length }} Betreuer aus Bereich '<a - href="{{ url_for('dnsvs.inspect_area', area=area.name, suffix=area.suffix) }}">{{ area.print_name }}</a>': - <ul> - {% for m in mgrs %} - <li>{{ m }}</li> - {% endfor %} - </ul> - </div> -</div> diff --git a/middleware/net_suite/templates/transactions/delete.html b/middleware/net_suite/templates/transactions/delete.html deleted file mode 100644 index 9f526d013a3960c28edb6e6107c244dd689aba10..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/delete.html +++ /dev/null @@ -1,6 +0,0 @@ -<div class="row align-items-cente"> - <div class="col vertical-center text-center"> - <i class="fa text-danger fa-trash fa-2x"></i> - </div> - <div class="col-11 vertical-center"><span class="badge badge-primary">{{ add_type }}</span> {{ name }}</div> -</div> diff --git a/middleware/net_suite/templates/transactions/delete_domains.html b/middleware/net_suite/templates/transactions/delete_domains.html deleted file mode 100644 index 7f52f242b7592af4c73e51abf6df2bc8f795ae97..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/delete_domains.html +++ /dev/null @@ -1,12 +0,0 @@ -<div class="row align-items-center vertical-center"> - <div class="col"><span - class="badge badge-primary" title="Bereich">Bereich</span> <span class="badge badge-danger">Löschen</span> - {{ domains|length }} Domain(s) aus Bereich '<a - href="{{ url_for('dnsvs.inspect_area', area=area.name, suffix=area.suffix) }}">{{ area.print_name }}</a>': - <ul> - {% for d in domains %} - <li>{{ d }}</li> - {% endfor %} - </ul> - </div> -</div> diff --git a/middleware/net_suite/templates/transactions/delete_fqdn.html b/middleware/net_suite/templates/transactions/delete_fqdn.html deleted file mode 100644 index 384d6facbb4f2b7cb2bb0294b11fe6c74b680b7a..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/delete_fqdn.html +++ /dev/null @@ -1,32 +0,0 @@ -<div class="row align-items-center vertical-center"> - <div class="col"><span - class="badge badge-info" title="Resource Record">FQDN</span> <span - class="badge badge-danger">Löschen</span> - '<span title="{{ inttype }}"><a href="{{ url_for('dnsvs.inspect_fqdn', fqdn=fqdn) }}">{{ fqdn }}</a></span>' - <ul> - {% if force_del_ref_records %} - <li><span class="text-danger">{{ colnames['NTree']['force_del_ref_records'].short_title_rel }}</span> - <div class="btn-group"> - <button type="button" class="btn btn-default dropdown-toggle" - data-toggle="dropdown" aria-haspopup="true" - aria-expanded="false"> - <i class="fa fa-info-circle" - aria-hidden="true"></i> <span class="caret"></span> - </button> - <div class="dropdown-menu"> - <a class="dropdown-item" - href="{{ url_for('dnsvs.inspect_fqdn_recs', fqdn=fqdn if not fqdn == '.' else '$') }}">Alle - Records zu FQDN</a> - <a class="dropdown-item" - href="{{ url_for('dnsvs.inspect_fqdn_refs', fqdn=fqdn if not fqdn == '.' else '$') }}">Alle - Referenzen auf FQDN</a> - </div> - </div> - </li> - {% endif %} - {% if do_del_pqdn %} - <li><p class="text-danger">{{ colnames['NTree']['do_del_pqdn'].short_title_rel }}</p></li> - {% endif %} - </ul> - </div> -</div> diff --git a/middleware/net_suite/templates/transactions/delete_record.html b/middleware/net_suite/templates/transactions/delete_record.html deleted file mode 100644 index 7e701a2cd997b064b2646cd47a8f7209931d8343..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/delete_record.html +++ /dev/null @@ -1,7 +0,0 @@ -<div class="row align-items-center vertical-center"> - <div class="col"><span - class="badge badge-warning" title="Resource Record">RR</span> <span class="badge badge-danger">Löschen</span> <code - title="{{ inttype }}">{{ rr_data }}</code> zum - FQDN '<a href="{{ url_for('dnsvs.inspect_fqdn', fqdn=fqdn) }}">{{ fqdn }}</a>' - </div> -</div> diff --git a/middleware/net_suite/templates/transactions/edit.html b/middleware/net_suite/templates/transactions/edit.html deleted file mode 100644 index 73de895176a2913436099b7690e8eef8e9297f99..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/edit.html +++ /dev/null @@ -1,6 +0,0 @@ -<div class="row align-items-cente"> - <div class="col vertical-center text-center"> - <i class="fa text-primary fa-pencil fa-2x"></i> - </div> - <div class="col-11 vertical-center"><span class="badge badge-primary">{{ add_type }}</span> {{ name }}</div> -</div> diff --git a/middleware/net_suite/templates/transactions/edit_area_description.html b/middleware/net_suite/templates/transactions/edit_area_description.html deleted file mode 100644 index 5a459dfaf7503516d5e7143866b61f13820f1248..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/edit_area_description.html +++ /dev/null @@ -1,12 +0,0 @@ -<div class="row align-items-center vertical-center"> - <div class="col"><span - class="badge badge-primary" title="Resource Record">Bereich</span> <span - class="badge badge-primary">Bearbeiten</span> - '<a href="{{ url_for('dnsvs.inspect_area', area=area.name, suffix=area.suffix) }}">{{ area.print_name }}</a>' - <ul> - <li>Beschreibung: '{{ area.description }}' <i class="fa fa-long-arrow-right"></i> - '{{ new_description }}' - </li> - </ul> - </div> -</div> diff --git a/middleware/net_suite/templates/transactions/edit_fqdn.html b/middleware/net_suite/templates/transactions/edit_fqdn.html deleted file mode 100644 index 70d9c1b0f8e2deeca64090f93e75b358f6cc8380..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/edit_fqdn.html +++ /dev/null @@ -1,16 +0,0 @@ -<div class="row align-items-center vertical-center"> - <div class="col"><span - class="badge badge-info" title="Resource Record">FQDN</span> <span - class="badge badge-primary">Bearbeiten</span> - '{{ old_fqdn }}' - <ul> - {% if not old_fqdn == new_fqdn or not old_inttype == new_inttype %} - <li>FQDN: '<span title="{{ old_inttype }}">{{ old_fqdn }}</span>' <i class="fa fa-long-arrow-right"></i> '<span - title="{{ new_inttype }}">{{ new_fqdn }}</span>'</li> - {% endif %} - {% if not old_description|string == new_description|string %} - <li>Beschreibung: '{{ old_description }}' <i class="fa fa-long-arrow-right"></i> '{{ new_description }}'</li> - {% endif %} - </ul> - </div> -</div> diff --git a/middleware/net_suite/templates/transactions/edit_record.html b/middleware/net_suite/templates/transactions/edit_record.html deleted file mode 100644 index 88cba47d9623710a8cc80a38bf97018dc4e2e924..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/edit_record.html +++ /dev/null @@ -1,9 +0,0 @@ -<div class="row align-items-center vertical-center"> - <div class="col"><span - class="badge badge-warning" title="Resource Record">RR</span> <span class="badge badge-primary">Bearbeiten</span> - {{ rectype }}-Record zur FQDN: '{{ fqdn }}' - <ul> - <li><code title="{{ old_inttype.name }}">{{ old_rr_data }}</code> <i class="fa fa-long-arrow-right"></i> <code title="{{ new_inttype }}">{{ new_rr_data }}</code></li> - </ul> - </div> -</div> diff --git a/middleware/net_suite/templates/transactions/generic.html b/middleware/net_suite/templates/transactions/generic.html deleted file mode 100644 index 629e45f477934539f2af1fa19404977a9e5d31d2..0000000000000000000000000000000000000000 --- a/middleware/net_suite/templates/transactions/generic.html +++ /dev/null @@ -1,6 +0,0 @@ -<div class="row align-items-cente"> - <div class="col vertical-center text-center"> - <i class="fa fa-question-circle fa-2x"></i> - </div> - <div class="col-11 vertical-center">{{ name }} (ref: <a href="{{ ref_link }}">{{ ref_link }}</a>)</div> -</div> \ No newline at end of file diff --git a/middleware/net_suite/tests/model.py b/middleware/net_suite/tests/model.py deleted file mode 100644 index ae5c5794e4af5eb2b0e54822ddec4fa7d64314e0..0000000000000000000000000000000000000000 --- a/middleware/net_suite/tests/model.py +++ /dev/null @@ -1,61 +0,0 @@ -import unittest -from kitnet.lib.netdb import PostgreSQL -from net_suite.model import * - - -class DBObjectTestCase(unittest.TestCase): - test_login_name = 'scc-netadmin-0001' - - def setUp(self): - self.db = PostgreSQL() - self.connection = self.db.connect() - self.ta = self.connection.xact() - self.ta.begin() - - def tearDown(self): - self.ta.commit() - self.connection.close() - - -class DBMgrTestCase(DBObjectTestCase): - def setUp(self): - super().setUp() - self.mgr = DBMgr.get_by_login_name(db=self.db, connection=self.connection, login_name=self.test_login_name) - - def test_get_by_login_name(self): - self.assertIsNotNone(self.mgr) - self.assertIsNotNone(self.mgr.is_scc_itb) - self.assertIsNotNone(self.mgr.is_locked) - - def test_possible_rr_inttypes(self): - rr_types = self.mgr.get_possible_rr_inttypes(db=self.db, connection=self.connection) - # for r in rr_types: - # print(r.name) - self.assertGreater(len(rr_types), 0) - - def test_areas(self): - areas = self.mgr.get_areas(db=self.db, connection=self.connection) - self.assertGreater(len(areas), 0) - - def test_get_fqdn_root_nodes(self): - fqdns = self.mgr.get_fqdn_root_nodes(db=self.db, connection=self.connection) - self.assertGreater(len(fqdns), 0) - - -class RRTestCase(DBObjectTestCase): - def setUp(self): - super().setUp() - self.mgr = DBMgr.get_by_login_name(db=self.db, connection=self.connection, login_name=self.test_login_name) - self.area = self.mgr.get_areas(db=self.db, connection=self.connection) - self.arbitrary_rr_tuple_list = self.area[0].get_rr(db=self.db, connection=self.connection, login_name=self.test_login_name) - - def test_get_records(self): - records = RR.get_by_fqdn(login_name=self.test_login_name, db=self.db, connection=self.connection, - fqdn=self.arbitrary_rr_tuple_list[0]['NTree'].fqdn) - self.assertGreater(len(records), 0) - for r in records: - rr = r['rr'] - ntree = r['NTree'] - self.assertIsNotNone(rr) - self.assertIsNotNone(ntree) - self.assertIsNotNone(ntree.fqdn) diff --git a/middleware/net_suite/views.py b/middleware/net_suite/views.py index 2849a858df90c978727bf30daaeabc580655f7a3..733b299e9431079273832e527997fcd6d9907fd3 100644 --- a/middleware/net_suite/views.py +++ b/middleware/net_suite/views.py @@ -1,24 +1,8 @@ from flask import request, redirect, url_for, render_template, g, abort, flash, jsonify -from flask_wtf import FlaskForm -from wtforms import HiddenField -from flask_breadcrumbs import register_breadcrumb from functools import wraps -from net_suite.model import Transaction -from subprocess import check_output import postgresql.exceptions import json -import ipaddress -from . import app, db, resolve_menu, MENU, DIRTY, VERSION, MODS -import babel.dates -import zlib - - -@app.before_first_request -def prepare_menu(): - global DIRTY, MENU - if DIRTY: - resolve_menu(MENU) - DIRTY = False +from . import app, db, VERSION, MODS def get_db_conn(): @@ -54,7 +38,7 @@ def close_db(error): if not g.ta.state == 'initialized': g.ta.commit() except postgresql.exceptions.Exception as e: - print('got error on close... ignoreing', e) + print('got error on close... ignoring', e) g.kit_pg_db_conn.close() @@ -78,190 +62,27 @@ def login_required(f): return decorated_function -class ViewEntityData(object): - def __init__(self, ref_col_name, short_title_rel, is_nullable, data_type_description, long_title, data_type_name, - data_type_basename, ref_tab_name, short_title_abs, length: int): - self.ref_col_name = ref_col_name - self.short_title_rel = short_title_rel - self.is_nullable = is_nullable - self.data_type_description = data_type_description - self.long_title = long_title - self.data_type_name = data_type_name - self.data_type_basename = data_type_basename - self.ref_tab_name = ref_tab_name - self.short_title_abs = short_title_abs - self.length = length - - -@app.context_processor -def inject_user(): - s = request.environ['beaker.session'] - u = None - if 'login' in s: - u = s['login'] - return dict(user=u) - - -@app.context_processor -def inject_transaction_plan(): - s = request.environ['beaker.session'] - p = None - if 'plan' in s: - p = s['plan'] - return dict(plan=p) - - -@app.context_processor -def inject_menu(): - return dict(menu=MENU, active=request.url_rule) - - -@app.context_processor -def inject_host_oper_mode(): - return dict(omdl=db.host_omdl, version=VERSION) - - @app.route('/') -@register_breadcrumb(app, '.', 'NETVS') def main(): return redirect(url_for(app.config.get('DEFAULT_URL'))) -@app.route('/search', methods=['get']) -@register_breadcrumb(app, '.search', 'Suche') -@login_required -def _search(): - s = request.environ['beaker.session']['login'] - s_res = dict() - if 'search' in request.args: - term = request.args['search'] - if zlib.compress(bytes(term, 'ascii'), 1) == b'x\x01K+\xca,\xa9\xd2K\xca\xaf\x00\x00\x12\\\x03\xa7': - return redirect(url_for('logout', dst='f')) - try: - term_ipaddr = ipaddress.IPv4Interface(term.strip()) - except: - try: - term_ipaddr = ipaddress.IPv6Interface(term.strip()) - except: - term_ipaddr = None - if term.strip() == '': - flash('Suchbegriff darf nicht leer sein.', category='danger') - return redirect(url_for('_search')) - for m in MODS: - if m.search_func is None or ( - 'check_filter_' + m.printable_name not in request.args and 'all_scopes' not in request.args): - continue - s_res[m.printable_name] = m.search_func(term_ipaddr=term_ipaddr, login=s, term=term, db=db, - connection=get_db_conn(), limit=100, - opts={s[len(m.printable_name) + 1:]: k for s, k in - request.args.items() if - s.startswith(m.printable_name + '_')}) - return render_template('search.html', title='Suche', - s_results=s_res) - - -@app.route('/api/transaction/swap_items', methods=['POST']) -@login_required -def _transaction_api_helper(): - s = request.environ['beaker.session'] - s['plan'].swap(int(request.form['old']), int(request.form['new'])) - s.save() - return "done" - - -@app.context_processor -def inject_transaction_action_del_form(): - return {'_transaction_action_del_form': TransactionElementDelForm(), - '_transaction_control_form': TransactionControlForm()} - - -@app.route('/transaction/<int:pos>', methods=['POST', 'GET']) -@register_breadcrumb(app, '.transaction.element', 'element', - dynamic_list_constructor=( - lambda: [{'text': 'Fehler in Transaktionselement {}'.format(request.view_args['pos'])}])) -@login_required -def _transaction_error(pos): - plen = len(request.environ['beaker.session']['plan'].plan) - if plen - 1 < pos or request.environ['beaker.session']['plan'].plan[pos].last_error is None: - if plen == 0: - return redirect('/') - return redirect(url_for('_transaction')) - return render_template('transaction_inspect.html', pos=pos, title='Fehler in Transaktionselement') - - - @app.route('/api/system/info') def api_sysinfo(): - return jsonify({'version': VERSION, 'mods': MODS, 'host_oper_mode': db.host_omdl}) + return jsonify({'version': VERSION, 'mods': MODS, 'host_oper_mode': db.host_omdl, 'js_mods': app.config.get('JS_MODULES')}) @app.route('/api/session') def api_session(): s = request.environ['beaker.session'] if 'login' in s: - return jsonify({'user': s['login'], 'transaction': s['plan']}) - return jsonify({'error':'No session'}), 403 - - -@app.route('/transaction', methods=['POST', 'GET']) -@register_breadcrumb(app, '.transaction', 'Aktuelle Transaktion') -@login_required -def _transaction(): - if 'trans_ret' in request.args: - return redirect('/') - tr_form_control = TransactionControlForm() - tr_action_delete = TransactionElementDelForm() - ret_add = ('&' if '?' in request.form.get('next', '') else '?') + 'trans_ret=yes' - if request.method == 'POST': - if tr_form_control.validate_on_submit() and 'cancel' in request.form: - s = request.environ['beaker.session'] - s['plan'] = Transaction() - s.save() - return redirect(request.form.get('next', url_for('main')) + ret_add) - if tr_form_control.validate_on_submit() and 'apply' in request.form: - s = request.environ['beaker.session'] - s['plan'].execute(db=db, connection=get_db_conn(), login_name=s['login'].login_name) - s['plan'] = Transaction() - s.save() - return redirect(request.form.get('next', url_for('main')) + ret_add) - if tr_form_control.validate_on_submit() and 'dry-run' in request.form: - s = request.environ['beaker.session'] - s['plan'].execute(db=db, connection=get_db_conn(), login_name=s['login'].login_name, dry_run=True) - flash('Testlauf der Transaktion erfolgreich.', category='success') - return redirect(request.form.get('next', url_for('main'))) - if tr_action_delete.validate_on_submit() and 'action_delete' in request.form: - s = request.environ['beaker.session'] - s['plan'].delete(int(tr_action_delete.index.data)) - s.save() - return redirect(request.form.get('next', url_for('_transaction')) + ret_add) - if 'next' in request.form: - return redirect(request.form['next'] + ret_add) - return render_template('transactions.html', tr_form_control=tr_form_control, - title='Aktuelle Transaktion', action_del_form=tr_action_delete) - - -class TransactionControlForm(FlaskForm): - pass - - -class TransactionElementDelForm(FlaskForm): - index = HiddenField('index') - - -class LogoutConfirmForm(FlaskForm): - pass + return jsonify({'user': s['login']}) + return jsonify({'error': 'No session'}), 403 @app.route('/logout', methods=['GET', 'POST']) def logout(): s = request.environ['beaker.session'] - if 'plan' in s and len(s['plan'].plan) > 0: - form = LogoutConfirmForm(request.form) - if request.method == 'POST' and form.validate_on_submit(): - del (s['plan']) - s.save() - return redirect(url_for('logout')) - return render_template('logout_warning.html', title="Wirklich abmelden?", logout_confirm=form) if 'login' in s: s.delete() if 'dst' in request.args: @@ -275,58 +96,17 @@ def handle_db_error(e): err = json.loads(e.details['hint']) return jsonify({'type': 'db_error', 'error': err}), 500 except: - return jsonify({'type': 'generic_error', 'error': e.details}), 500 - - -@app.errorhandler(404) -def handle_not_fund(e): - return render_template('404_error.html', e=e), 404 + if hasattr(e, 'details'): + return jsonify({'type': 'generic_error', 'error': e.details}), 500 + return jsonify({'type': 'generic_error', 'error': e}), 500 @app.errorhandler(Exception) def handle_generic(e): if app.config.get('DEBUG', False): raise e - return jsonify({'type': 'generic_error', 'error': e.details}), 500 - - -@login_required -@app.route('/devel/set_login_name') -def devel_set_login_name(): - if not db.host_omdl.OP_ENV_IS_DEVEL: - return abort(404) - s = request.environ['beaker.session']['login'] - s.login_name = request.args['login_name'] - s.update_acd_cache(db=db, connection=get_db_conn()) - request.environ['beaker.session'].save() - return 'done' - - -@app.template_filter('strftime') -def _jinja2_filter_datetime(date): - return babel.dates.format_datetime(date, - format='long', - tzinfo=babel.dates.get_timezone('Europe/Berlin'), - locale=request.accept_languages.best.replace('-', - '_') if request.accept_languages.best is not None else 'de_DE') + if hasattr(e, 'details'): + return jsonify({'type': 'generic_error', 'error': e.details}), 500 + return jsonify({'type': 'generic_error', 'error': str(e)}), 500 -@app.context_processor -def inject_mods(): - current_mod = request.blueprint - if current_mod is not None: - for m in MODS: - if m.name == current_mod: - current_mod = m - break - search_opts = {} - try: - for m in MODS: - if m.search_func is None: - continue - search_opts[m.printable_name] = m.search_opts_func(login=request.environ['beaker.session']['login'], db=db, - connection=get_db_conn()) - except: - pass - return dict(mods=MODS, current_mod=current_mod, - s_opts=search_opts) diff --git a/middleware/requirements.txt b/middleware/requirements.txt index 9f68afc29e97f82fdeea0232061c470fb8ddfa74..c1444425c54a376f2a19acaade246dc9e6d4f0f8 100644 --- a/middleware/requirements.txt +++ b/middleware/requirements.txt @@ -1,29 +1,45 @@ -appdirs>=1.4.3 -Beaker>=1.9.0 -certifi>=2018.1.18 +appdirs>=1.4.4 +Babel>=2.8.0 +Beaker>=1.11.0 +Brotli>=1.0.7 +certifi>=2020.4.5.2 +cffi>=1.14.0 chardet>=3.0.4 -click>=6.7 -dnspython>=1.15.0 -Flask>=0.12.2 -Flask-Breadcrumbs>=0.4.0 -Flask-Compress>=1.4.0 -Flask-Menu>=0.7.0 -Flask-WTF>=0.14.2 -idna>=2.6 -itsdangerous>=0.24 -Jinja2>=2.10 -MarkupSafe>=1.0 -packaging>=16.8 -psycopg2-binary>=2.7.4 +click>=7.1.2 +cryptography>=2.9.2 +defusedxml>=0.6.0 +dnspython>=1.16.0 +Flask>=1.1.2 +Flask-Breadcrumbs>=0.5.1 +Flask-Compress>=1.5.0 +Flask-Menu>=0.7.1 +Flask-WTF>=0.14.3 +future>=0.18.2 +httplib2>=0.18.1 +idna>=2.9 +itsdangerous>=1.1.0 +Jinja2>=2.11.2 +Mako>=1.1.3 +MarkupSafe>=1.1.1 +oauth2client>=4.1.3 +oic>=1.2.0 +packaging>=20.4 +psycopg2-binary>=2.8.5 py-postgresql>=1.2.1 -pyasn1>=0.4.2 -pyldap>=2.4.45 -pyparsing>=2.2.0 --e git+ssh://git@git.scc.kit.edu:scc-net/net-suite/python3.x-packages.git@master#egg=python3.x_packages.pgsql -requests>=2.18.4 -six>=1.11.0 -urllib3>=1.22 -Werkzeug>=0.14.1 -WTForms>=2.1 -Babel>=2.5.3 -pytz>=2018.3 +pyasn1>=0.4.8 +pyasn1-modules>=0.2.8 +pycparser>=2.20 +pycryptodomex>=3.9.7 +pyjwkest>=1.4.2 +pyldap>=3.0.0.post1 +pyparsing>=2.4.7 +python-ldap>=3.2.0 +-e git+ssh://git@git.scc.kit.edu/scc-net/net-suite/python3.x-packages.git@master#egg=python3.x_packages.pgsql +pytz>=2020.1 +requests>=2.23.0 +rsa>=4.1 +six>=1.15.0 +typing-extensions>=3.7.4.2 +urllib3>=1.25.9 +Werkzeug>=1.0.1 +WTForms>=2.3.1 diff --git a/middleware/run.py b/middleware/run.py index 32b43c5968eb19feb9fd3db0ee862f0ed25cd07b..5b28d8a80d18233bc57ca27e5192d52f99af058f 100644 --- a/middleware/run.py +++ b/middleware/run.py @@ -1,9 +1,8 @@ -from net_suite import app, load_mods, update_and_load_datadict, finalize_init +from net_suite import app, load_mods, finalize_init import os app.config.from_pyfile(os.path.join(os.getcwd(), 'config.py')) load_mods() -update_and_load_datadict() finalize_init() if __name__ == '__main__':