diff --git a/Vagrantfile b/Vagrantfile index 08d5f652c..20c0d95f9 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -4,23 +4,6 @@ Vagrant.require_version ">= 2.0" require "yaml" -CAC_SHARED_FOLDER_TYPE = ENV.fetch("CAC_SHARED_FOLDER_TYPE", "nfs") -CAC_NFS_VERSION = ENV.fetch("CAC_NFS_VERSION_3", true) ? 'vers=3': 'vers=4' - -if CAC_SHARED_FOLDER_TYPE == "nfs" - if Vagrant::Util::Platform.linux? then - CAC_MOUNT_OPTIONS = ['rw', CAC_NFS_VERSION, 'tcp', 'nolock', 'actimeo=1'] - else - CAC_MOUNT_OPTIONS = [CAC_NFS_VERSION, 'udp', 'actimeo=1'] - end -else - if ENV.has_key?("CAC_MOUNT_OPTIONS") - CAC_MOUNT_OPTIONS = ENV.fetch("CAC_MOUNT_OPTIONS").split - else - CAC_MOUNT_OPTIONS = ["rw"] - end -end - if ENV['CAC_TRIPPLANNER_MEMORY'].nil? # OpenTripPlanner needs > 1GB to build and run CAC_MEMORY_MB = "8192" @@ -88,7 +71,7 @@ VAGRANT_PROXYCONF_ENDPOINT = ENV["VAGRANT_PROXYCONF_ENDPOINT"] VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| - config.vm.box = "ubuntu/trusty64" + config.vm.box = "bento/ubuntu-16.04" # Wire up the proxy if: # @@ -132,12 +115,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "app" do |app| app.vm.hostname = "app" app.vm.network "private_network", ip: "192.168.8.24" - - if testing? - app.vm.synced_folder ".", "/opt/app" - else - app.vm.synced_folder ".", "/opt/app", type: CAC_SHARED_FOLDER_TYPE, mount_options: CAC_MOUNT_OPTIONS - end + app.vm.synced_folder ".", "/opt/app" # Web app.vm.network "forwarded_port", guest: 443, host: 8024 diff --git a/deployment/ansible/group_vars/all b/deployment/ansible/group_vars/all index ed8274eb7..35c65d310 100644 --- a/deployment/ansible/group_vars/all +++ b/deployment/ansible/group_vars/all @@ -11,10 +11,12 @@ postgres_host: "192.168.8.25" packer_version: "1.0.2" +python_version: "2.7.*" + nodejs_version: 10.16.0 -nodejs_npm_version: 6.9.0 +nodejs_npm_version: 6.10.2 -pip_version: 19.1.* +pip_version: 19.2.* virtualenv_version: 16.5.0 otp_router: "default" diff --git a/deployment/ansible/group_vars/development_template b/deployment/ansible/group_vars/development_template index 846d4f305..752480e91 100644 --- a/deployment/ansible/group_vars/development_template +++ b/deployment/ansible/group_vars/development_template @@ -26,8 +26,9 @@ default_admin_username: 'admin' default_admin_password: 'admin' default_admin_email: 'systems+cac@azavea.com' -postgresql_version: "9.4" -postgresql_package_version: "9.4.*.pgdg14.04+1" +postgresql_version: "9.5" +postgresql_package_version: "9.5.*" +postgresql_support_libpq_version: "*" postgresql_listen_addresses: "*" postgresql_hba_mapping: diff --git a/deployment/ansible/group_vars/test b/deployment/ansible/group_vars/test index eeed3b303..fa3462e8e 100644 --- a/deployment/ansible/group_vars/test +++ b/deployment/ansible/group_vars/test @@ -5,8 +5,9 @@ production: false postgis_version: [2, 1, 8] -postgresql_version: "9.4" -postgresql_package_version: "9.4.*.pgdg14.04+1" +postgresql_version: "9.5" +postgresql_package_version: "9.5.*" +postgresql_support_libpq_version: "*" postgresql_listen_addresses: "*" postgresql_hba_mapping: diff --git a/deployment/ansible/otp.yml b/deployment/ansible/otp.yml index 99f0224f3..0a8eda6d9 100644 --- a/deployment/ansible/otp.yml +++ b/deployment/ansible/otp.yml @@ -7,4 +7,4 @@ apt: update_cache=yes roles: - - { role: "cac-tripplanner.otp-data"} + - {role: "cac-tripplanner.otp-data"} diff --git a/deployment/ansible/roles.yml b/deployment/ansible/roles.yml index 4260d9fc5..c27cd6a44 100644 --- a/deployment/ansible/roles.yml +++ b/deployment/ansible/roles.yml @@ -1,5 +1,5 @@ - src: azavea.opentripplanner - version: 1.2.0 + version: 2.0.0 - src: azavea.nginx version: 0.3.1 @@ -23,7 +23,7 @@ version: 0.1.0 - src: azavea.postgresql-support - version: 0.3.2 + version: 0.4.0 - src: azavea.postgresql - version: 0.5.0 + version: 1.0.0 diff --git a/deployment/ansible/roles/cac-tripplanner.app/defaults/main.yml b/deployment/ansible/roles/cac-tripplanner.app/defaults/main.yml index 3837b34af..3896018c5 100644 --- a/deployment/ansible/roles/cac-tripplanner.app/defaults/main.yml +++ b/deployment/ansible/roles/cac-tripplanner.app/defaults/main.yml @@ -6,26 +6,9 @@ app_sass_version: "3.4.22" app_log: "/var/log/cac-tripplanner-app.log" +gunicorn_app_name: "cac-tripplanner-app" root_app_dir: "/opt/app/python/cac_tripplanner" root_conf_dir: "/etc/cac_tripplanner.d" root_src_dir: "/opt/app/src" root_static_dir: "/srv/cac" root_media_dir: "/media/cac" - -cac_python_dependencies: - - { name: 'base58', version: '1.0.3' } - - { name: 'boto', version: '2.49.0' } - - { name: 'django', version: '1.11.21' } - - { name: 'django-ckeditor', version: '5.7.1' } - - { name: 'django-image-cropping', version: '1.2.0' } - - { name: 'django-extensions', version: '1.9.9' } - - { name: 'django-storages', version: '1.7.1' } - - { name: 'easy-thumbnails', version: '2.6.0' } - - { name: 'gunicorn', version: '19.9.0' } - - { name: 'Pillow', version: '6.0.0' } - - { name: 'psycopg2-binary', version: '2.8.3' } - - { name: 'pytz', version: '2019.1' } - - { name: 'troposphere', version: '1.8.1' } - - { name: 'majorkirby', version: '0.2.1' } - # Note: django-wpadmin is installed manually to work around the fact that ansible-pip - # ignores editable=False diff --git a/deployment/ansible/roles/cac-tripplanner.app/handlers/main.yml b/deployment/ansible/roles/cac-tripplanner.app/handlers/main.yml index b864a010e..ec6baed2c 100644 --- a/deployment/ansible/roles/cac-tripplanner.app/handlers/main.yml +++ b/deployment/ansible/roles/cac-tripplanner.app/handlers/main.yml @@ -1,6 +1,6 @@ --- - name: Restart cac-tripplanner-app - service: name=cac-tripplanner-app state=restarted + service: name=cac-tripplanner-app use=sysv state=restarted - name: Restart nginx - service: name=nginx state=restarted + service: name=nginx use=sysv state=restarted diff --git a/deployment/ansible/roles/cac-tripplanner.app/tasks/main.yml b/deployment/ansible/roles/cac-tripplanner.app/tasks/main.yml index c1bb8999f..3f94364d5 100644 --- a/deployment/ansible/roles/cac-tripplanner.app/tasks/main.yml +++ b/deployment/ansible/roles/cac-tripplanner.app/tasks/main.yml @@ -2,24 +2,23 @@ # # Note bzip2 only installed here as workaround for unresolved but closed phantomjs # install issue: https://github.com/Medium/phantomjs/issues/659 - name: Install packages - apt: name={{ item }} state=present - with_items: - - binutils - - bzip2 - - gdal-bin - - libpq-dev - - libproj-dev - - python-dev - - libjpeg-dev + apt: + state: present + pkg: + - binutils + - bzip2 + - gdal-bin + - libpq-dev + - libproj-dev + - python-dev + - python3-pip + - libjpeg-dev -- name: Install pip packages - pip: name={{ item.name }} version={{ item.version }} - with_items: "{{ cac_python_dependencies }}" +- name: Install pip packages to python3 for deployment + pip: requirements={{ root_app_dir }}/deployment_requirements.txt executable=/usr/bin/pip3 - # Putting 'editable: false' in the entry in cac_python_dependencies should make it install - # non-editable, but it's getting ignored -- name: Install django-wpadmin manually to work around ansible bug - command: pip install --upgrade 'git+https://github.com/azavea/django-wpadmin@v1.11#egg=django-wpadmin' +- name: Install pip packages + pip: requirements={{ root_app_dir }}/requirements.txt - name: Touch log file and set permissions file: path={{ app_log }} state=touch owner={{ app_username }} group={{ app_username }} mode=0664 @@ -41,25 +40,27 @@ - name: Write secrets file template: src=cac_secrets.j2 dest=/etc/cac_secrets when: develop or production - notify: Restart cac-tripplanner-app + notify: Restart {{ gunicorn_app_name }} - name: Configure Gunicorn settings template: src=gunicorn-cac-tripplanner.py.j2 dest={{ root_conf_dir }}/gunicorn.py - notify: Restart cac-tripplanner-app + notify: Restart {{ gunicorn_app_name }} - name: Configure service definition - template: src=upstart-cac-tripplanner-app.conf.j2 dest=/etc/init/cac-tripplanner-app.conf - notify: Restart cac-tripplanner-app + template: src=systemd-{{ gunicorn_app_name }}.conf.j2 + dest=/etc/systemd/system/{{ gunicorn_app_name }}.service + notify: Restart {{ gunicorn_app_name }} -- name: Run migrations - django_manage: command=migrate - app_path=/opt/app/python/cac_tripplanner - notify: Restart cac-tripplanner-app - when: develop or test +- name: Enable gunicorn service + systemd: + name: "{{ gunicorn_app_name }}.service" + enabled: yes + daemon_reload: yes -- name: Run collectstatic - django_manage: command=collectstatic - app_path=/opt/app/python/cac_tripplanner +- name: Enable nginx service + systemd: + name: "nginx.service" + enabled: yes - name: Copy media assets copy: src=../../python/cac_tripplanner/default_media @@ -68,6 +69,16 @@ group={{ app_username }} when: develop or test +- name: Run migrations + django_manage: command=migrate + app_path="{{ root_app_dir }}" + notify: Restart {{ gunicorn_app_name }} + when: develop or test + +- name: Run collectstatic + django_manage: command=collectstatic + app_path="{{ root_app_dir }}" + - name: Copy nginx config template: src=nginx-default.j2 dest=/etc/nginx/sites-available/default notify: Restart nginx diff --git a/deployment/ansible/roles/cac-tripplanner.app/templates/systemd-cac-tripplanner-app.conf.j2 b/deployment/ansible/roles/cac-tripplanner.app/templates/systemd-cac-tripplanner-app.conf.j2 new file mode 100644 index 000000000..f848c86dd --- /dev/null +++ b/deployment/ansible/roles/cac-tripplanner.app/templates/systemd-cac-tripplanner-app.conf.j2 @@ -0,0 +1,23 @@ +[Unit] +Description = {{ gunicorn_app_name }} +After = network-online.target + +[Service] +PermissionsStartOnly = true +User = {{ app_username }} +Group = {{ app_username }} +WorkingDirectory = {{ root_app_dir }} +ExecStart = /usr/bin/env gunicorn --config {{ root_conf_dir }}/gunicorn.py --timeout {{ otp_session_timeout_s }} cac_tripplanner.wsgi +ExecReload = /bin/kill -s HUP $MAINPID +ExecStop = /bin/kill -s TERM $MAINPID +PrivateTmp = true +StandardOutput = syslog +StandardError = syslog +SyslogIdentifier = {{ gunicorn_app_name }} + +[Install] +{% if develop or test -%} +WantedBy = opt-app.mount +{% else %} +WantedBy = network-online.target +{% endif %} diff --git a/deployment/ansible/roles/cac-tripplanner.app/templates/upstart-cac-tripplanner-app.conf.j2 b/deployment/ansible/roles/cac-tripplanner.app/templates/upstart-cac-tripplanner-app.conf.j2 deleted file mode 100644 index 387bc38ee..000000000 --- a/deployment/ansible/roles/cac-tripplanner.app/templates/upstart-cac-tripplanner-app.conf.j2 +++ /dev/null @@ -1,14 +0,0 @@ -description "Gunicorn upstart script for CAC Trip Planner" - -{% if develop or test -%} -start on (vagrant-mounted) -{% else %} -start on (local-filesystems and net-device-up IFACE!=lo) -{% endif %} -stop on shutdown - -respawn -setuid {{ app_username }} -chdir {{ root_app_dir }} - -exec gunicorn --config {{ root_conf_dir }}/gunicorn.py --timeout {{ otp_session_timeout_s }} cac_tripplanner.wsgi diff --git a/deployment/ansible/roles/cac-tripplanner.database/tasks/install-postgis-from-source.yml b/deployment/ansible/roles/cac-tripplanner.database/tasks/install-postgis-from-source.yml index d936603e9..4d1af4c74 100644 --- a/deployment/ansible/roles/cac-tripplanner.database/tasks/install-postgis-from-source.yml +++ b/deployment/ansible/roles/cac-tripplanner.database/tasks/install-postgis-from-source.yml @@ -1,17 +1,18 @@ --- - name: Install PostGIS build dependencies - apt: pkg="{{ item }}" state=present - with_items: - - build-essential - - libgeos-dev - - libgdal-dev - - libproj-dev - - libjson0-dev - - libxml2-dev - - libxml2-utils - - xsltproc - - docbook-xsl - - docbook-mathml + apt: + state: present + pkg: + - build-essential + - libgeos-dev + - libgdal-dev + - libproj-dev + - libjson0-dev + - libxml2-dev + - libxml2-utils + - xsltproc + - docbook-xsl + - docbook-mathml - name: Download PostGIS source tarball unarchive: | diff --git a/deployment/ansible/roles/cac-tripplanner.otp-data/tasks/main.yml b/deployment/ansible/roles/cac-tripplanner.otp-data/tasks/main.yml index d0a290708..06c0d8511 100644 --- a/deployment/ansible/roles/cac-tripplanner.otp-data/tasks/main.yml +++ b/deployment/ansible/roles/cac-tripplanner.otp-data/tasks/main.yml @@ -14,8 +14,15 @@ - name: Change owner and mode of byport file file: path=/etc/authbind/byport/80 owner={{ otp_user }} mode=0755 -- name: Overwrite upstart service - template: src=otp.conf.j2 dest=/etc/init/otp.conf +- name: Overwrite systemd service + template: src=otp.service.j2 dest=/etc/systemd/system/otp.service + register: otpconf + +- name: Reload systemd + shell: systemctl daemon-reload + when: otpconf.changed + notify: + - Restart OpenTripPlanner - name: Create data directory (test) file: path=./otp_data/ owner={{ansible_user_id}} group={{ansible_user_id}} mode=0664 state=directory @@ -43,7 +50,7 @@ when: test or (develop and not graph.stat.exists) - name: Copy Built OTP Graph to Host (develop) - when: develop and graph_build|changed + when: develop and graph_build is changed synchronize: mode: pull src: "{{ otp_data_dir }}/Graph.obj" diff --git a/deployment/ansible/roles/cac-tripplanner.otp-data/templates/otp.conf.j2 b/deployment/ansible/roles/cac-tripplanner.otp-data/templates/otp.conf.j2 deleted file mode 100644 index 0c21e1576..000000000 --- a/deployment/ansible/roles/cac-tripplanner.otp-data/templates/otp.conf.j2 +++ /dev/null @@ -1,14 +0,0 @@ -## NOTICE: This file is written by ansible, and any changes made here will be overwritten on next provision. -# Modify cac-tripplanner.otp-data/templates/otp.conf.j2 to make changes stick. -description "OpenTripPlanner" - -start on {{ otp_upstart_start_on }} -stop on shutdown - -respawn -setuid {{ otp_user }} -chdir {{ otp_bin_dir }} - -script - exec /usr/bin/authbind /usr/bin/java -Xmx{{otp_process_mem}} -jar {{ otp_bin_dir }}/{{ otp_jar_name }} --server --analyst --port 80 --basePath {{ otp_data_dir}} --graphs {{ otp_data_dir }} --router default -end script diff --git a/deployment/ansible/roles/cac-tripplanner.otp-data/templates/otp.service.j2 b/deployment/ansible/roles/cac-tripplanner.otp-data/templates/otp.service.j2 new file mode 100644 index 000000000..00d898c90 --- /dev/null +++ b/deployment/ansible/roles/cac-tripplanner.otp-data/templates/otp.service.j2 @@ -0,0 +1,17 @@ +## NOTICE: This file is written by ansible, and any changes made here will be overwritten on +# next provision. +# Modify azavea.opentripplanner/templates/otp.service.j2 to make changes stick. + +[Unit] +Description=Start OpenTripPlanner process +After={{ otp_service_after }} + +[Service] +Type=simple +User={{ otp_user }} +WorkingDirectory={{ otp_bin_dir }} +Restart=on-failure +ExecStart=/usr/bin/authbind /usr/bin/java -Xmx{{otp_process_mem}} -jar {{ otp_bin_dir }}/{{ otp_jar_name }} --server --analyst --port 80 --basePath {{ otp_data_dir}} --graphs {{ otp_data_dir }} --router default + +[Install] +WantedBy={{ otp_service_wantedby }} diff --git a/deployment/ansible/roles/cac-tripplanner.transitfeed/meta/main.yml b/deployment/ansible/roles/cac-tripplanner.transitfeed/meta/main.yml index d7ee68014..f45b16e16 100644 --- a/deployment/ansible/roles/cac-tripplanner.transitfeed/meta/main.yml +++ b/deployment/ansible/roles/cac-tripplanner.transitfeed/meta/main.yml @@ -1,4 +1,5 @@ --- dependencies: + - { role: "azavea.python", python_development: True } - { role: "azavea.pip" } - { role: "azavea.git" } diff --git a/deployment/ansible/roles/cac-tripplanner.transitfeed/tasks/main.yml b/deployment/ansible/roles/cac-tripplanner.transitfeed/tasks/main.yml index 57645fca1..6bda05223 100644 --- a/deployment/ansible/roles/cac-tripplanner.transitfeed/tasks/main.yml +++ b/deployment/ansible/roles/cac-tripplanner.transitfeed/tasks/main.yml @@ -1,6 +1,10 @@ --- - name: Install pytz - pip: name=pytz + pip: + name: pytz + executable: pip2 - name: Install transitfeed - pip: name='git+https://github.com/google/transitfeed@1.2.15#egg=transitfeed' + pip: + name: 'git+https://github.com/google/transitfeed@1.2.15#egg=transitfeed' + executable: pip2 diff --git a/deployment/auth.py b/deployment/auth.py index 585d7849a..7f488e612 100755 --- a/deployment/auth.py +++ b/deployment/auth.py @@ -7,6 +7,7 @@ class AuthException(Exception): pass + BOTO_CONFIG_TEMPLATE = """ [default] aws_access_key_id = {aws_access_key_id} @@ -26,7 +27,7 @@ def get_creds(aws_access_key_id, aws_secret_access_key, aws_role_arn): "aws_secret_access_key": aws_secret_access_key} iam_conn = boto.connect_iam(**aws_config) sts_conn = boto.connect_sts(**aws_config) - username = raw_input('Please provide AWS username: ') + username = input('Please provide AWS username: ') mfa_devices = (iam_conn.get_all_mfa_devices(username) ['list_mfa_devices_response'] ['list_mfa_devices_result'] @@ -39,7 +40,7 @@ def get_creds(aws_access_key_id, aws_secret_access_key, aws_role_arn): raise AuthException('Must have MFA device to get temporary credentials') mfa_serial_number = mfa_devices[0]['serial_number'] - mfa_token = raw_input('Please enter your 6 digit MFA token: ') + mfa_token = input('Please enter your 6 digit MFA token: ') assumed_role = sts_conn.assume_role( role_arn=aws_role_arn, @@ -68,7 +69,7 @@ def write_creds(creds, force): if os.path.isfile(boto_config_path) and not force: raise AuthException('Must use --force option to replace existing boto config') - with open(boto_config_path, 'wb') as fh: + with open(boto_config_path, 'w') as fh: boto_config = BOTO_CONFIG_TEMPLATE.format( aws_access_key_id=creds['aws_access_key_id'], aws_secret_access_key=creds['aws_secret_access_key'], diff --git a/deployment/cac-stack.py b/deployment/cac-stack.py index bd1132c6a..1b539b03c 100755 --- a/deployment/cac-stack.py +++ b/deployment/cac-stack.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """Commands for building AMIs and setting up CAC TripPlanner stacks on AWS""" import argparse @@ -65,7 +65,7 @@ def main(): # There is a bug in Packer that makes it so the only way to successfully build # an AMI using MFA tokens is to not have the ~/.aws/credentials file, and instead # specify the parameters via environment variables. - print "Please delete your ~/.aws/credentials and try again" + print("Please delete your ~/.aws/credentials and try again") sys.exit(1) parser = argparse.ArgumentParser() diff --git a/deployment/cloudformation/app.py b/deployment/cloudformation/app.py index d5a164831..99f7a08c6 100644 --- a/deployment/cloudformation/app.py +++ b/deployment/cloudformation/app.py @@ -15,8 +15,8 @@ import troposphere.elasticloadbalancing as elb import troposphere.cloudwatch as cw -from utils.cfn import get_availability_zones -from utils.constants import ( +from .utils.cfn import get_availability_zones +from .utils.constants import ( ALLOW_ALL_CIDR, EC2_INSTANCE_TYPES, VPC_CIDR, diff --git a/deployment/cloudformation/data.py b/deployment/cloudformation/data.py index 71a33a3db..92588b024 100644 --- a/deployment/cloudformation/data.py +++ b/deployment/cloudformation/data.py @@ -11,7 +11,7 @@ route53 ) -from utils.constants import RDS_INSTANCE_TYPES +from .utils.constants import RDS_INSTANCE_TYPES from majorkirby import StackNode diff --git a/deployment/cloudformation/stacks.py b/deployment/cloudformation/stacks.py index 41302a7cc..09a26354a 100644 --- a/deployment/cloudformation/stacks.py +++ b/deployment/cloudformation/stacks.py @@ -1,12 +1,12 @@ from majorkirby import GlobalConfigNode -from vpc import VPC -from data import DataPlaneGenerator -from app import ( +from .vpc import VPC +from .data import DataPlaneGenerator +from .app import ( OtpServerStack, WebServerStack ) -from privatehostedzone import R53PrivateHostedZone +from .privatehostedzone import R53PrivateHostedZone stack_types = { diff --git a/deployment/cloudformation/template_utils.py b/deployment/cloudformation/template_utils.py index 70d833b7e..07fe27c61 100644 --- a/deployment/cloudformation/template_utils.py +++ b/deployment/cloudformation/template_utils.py @@ -1,4 +1,4 @@ -import ConfigParser +import configparser def read_file(file_name): @@ -18,7 +18,7 @@ def get_config(cac_config_path, profile): :param cac_config_path: Path to the config file :param profile: Config profile to read """ - cac_config = ConfigParser.ConfigParser() + cac_config = configparser.ConfigParser() cac_config.optionxform = str cac_config.read(cac_config_path) return {k: v.strip('"').strip("'") for k, v in cac_config.items(profile)} diff --git a/deployment/cloudformation/vpc.py b/deployment/cloudformation/vpc.py index d15bd4531..8c1496c74 100644 --- a/deployment/cloudformation/vpc.py +++ b/deployment/cloudformation/vpc.py @@ -9,8 +9,8 @@ Join ) -from utils.cfn import get_availability_zones -from utils.constants import ( +from .utils.cfn import get_availability_zones +from .utils.constants import ( ALLOW_ALL_CIDR, EC2_INSTANCE_TYPES, GRAPHITE_PORT, @@ -141,10 +141,10 @@ def set_up_stack(self): Value=','.join(self.default_app_server_azs))) self.add_output(Output('DefaultAppServerPrivateSubnets', Description='List of subnet ids for App Servers', - Value=Join(',', map(Ref, self.default_app_server_private_subnets)))) + Value=Join(',', list(map(Ref, self.default_app_server_private_subnets))))) self.add_output(Output('DefaultAppServerPublicSubnets', Description='List of Subnet Ids for App servers', - Value=Join(',', map(Ref, self.default_app_server_public_subnets)))) + Value=Join(',', list(map(Ref, self.default_app_server_public_subnets))))) def create_vpc(self): """Creates a VPC template and returns the JSON string for that CloudFormation Template @@ -228,7 +228,7 @@ def create_subnets(self, public_route_table): public_subnet = self.create_resource(ec2.Subnet( public_subnet_name, VpcId=Ref(self.vpc), - CidrBlock=cidr_generator.next(), + CidrBlock=next(cidr_generator), AvailabilityZone=availability_zone.name, Tags=self.get_tags(Name=public_subnet_name) ), output=public_subnet_name) @@ -243,7 +243,7 @@ def create_subnets(self, public_route_table): private_subnet = self.create_resource(ec2.Subnet( private_subnet_name, VpcId=Ref(self.vpc), - CidrBlock=cidr_generator.next(), + CidrBlock=next(cidr_generator), AvailabilityZone=availability_zone.name, Tags=self.get_tags(Name=private_subnet_name) ), output=private_subnet_name) diff --git a/deployment/packer/cac_packer.py b/deployment/packer/cac_packer.py index 0dcd7cee5..fb8b906dc 100644 --- a/deployment/packer/cac_packer.py +++ b/deployment/packer/cac_packer.py @@ -1,10 +1,10 @@ """Helper stuff to deal with packer""" +import csv import os import subprocess import shutil - -from boto import ec2 +import urllib.request as urllib CANONICAL_ACCOUNT_ID = '099720109477' @@ -21,19 +21,25 @@ def get_ubuntu_ami(region, creds): creds (Dict): Dictionary containing AWS credentials """ - conn = ec2.connect_to_region(region, **creds) - amis = conn.get_all_images(owners=[CANONICAL_ACCOUNT_ID], filters={ - 'name': 'ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*', - 'architecture': 'x86_64', - 'root-device-type': 'ebs', - 'virtualization-type': 'hvm', - }) - - amis = sorted(amis, key=lambda ami: ami.creationDate, reverse=True) - + response = urllib.urlopen('http://cloud-images.ubuntu.com/query/xenial/' + 'server/released.current.txt').readlines() + response = [x.decode('utf-8') for x in response] + fieldnames = ['version', 'version_type', 'release_status', 'date', + 'storage', 'arch', 'region', 'id', 'kernel', + 'unknown_col', 'virtualization_type'] + reader = csv.DictReader(response, fieldnames=fieldnames, delimiter='\t') + + def ami_filter(ami): + """Helper function to filter AMIs""" + return (ami['region'] == region and + ami['arch'] == 'amd64' and + ami['storage'] == 'ebs-ssd' and + ami['virtualization_type'] == 'hvm') + + amis = [row for row in reader if ami_filter(row)] if len(amis) == 0: raise CacStackException('Did not find any ubuntu AMIs to use') - return amis[0].id + return amis[0]['id'] def run_packer(machine_type, region, creds, aws_config): @@ -51,7 +57,7 @@ def run_packer(machine_type, region, creds, aws_config): examples_path = os.path.join(ansible_roles_path, role_path, 'examples') if role_path.startswith('azavea') and os.path.isdir(examples_path): - print('Removing {}'.format(examples_path)) + print(('Removing {}'.format(examples_path))) shutil.rmtree(examples_path) env = os.environ.copy() @@ -73,5 +79,5 @@ def run_packer(machine_type, region, creds, aws_config): packer_command.append(packer_template_path) - print 'Running Packer Command: {}'.format(' '.join(packer_command)) - subprocess.check_call(packer_command, env=env) \ No newline at end of file + print('Running Packer Command: {}'.format(' '.join(packer_command))) + subprocess.check_call(packer_command, env=env) diff --git a/python/cac_tripplanner/cms/migrations/0015_prepopulate_articles.py b/python/cac_tripplanner/cms/migrations/0015_prepopulate_articles.py new file mode 100644 index 000000000..39428b1ad --- /dev/null +++ b/python/cac_tripplanner/cms/migrations/0015_prepopulate_articles.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.21 on 2019-07-16 15:40 +from __future__ import unicode_literals + +from datetime import datetime +import os +import re +from shutil import copytree + +from django.conf import settings +from django.contrib.auth.models import User +from django.db import models, migrations + + +ALPHANUMERIC_ONLY = re.compile('\W+') +DEST_DIRECTORY = os.path.join(settings.MEDIA_ROOT, settings.DEFAULT_MEDIA_PATH) + + +def get_image_path(half_height, location_name): + """ Create image path, use alphanumeric name of the destination as the image filename """ + height_dir = 'half-square' if half_height else 'square' + filename = ALPHANUMERIC_ONLY.sub('', location_name) + '.jpg' + return os.path.join(settings.DEFAULT_MEDIA_PATH, height_dir, filename) + + +def get_sample_articles(): + articles = [ + { + 'title': 'Video Trip to Palmyra Cove', + 'slug': 'video-trip-to-palmyra-cove', + 'content_type': 'prof', + 'publish_date': datetime.now(), + 'teaser': 'GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park.', + 'content': '

GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike at City Hall in Philadelphia, traveled over the Benjamin Franklin Bridge, hopped on the NJ River Line, and arrived at Palmyra Cove Nature Park in Palmyra, NJ. Aside from the beautiful views along the shoreline, Palmyra Cove is a 250-acre urban oasis along the Delaware River. Visit today to see wetlands, woodlands, meadows, wild creek, and a freshwater Tidal Cove. 

 

Plan a trip today and #GoPhillyGo!

', + }, + ] + for article in articles: + narrow = get_image_path(False, article['title']) + wide = get_image_path(True, article['title']) + article['narrow_image_raw'] = narrow + article['wide_image_raw'] = wide + return articles + + +def copy_default_images(): + """ Copy images to proper media dir """ + try: + copytree(settings.DEFAULT_MEDIA_SRC_PATH, DEST_DIRECTORY) + except OSError as e: + # file exists error, rmtree is dumb and we can only copy to an empty directory + if e[0] != 17: + raise + + +def add_sample_articles(apps, schema_editor): + """ Add sample articles, and copy the images to the media dir """ + + # Only run in development + if not settings.DEBUG: + return + + copy_default_images() + + admin = User.objects.get(username='admin') + + Article = apps.get_model('CMS', 'Article') + for article in get_sample_articles(): + article['author_id'] = admin.id + sample_article = Article(**article) + sample_article.save() + + +def delete_sample_articles(apps, schema_editor): + """ Delete default articles """ + + # Only run in development + if not settings.DEBUG: + return + + Article = apps.get_model('CMS', 'Article') + for article in get_sample_articles(): + try: + sample_articles = Article.objects.filter(title=article['title']) + sample_articles.delete() + except Article.DoesNotExist: + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('CMS', '0014_auto_20180601_1121'), + ] + + operations = [ + migrations.RunPython(add_sample_articles, delete_sample_articles), + ] diff --git a/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_1.jpg b/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_1.jpg new file mode 100644 index 000000000..fda089789 Binary files /dev/null and b/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_1.jpg differ diff --git a/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_2.jpg b/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_2.jpg new file mode 100644 index 000000000..29047769e Binary files /dev/null and b/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_2.jpg differ diff --git a/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_3.jpg b/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_3.jpg new file mode 100644 index 000000000..9f0265658 Binary files /dev/null and b/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_3.jpg differ diff --git a/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_4.jpg b/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_4.jpg new file mode 100644 index 000000000..2841851fb Binary files /dev/null and b/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_4.jpg differ diff --git a/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_5.jpg b/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_5.jpg new file mode 100644 index 000000000..512aeaa53 Binary files /dev/null and b/python/cac_tripplanner/default_media/events/CrazyPhiladelphiaEddie_5.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/BartramsGarden_1.jpg b/python/cac_tripplanner/default_media/extras/BartramsGarden_1.jpg new file mode 100644 index 000000000..7fbddf8ab Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/BartramsGarden_1.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/BartramsGarden_10.jpg b/python/cac_tripplanner/default_media/extras/BartramsGarden_10.jpg new file mode 100644 index 000000000..3f7af8860 Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/BartramsGarden_10.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/BartramsGarden_11.jpg b/python/cac_tripplanner/default_media/extras/BartramsGarden_11.jpg new file mode 100644 index 000000000..db32fd2a6 Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/BartramsGarden_11.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/BartramsGarden_2.jpg b/python/cac_tripplanner/default_media/extras/BartramsGarden_2.jpg new file mode 100644 index 000000000..79ad21bce Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/BartramsGarden_2.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/BartramsGarden_3.jpg b/python/cac_tripplanner/default_media/extras/BartramsGarden_3.jpg new file mode 100644 index 000000000..64a2df685 Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/BartramsGarden_3.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/BartramsGarden_4.jpg b/python/cac_tripplanner/default_media/extras/BartramsGarden_4.jpg new file mode 100644 index 000000000..2dff30225 Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/BartramsGarden_4.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/BartramsGarden_5.jpg b/python/cac_tripplanner/default_media/extras/BartramsGarden_5.jpg new file mode 100644 index 000000000..d4be8f8f0 Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/BartramsGarden_5.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/BartramsGarden_6.jpg b/python/cac_tripplanner/default_media/extras/BartramsGarden_6.jpg new file mode 100644 index 000000000..e3ced7005 Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/BartramsGarden_6.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/BartramsGarden_7.jpg b/python/cac_tripplanner/default_media/extras/BartramsGarden_7.jpg new file mode 100644 index 000000000..12d8dbd98 Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/BartramsGarden_7.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/BartramsGarden_8.jpg b/python/cac_tripplanner/default_media/extras/BartramsGarden_8.jpg new file mode 100644 index 000000000..715c86e78 Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/BartramsGarden_8.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/BartramsGarden_9.jpg b/python/cac_tripplanner/default_media/extras/BartramsGarden_9.jpg new file mode 100644 index 000000000..06b71a49c Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/BartramsGarden_9.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_1.jpg b/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_1.jpg new file mode 100644 index 000000000..ce3f44588 Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_1.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_2.jpg b/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_2.jpg new file mode 100644 index 000000000..b0667072f Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_2.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_3.jpg b/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_3.jpg new file mode 100644 index 000000000..a745ba9a0 Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_3.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_4.jpg b/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_4.jpg new file mode 100644 index 000000000..f7bfc9ad4 Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_4.jpg differ diff --git a/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_5.jpg b/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_5.jpg new file mode 100644 index 000000000..263ed6b1e Binary files /dev/null and b/python/cac_tripplanner/default_media/extras/JohnHeinzNationalWildlifeRefuge_5.jpg differ diff --git a/python/cac_tripplanner/default_media/half-square/VideoTriptoPalmyraCove.jpg b/python/cac_tripplanner/default_media/half-square/VideoTriptoPalmyraCove.jpg new file mode 100644 index 000000000..f9124c7c0 Binary files /dev/null and b/python/cac_tripplanner/default_media/half-square/VideoTriptoPalmyraCove.jpg differ diff --git a/python/cac_tripplanner/default_media/square/VideoTriptoPalmyraCove.jpg b/python/cac_tripplanner/default_media/square/VideoTriptoPalmyraCove.jpg new file mode 100644 index 000000000..a18dd3886 Binary files /dev/null and b/python/cac_tripplanner/default_media/square/VideoTriptoPalmyraCove.jpg differ diff --git a/python/cac_tripplanner/deployment_requirements.txt b/python/cac_tripplanner/deployment_requirements.txt new file mode 100644 index 000000000..0f1aff69e --- /dev/null +++ b/python/cac_tripplanner/deployment_requirements.txt @@ -0,0 +1,5 @@ +boto==2.49.0 +PyYAML==5.1.1 +requests==2.22.0 +troposphere==2.5.0 +majorkirby==1.0.0 diff --git a/python/cac_tripplanner/destinations/migrations/0045_prepopulate_multiple_images.py b/python/cac_tripplanner/destinations/migrations/0045_prepopulate_multiple_images.py new file mode 100644 index 000000000..e1ef8d9b3 --- /dev/null +++ b/python/cac_tripplanner/destinations/migrations/0045_prepopulate_multiple_images.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.21 on 2019-07-15 15:07 +from __future__ import unicode_literals +import glob +import os +import re +from shutil import copytree, rmtree + +from django.conf import settings +from django.db import models, migrations + + +ALPHANUMERIC_ONLY = re.compile('\W+') +EXTRAS_PATH = 'extras' +DEST_DIRECTORY = os.path.join(settings.MEDIA_ROOT, settings.DEFAULT_MEDIA_PATH, EXTRAS_PATH) +SRC_DIRECTORY = os.path.join(settings.DEFAULT_MEDIA_SRC_PATH, EXTRAS_PATH) + + +def get_image_paths(location_name): + """ Create image path, use alphanumeric name of the destination as the image filename """ + filename_glob = ALPHANUMERIC_ONLY.sub('', location_name) + '*.jpg' + extras_path = os.path.join(settings.DEFAULT_MEDIA_PATH, EXTRAS_PATH, filename_glob) + return glob.glob(extras_path) + + +def get_sample_destinations(): + return [ + { + 'name': 'Bartram\'s Garden', + }, + { + 'name': 'John Heinz National Wildlife Refuge', + }, + ] + + +def copy_default_images(): + """ Copy images to proper media dir """ + try: + copytree(SRC_DIRECTORY, DEST_DIRECTORY) + except OSError as e: + # file exists error, rmtree is dumb and we can only copy to an empty directory + if e[0] != 17: + raise + + +def add_sample_images(apps, schema_editor): + """ Add sample images to default destinations, and copy the images to the media dir """ + + # Only run in development + if not settings.DEBUG: + return + + copy_default_images() + + Destination = apps.get_model('destinations', 'Destination') + for destination in get_sample_destinations(): + sample_dest = Destination.objects.filter(name=destination['name']).first() + paths = get_image_paths(destination['name']) + for path in paths: + extra = sample_dest.extradestinationpicture_set.create() + extra.image_raw = path + extra.save() + sample_dest.extradestinationpicture_set.add(extra) + sample_dest.save() + + +def delete_sample_images(apps, schema_editor): + """ Delete default destination images and delete default image dir """ + + # Only run in development + if not settings.DEBUG: + return + + Destination = apps.get_model('destinations', 'Destination') + for destination in get_sample_destinations(): + try: + sample_dest = Destination.objects.filter(name=destination['name']).first() + sample_dest.extradestinationpicture_set.all().delete() + sample_dest.save() + except Destination.DoesNotExist: + pass + + # last delete the images in the media dir + rmtree(DEST_DIRECTORY, True) + + +class Migration(migrations.Migration): + + dependencies = [ + ('destinations', '0044_auto_20180531_1339'), + ] + + operations = [ + migrations.RunPython(add_sample_images, delete_sample_images), + ] diff --git a/python/cac_tripplanner/destinations/migrations/0046_prepopulate_events.py b/python/cac_tripplanner/destinations/migrations/0046_prepopulate_events.py new file mode 100644 index 000000000..73511fb58 --- /dev/null +++ b/python/cac_tripplanner/destinations/migrations/0046_prepopulate_events.py @@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.21 on 2019-07-15 18:23 +from __future__ import unicode_literals + +from datetime import datetime, timedelta +import glob +import os +import re +from shutil import copytree, rmtree + +from django.conf import settings +from django.db import migrations + + +ALPHANUMERIC_ONLY = re.compile('\W+') +EVENTS_PATH = 'events' +DEST_DIRECTORY = os.path.join(settings.MEDIA_ROOT, settings.DEFAULT_MEDIA_PATH, EVENTS_PATH) +SRC_DIRECTORY = os.path.join(settings.DEFAULT_MEDIA_SRC_PATH, EVENTS_PATH) + + +def get_image_paths(location_name): + """ Create image path, use alphanumeric name of the destination as the image filename """ + filename_glob = ALPHANUMERIC_ONLY.sub('', location_name) + '*.jpg' + events_path = os.path.join(settings.DEFAULT_MEDIA_PATH, EVENTS_PATH, filename_glob) + return glob.glob(events_path) + + +def get_sample_events(): + return [ + { + 'id': 999, + 'name': 'Crazy Philadelphia Eddie', + 'website_url': 'http://www.phillyseaport.org/Eddie', + 'description': '

Eddie was crazy before crazy was cool. From Brooklyn's Coney Island to the counterculture of 1960s South Street in Philadelphia, Eddie Funk fought to make a name for himself, protect the freedoms of tattoo artists, and share his legacy with the world. Discover Eddie's influence in this limited engagement exhibit, featuring rare flash, personal mementos, and other authentic memorabilia seldom put on public display.

', + 'published': True, + 'accessible': True, + 'start_date': datetime.now(), + 'end_date': datetime.now() + timedelta(days=365) + }, + ] + + +def copy_default_images(): + """ Copy images to proper media dir """ + try: + copytree(SRC_DIRECTORY, DEST_DIRECTORY) + except OSError as e: + # file exists error, rmtree is dumb and we can only copy to an empty directory + if e[0] != 17: + raise + + +def add_sample_events(apps, schema_editor): + """ Add sample images to default destinations, and copy the images to the media dir """ + + # Only run in development + if not settings.DEBUG: + return + + copy_default_images() + + Destination = apps.get_model('destinations', 'Destination') + Event = apps.get_model('destinations', 'Event') + for event in get_sample_events(): + event_destination = Destination.objects.get(name='Independence Seaport Museum') + event['destination'] = event_destination + sample_event = Event.objects.filter(name=event['name']).first() + if not sample_event: + sample_event = Event(**event) + sample_event.save() + paths = get_image_paths(event['name']) + sample_event = Event.objects.filter(name=event['name']).first() + image = paths.pop() + image_wide = paths.pop() + sample_event.image = image + sample_event.image_raw = image + sample_event.wide_image = image_wide + sample_event.wide_image_raw = image_wide + for path in paths: + extra = sample_event.extraeventpicture_set.create() + extra.image_raw = path + extra.save() + sample_event.extraeventpicture_set.add(extra) + sample_event.save() + + +def delete_sample_events(apps, schema_editor): + + # Only run in development + if not settings.DEBUG: + return + + Event = apps.get_model('destinations', 'Event') + for event in get_sample_events(): + try: + sample_event = Event.objects.filter(name=event['name']).first() + if sample_event: + sample_event.extraeventpicture_set.all().delete() + sample_event.save() + except Event.DoesNotExist: + pass + + # last delete the images in the media dir + rmtree(DEST_DIRECTORY, True) + + +class Migration(migrations.Migration): + + dependencies = [ + ('destinations', '0045_prepopulate_multiple_images'), + ] + + operations = [ + migrations.RunPython(add_sample_events, delete_sample_events), + ] diff --git a/python/cac_tripplanner/requirements.txt b/python/cac_tripplanner/requirements.txt new file mode 100644 index 000000000..e23d23024 --- /dev/null +++ b/python/cac_tripplanner/requirements.txt @@ -0,0 +1,15 @@ +base58==1.0.3 +boto==2.49.0 +Django==1.11.22 +django-ckeditor==5.7.1 +django-image-cropping==1.2.0 +django-extensions==1.9.9 +django-storages==1.7.1 +easy-thumbnails==2.6.0 +gunicorn==19.9.0 +Pillow==6.1.0 +psycopg2-binary==2.8.3 +pytz==2019.1 +PyYAML==5.1.1 +requests==2.22.0 +git+https://github.com/azavea/django-wpadmin@v1.11#egg=django-wpadmin diff --git a/python/cac_tripplanner/templates/event-detail.html b/python/cac_tripplanner/templates/event-detail.html index 7fc37ce0a..dc3ea9deb 100644 --- a/python/cac_tripplanner/templates/event-detail.html +++ b/python/cac_tripplanner/templates/event-detail.html @@ -53,6 +53,7 @@

More great events around Philly

{%block jspage %} {% endblock %} diff --git a/python/cac_tripplanner/templates/partials/event-detail.html b/python/cac_tripplanner/templates/partials/event-detail.html index 82fae6ff8..620cf62a5 100644 --- a/python/cac_tripplanner/templates/partials/event-detail.html +++ b/python/cac_tripplanner/templates/partials/event-detail.html @@ -7,7 +7,7 @@ {% if event.extraeventpicture_set.exists %} {% endif %}
diff --git a/python/cac_tripplanner/templates/place-detail.html b/python/cac_tripplanner/templates/place-detail.html index 56b155036..18db79aff 100644 --- a/python/cac_tripplanner/templates/place-detail.html +++ b/python/cac_tripplanner/templates/place-detail.html @@ -53,6 +53,7 @@

More great, green places around Philly

{%block jspage %} {% endblock %} diff --git a/src/app/scripts/cac/map/cac-map-overlays.js b/src/app/scripts/cac/map/cac-map-overlays.js index 3195862cc..c626d5ba1 100644 --- a/src/app/scripts/cac/map/cac-map-overlays.js +++ b/src/app/scripts/cac/map/cac-map-overlays.js @@ -26,7 +26,7 @@ CAC.Map.OverlaysControl = (function ($, cartodb, L, Utils) { bikeShareFeatureGroup = cartodb.L.featureGroup([]); $.ajax({ contentType: 'application/json', - url: 'https://www.rideindego.com/stations/json/', + url: 'https://api.phila.gov/bike-share-stations/v1', success: function (data) { $.each(data.features, function (i, share) { bikeShareFeatureGroup.addLayer(getBikeShareMarker(share)); diff --git a/src/gulpfile.js b/src/gulpfile.js index a35f555ac..47e48ea95 100644 --- a/src/gulpfile.js +++ b/src/gulpfile.js @@ -192,7 +192,6 @@ gulp.task('copy:vendor-css', function() { 'node_modules/spinkit/css/spinkit.css']) .pipe(concat('vendor.css')) .pipe(autoprefixer({ - browsers: ['last 2 versions'], cascade: false })) .pipe(gulp.dest(stat.styles)); @@ -248,7 +247,7 @@ gulp.task('sass', function () { .pipe(plumber()) .pipe(sass({outputStyle: 'expanded'}).on('error', sass.logError)) .pipe(filterCSS) - .pipe(autoprefixer({browsers: ['last 2 versions'], cascade: false})) + .pipe(autoprefixer({cascade: false})) .pipe(filterCSS.restore) .pipe(gulp.dest(stat.styles)); }); diff --git a/src/package-lock.json b/src/package-lock.json index 6ca7e3ccc..8b777f188 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -3,23 +3,23 @@ "lockfileVersion": 1, "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.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "dev": true, "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", "dev": true, "requires": { - "@babel/types": "^7.4.4", + "@babel/types": "^7.5.5", "jsesc": "^2.5.1", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "source-map": "^0.5.0", "trim-right": "^1.0.1" }, @@ -62,9 +62,9 @@ } }, "@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.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -73,15 +73,15 @@ } }, "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==", "dev": true }, "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", "dev": true, "requires": { "regenerator-runtime": "^0.13.2" @@ -99,20 +99,20 @@ } }, "@babel/traverse": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", - "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", "@babel/helper-function-name": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/types": "^7.4.4", + "@babel/parser": "^7.5.5", + "@babel/types": "^7.5.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" }, "dependencies": { "debug": { @@ -133,13 +133,13 @@ } }, "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, @@ -153,12 +153,32 @@ "glob-to-regexp": "^0.3.0" } }, + "@nodelib/fs.scandir": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.1.tgz", + "integrity": "sha512-NT/skIZjgotDSiXs0WqYhgcuBKhUMgfekCmCGtkUAiLqZdOnrdjmZr9wRl3ll64J9NF79uZ4fk16Dx0yMc/Xbg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.1", + "run-parallel": "^1.1.9" + } + }, "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.1.tgz", + "integrity": "sha512-+RqhBlLn6YRBGOIoVYthsG0J9dfpO79eJyN7BYBkZJtfqrBwf2KK+rD/M/yjZR6WBmIhAgOV7S60eCgaSWtbFw==", "dev": true }, + "@nodelib/fs.walk": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.2.tgz", + "integrity": "sha512-J/DR3+W12uCzAJkw7niXDcqcKBg6+5G5Q/ZpThpGNzAUz70eOR6RV4XnnSN01qHZiVl0eavoxJsBypQoKsV2QQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.1", + "fastq": "^1.6.0" + } + }, "@sindresorhus/is": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", @@ -283,9 +303,9 @@ "dev": true }, "@types/node": { - "version": "12.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz", - "integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==", + "version": "12.6.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz", + "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==", "dev": true }, "@types/q": { @@ -322,9 +342,9 @@ } }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", + "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", "dev": true }, "acorn-dynamic-import": { @@ -346,9 +366,9 @@ } }, "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", "dev": true }, "after": { @@ -358,9 +378,9 @@ "dev": true }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -449,6 +469,111 @@ "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "apache-server-configs": { @@ -665,13 +790,10 @@ } }, "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true }, "array-uniq": { "version": "1.0.3", @@ -763,12 +885,12 @@ "dev": true }, "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "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.11" + "lodash": "^4.17.14" } }, "async-done": { @@ -823,18 +945,18 @@ "dev": true }, "autoprefixer": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.0.tgz", - "integrity": "sha512-kuip9YilBqhirhHEGHaBTZKXL//xxGnzvsD0FtBQa6z+A69qZD6s/BAX9VzDF1i9VKDquTJDQaPLSEhOnL6FvQ==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", + "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", "dev": true, "requires": { - "browserslist": "^4.6.1", - "caniuse-lite": "^1.0.30000971", + "browserslist": "^4.6.3", + "caniuse-lite": "^1.0.30000980", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.16", - "postcss-value-parser": "^3.3.1" + "postcss": "^7.0.17", + "postcss-value-parser": "^4.0.0" } }, "aws-sign2": { @@ -1185,6 +1307,13 @@ "p-finally": "^1.0.0" } }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true + }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", @@ -1297,32 +1426,12 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "fill-range": "^7.0.1" } }, "brorand": { @@ -1369,9 +1478,9 @@ "dev": true }, "browserify": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz", - "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==", + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.3.0.tgz", + "integrity": "sha512-BWaaD7alyGZVEBBwSTYx4iJF5DswIGzK17o8ai9w4iKRbYpk3EOiprRHMRRA8DCZFmFeOdx7A385w2XdFvxWmg==", "dev": true, "requires": { "JSONStream": "^1.0.3", @@ -1506,14 +1615,14 @@ } }, "browserslist": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.3.tgz", - "integrity": "sha512-CNBqTCq22RKM8wKJNowcqihHJ4SkI8CGeK7KOR9tPboXUuS5Zk5lQgzzTbs4oxD8x+6HUshZUa2OyNI9lR93bQ==", + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000975", - "electron-to-chromium": "^1.3.164", - "node-releases": "^1.1.23" + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" } }, "buffer": { @@ -1675,6 +1784,12 @@ "pify": "^4.0.1", "semver": "^5.6.0" } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true } } }, @@ -1724,9 +1839,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000978", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000978.tgz", - "integrity": "sha512-H6gK6kxUzG6oAwg/Jal279z8pHw0BzrpZfwo/CA9FFm/vA0l8IhDfkZtepyJNE2Y4V6Dp3P3ubz6czby1/Mgsw==", + "version": "1.0.30000985", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000985.tgz", + "integrity": "sha512-1ngiwkgqAYPG0JSSUp3PUDGPKKY59EK7NrGGX+VOxaKCNzRbNc7uXMny+c3VJfZxtoK3wSImTvG9T9sXiTw2+w==", "dev": true }, "cartodb.js": { @@ -1804,11 +1919,99 @@ "upath": "^1.1.1" }, "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, @@ -2126,6 +2329,15 @@ "optional": true, "requires": { "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "optional": true + } } }, "content-type": { @@ -2196,6 +2408,12 @@ "pify": "^4.0.1", "semver": "^5.6.0" } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true } } }, @@ -2305,13 +2523,6 @@ } } }, - "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, - "optional": true - }, "css-what": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", @@ -2369,9 +2580,9 @@ } }, "date-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.0.0.tgz", - "integrity": "sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", "dev": true }, "date-now": { @@ -2426,15 +2637,6 @@ "make-dir": "^1.0.0", "pify": "^2.3.0", "strip-dirs": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "optional": true - } } }, "decompress-response": { @@ -2542,13 +2744,6 @@ "object-assign": "^4.0.1", "pinkie-promise": "^2.0.0" } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "optional": true } } }, @@ -2664,17 +2859,15 @@ "dev": true }, "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-5.0.0.tgz", + "integrity": "sha512-TfU3nUY0WDIhN18eq+pgpbLY9AfL5RfiE9czKaTSolc6aK7qASXfDErvYgjV1UqCR4sNXDoxO0/idPmhDUt2Sg==", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", + "globby": "^10.0.0", "is-path-cwd": "^2.0.0", "is-path-in-cwd": "^2.0.0", "p-map": "^2.0.0", - "pify": "^4.0.1", "rimraf": "^2.6.3" } }, @@ -2773,36 +2966,12 @@ } }, "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - }, - "dependencies": { - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "path-type": "^4.0.0" } }, "dom-serialize": { @@ -2962,9 +3131,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.175", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.175.tgz", - "integrity": "sha512-cQ0o7phcPA0EYkN4juZy/rq4XVxl/1ywQnytDT9hZTC0cHfaOBqWK2XlWp9Mk8xRGntgnmxlHTOux4HLb2ZNnA==", + "version": "1.3.201", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.201.tgz", + "integrity": "sha512-aCTPIfY1Jvuam5b6vuWRjt1F8i4kY7zX0Qtpu5SNd6l1zjuxU9fDNpbM4o6+oJsra+TMD2o7D20GnkSIgpTr9w==", "dev": true }, "elliptic": { @@ -3330,15 +3499,6 @@ "optional": true, "requires": { "pify": "^2.2.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "optional": true - } } }, "exit": { @@ -3581,17 +3741,17 @@ "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==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.0.4.tgz", + "integrity": "sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg==", "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", + "@nodelib/fs.stat": "^2.0.1", + "@nodelib/fs.walk": "^1.2.1", + "glob-parent": "^5.0.0", + "is-glob": "^4.0.1", "merge2": "^1.2.3", - "micromatch": "^3.1.10" + "micromatch": "^4.0.2" } }, "fast-json-stable-stringify": { @@ -3606,6 +3766,15 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastq": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", + "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", + "dev": true, + "requires": { + "reusify": "^1.0.0" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -3653,26 +3822,12 @@ } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, "finalhandler": { @@ -3710,6 +3865,12 @@ "pify": "^4.0.1", "semver": "^5.6.0" } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true } } }, @@ -3753,21 +3914,126 @@ "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" } }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - } - }, "flagged-respawn": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", @@ -4699,24 +4965,12 @@ } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-glob": "^4.0.1" } }, "glob-stream": { @@ -4735,6 +4989,27 @@ "remove-trailing-separator": "^1.0.1", "to-absolute-glob": "^2.0.0", "unique-stream": "^2.0.2" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "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" + } + } } }, "glob-to-regexp": { @@ -4788,24 +5063,19 @@ "dev": true }, "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", "dev": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" } }, "globule": { @@ -5180,14 +5450,25 @@ } }, "gulp-if": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", - "integrity": "sha1-pJe351cwBQQcqivIt92jyARE1ik=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-3.0.0.tgz", + "integrity": "sha512-fCUEngzNiEZEK2YuPm+sdMpO6ukb8+/qzbGfJBXyNOXz85bCG7yBI+pPSl+N90d7gnLvMsarthsAImx0qy7BAw==", "dev": true, "requires": { - "gulp-match": "^1.0.3", - "ternary-stream": "^2.0.1", - "through2": "^2.0.1" + "gulp-match": "^1.1.0", + "ternary-stream": "^3.0.0", + "through2": "^3.0.1" + }, + "dependencies": { + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + } } }, "gulp-imagemin": { @@ -5281,9 +5562,9 @@ "dev": true }, "gulp-match": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.0.3.tgz", - "integrity": "sha1-kcfA1/Kb7NZgbVfYCn+Hdqh6uo4=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.1.0.tgz", + "integrity": "sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ==", "dev": true, "requires": { "minimatch": "^3.0.3" @@ -5563,12 +5844,32 @@ "through": "^2.3.8" } }, + "gulp-if": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", + "integrity": "sha1-pJe351cwBQQcqivIt92jyARE1ik=", + "dev": true, + "requires": { + "gulp-match": "^1.0.3", + "ternary-stream": "^2.0.1", + "through2": "^2.0.1" + } + }, "map-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", "dev": true }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", @@ -5587,6 +5888,18 @@ "duplexer": "~0.1.1", "through": "~2.3.4" } + }, + "ternary-stream": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.1.1.tgz", + "integrity": "sha512-j6ei9hxSoyGlqTmoMjOm+QNvUKDOIY6bNl4Uh1lhBvl6yjPW2iLqxDUYyfDPZknQ4KdRziFl+ec99iT4l7g0cw==", + "dev": true, + "requires": { + "duplexify": "^3.5.0", + "fork-stream": "^0.0.4", + "merge-stream": "^1.0.0", + "through2": "^2.0.1" + } } } }, @@ -5750,6 +6063,26 @@ "kind-of": "^4.0.0" }, "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -5957,9 +6290,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": "5.1.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz", + "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==", "dev": true }, "imagemin": { @@ -5976,6 +6309,124 @@ "replace-ext": "^1.0.0" }, "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } + }, + "fast-glob": { + "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", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, "globby": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", @@ -5998,6 +6449,92 @@ "dev": true } } + }, + "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-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "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 + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, @@ -6346,24 +6883,10 @@ "dev": true }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-obj": { "version": "1.0.1", @@ -6379,9 +6902,9 @@ "optional": true }, "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": { @@ -6675,9 +7198,9 @@ }, "dependencies": { "semver": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.2.tgz", - "integrity": "sha512-z4PqiCpomGtWj8633oeAdXm1Kn1W++3T8epkZYnwiVgIYIJ0QHszhInYSJTYxebByQH7KVCEAn8R9duzZW2PhQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } @@ -6703,6 +7226,12 @@ "semver": "^5.6.0" } }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -6751,6 +7280,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "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 } } }, @@ -7005,18 +7540,18 @@ "dev": true }, "karma": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.1.0.tgz", - "integrity": "sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.2.0.tgz", + "integrity": "sha512-fmCuxN1rwJxTdZfOXK5LjlmS4Ana/OvzNMpkyLL/TLE8hmgSkpVpMYQ7RTVa8TNKRVQDZNl5W1oF5cfKfgIMlA==", "dev": true, "requires": { "bluebird": "^3.3.0", "body-parser": "^1.16.1", - "braces": "^2.3.2", - "chokidar": "^2.0.3", + "braces": "^3.0.2", + "chokidar": "^3.0.0", "colors": "^1.1.0", "connect": "^3.6.0", - "core-js": "^2.2.0", + "core-js": "^3.1.3", "di": "^0.0.1", "dom-serialize": "^2.2.0", "flatted": "^2.0.0", @@ -7039,11 +7574,68 @@ "useragent": "2.3.0" }, "dependencies": { - "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "anymatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.0.3.tgz", + "integrity": "sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "chokidar": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.2.tgz", + "integrity": "sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA==", + "dev": true, + "requires": { + "anymatch": "^3.0.1", + "braces": "^3.0.2", + "fsevents": "^2.0.6", + "glob-parent": "^5.0.0", + "is-binary-path": "^2.1.0", + "is-glob": "^4.0.1", + "normalize-path": "^3.0.0", + "readdirp": "^3.1.1" + } + }, + "fsevents": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", + "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", + "dev": true, + "optional": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true + }, + "readdirp": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.1.tgz", + "integrity": "sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } } } }, @@ -7244,14 +7836,6 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } } }, "locate-path": { @@ -7273,9 +7857,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "lodash.assign": { "version": "4.2.0", @@ -7308,9 +7892,9 @@ "dev": true }, "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "log-symbols": { @@ -7350,16 +7934,16 @@ } }, "log4js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.4.0.tgz", - "integrity": "sha512-xwRvmxFsq8Hb7YeS+XKfvCrsH114bXex6mIwJ2+KmYVi23pB3+hlzyGq1JPycSFTJWNLhD/7PCtM0RfPy6/2yg==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", + "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", "dev": true, "requires": { "date-format": "^2.0.0", "debug": "^4.1.1", "flatted": "^2.0.0", "rfdc": "^1.1.4", - "streamroller": "^1.0.5" + "streamroller": "^1.0.6" }, "dependencies": { "debug": { @@ -7526,25 +8110,128 @@ "stack-trace": "0.0.10" }, "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "findup-sync": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "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" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } @@ -7639,24 +8326,13 @@ "dev": true }, "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "braces": "^3.0.1", + "picomatch": "^2.0.5" } }, "miller-rabin": { @@ -7768,9 +8444,9 @@ } }, "mocha": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz", - "integrity": "sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.0.tgz", + "integrity": "sha512-qwfFgY+7EKAAUAdv7VYMZQknI7YJSGesxHyhn6qD52DV8UcSZs5XwCifcZGMVIE4a5fbmhvbotxC0DLQ0oKohQ==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -8112,14 +8788,6 @@ "array-union": "^2.1.0", "arrify": "^2.0.1", "minimatch": "^3.0.4" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - } } }, "mute-stdout": { @@ -8221,9 +8889,9 @@ } }, "node-releases": { - "version": "1.1.23", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.23.tgz", - "integrity": "sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w==", + "version": "1.1.26", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.26.tgz", + "integrity": "sha512-fZPsuhhUHMTlfkhDLGtfY80DSJTjOcx+qD1j5pqPkuhUHVS7xHZIg9EE4DHK8O3f0zTxXHX5VIkDG8pu98/wfQ==", "dev": true, "requires": { "semver": "^5.3.0" @@ -8505,34 +9173,6 @@ "safe-buffer": "~5.1.1" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -8548,36 +9188,12 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.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 - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "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" - } - }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -8588,16 +9204,11 @@ "semver": "^5.6.0" } }, - "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" - } + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true }, "require-main-filename": { "version": "2.0.0", @@ -8605,6 +9216,12 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -8649,22 +9266,21 @@ "dev": true }, "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.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", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" + "yargs-parser": "^13.1.1" } }, "yargs-parser": { @@ -8838,9 +9454,9 @@ } }, "open": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.3.0.tgz", - "integrity": "sha512-6AHdrJxPvAXIowO/aIaeHZ8CeMdDf7qCyRNq8NwJpinmCdXhz+NZR7ie1Too94lpciCDsG+qHGO9Mt0svA4OqA==", + "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" @@ -9225,23 +9841,10 @@ "dev": true }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pathval": { "version": "1.1.0", @@ -9322,10 +9925,16 @@ } } }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "dev": true + }, "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "pinkie": { @@ -9418,9 +10027,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.0.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz", + "integrity": "sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ==", "dev": true }, "prelude-ls": { @@ -9437,9 +10046,9 @@ "optional": true }, "pretty-bytes": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.2.0.tgz", - "integrity": "sha512-ujANBhiUsl9AhREUDUEY1GPOharMGm8x8juS7qOHybcLi7XsKfrYQ88hSly1l2i0klXHTDYrlL8ihMCG55Dc3w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", + "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==", "dev": true }, "pretty-hrtime": { @@ -9480,9 +10089,9 @@ "dev": true }, "psl": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz", - "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz", + "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==", "dev": true }, "public-encrypt": { @@ -9670,6 +10279,19 @@ "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", "path-type": "^1.0.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + } } }, "read-pkg-up": { @@ -9703,6 +10325,12 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -9723,6 +10351,111 @@ "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "rechoir": { @@ -9745,9 +10478,9 @@ } }, "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", "dev": true }, "regex-not": { @@ -9962,6 +10695,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rfdc": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", @@ -10000,10 +10739,16 @@ "inherits": "^2.0.1" } }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "dev": true }, "safe-regex": { @@ -10304,9 +11049,9 @@ "dev": true }, "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "snapdragon": { @@ -10617,9 +11362,9 @@ } }, "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "spinkit": { @@ -10881,16 +11626,16 @@ } }, "streamroller": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.5.tgz", - "integrity": "sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", + "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", "dev": true, "requires": { "async": "^2.6.2", "date-format": "^2.0.0", "debug": "^3.2.6", "fs-extra": "^7.0.1", - "lodash": "^4.17.11" + "lodash": "^4.17.14" }, "dependencies": { "debug": { @@ -10944,6 +11689,14 @@ "dev": true, "requires": { "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "stringify-object": { @@ -11053,9 +11806,9 @@ } }, "svgo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", - "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", + "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", "dev": true, "optional": true, "requires": { @@ -11063,8 +11816,7 @@ "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", + "css-tree": "1.0.0-alpha.33", "csso": "^3.5.1", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", @@ -11076,16 +11828,23 @@ }, "dependencies": { "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==", + "version": "1.0.0-alpha.33", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", + "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", "dev": true, "optional": true, "requires": { - "mdn-data": "~1.1.0", + "mdn-data": "2.0.4", "source-map": "^0.5.3" } }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true, + "optional": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -11150,24 +11909,47 @@ } }, "ternary-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.0.1.tgz", - "integrity": "sha1-Bk5Im0tb9gumpre8fy9cJ07Pgmk=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-3.0.0.tgz", + "integrity": "sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ==", "dev": true, "requires": { - "duplexify": "^3.5.0", + "duplexify": "^4.1.1", "fork-stream": "^0.0.4", - "merge-stream": "^1.0.0", - "through2": "^2.0.1" + "merge-stream": "^2.0.0", + "through2": "^3.0.1" }, "dependencies": { - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "duplexify": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", + "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", "dev": true, "requires": { - "readable-stream": "^2.0.1" + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" } } } @@ -11431,13 +12213,12 @@ } }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, "to-through": { @@ -11988,6 +12769,12 @@ "requires": { "safe-buffer": "~5.1.1" } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true } } }, @@ -12085,6 +12872,14 @@ "async-limiter": "~1.0.0", "safe-buffer": "~5.1.0", "ultron": "~1.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "xmlhttprequest-ssl": { @@ -12094,9 +12889,9 @@ "dev": true }, "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==", "dev": true }, "y18n": { diff --git a/src/package.json b/src/package.json index 5aa4de6ea..918606db9 100644 --- a/src/package.json +++ b/src/package.json @@ -13,7 +13,7 @@ "js-storage": "~1.0.4", "leaflet": "~0.7.7", "leaflet.awesome-markers": "~2.0.5", - "lodash": "~4.17.11", + "lodash": "~4.17.15", "moment": "~2.24.0", "moment-duration-format": "~2.3.2", "polyline-encoded": "~0.0.8", @@ -24,14 +24,14 @@ }, "devDependencies": { "acorn-dynamic-import": "^4.0.0", - "acorn": "~6.1.1", + "acorn": "~6.2.1", "aliasify": "~2.1.0", "apache-server-configs": "~3.2.1", - "browserify": "~16.2.3", + "browserify": "~16.3.0", "chai": "~4.2.0", "connect": "~3.7.0", "connect-livereload": "~0.6.1", - "del": "~4.1.1", + "del": "~5.0.0", "gulp": "~4.0.2", "gulp-add-src": "~1.0.0", "gulp-autoprefixer": "~6.1.0", @@ -41,7 +41,7 @@ "gulp-debug": "~4.0.0", "gulp-filter": "~6.0.0", "gulp-flatten": "~0.4.0", - "gulp-if": "~2.0.2", + "gulp-if": "~3.0.0", "gulp-imagemin": "~6.0.0", "gulp-jshint": "~2.1.0", "gulp-jshint-xml-file-reporter": "~0.5.1", @@ -55,7 +55,7 @@ "gulp-useref": "~3.1.6", "jshint": "~2.10.2", "jshint-stylish": "~2.2.1", - "karma": "~4.1.0", + "karma": "~4.2.0", "karma-chai": "~0.1.0", "karma-coverage": "~1.1.2", "karma-jasmine": "~2.0.1", @@ -63,10 +63,10 @@ "karma-phantomjs-launcher": "~1.0.4", "lazypipe": "~1.0.2", "merge-stream": "~2.0.0", - "mocha": "~6.1.4", + "mocha": "~6.2.0", "npmfiles": "~0.1.3", "nyc": "~14.1.1", - "open": "~6.3.0", + "open": "~6.4.0", "phantomjs-prebuilt": "~2.1.16", "pump": "~3.0.0", "requirejs": "~2.3.6", @@ -106,6 +106,11 @@ ], "report-dir": "coverage/" }, + "browserslist": [ + "last 2 versions", + "> 1%", + "not dead" + ], "overrides": { "cartodb.js": { "main": [