From 352beedd67024f2ca5257a5bbcf40144e0c6319f Mon Sep 17 00:00:00 2001 From: f Date: Fri, 15 Nov 2019 13:35:27 -0300 Subject: [PATCH 01/66] crear articulo segun layout --- app/controllers/posts_controller.rb | 2 +- app/services/post_service.rb | 4 ++-- app/views/posts/_form.haml | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 14af15fa..c9ea8d23 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -34,7 +34,7 @@ class PostsController < ApplicationController usuarie: current_usuarie, params: params) - if service.create.persisted? + if (@post = service.create.persisted?) redirect_to site_posts_path(@site) else render 'posts/new' diff --git a/app/services/post_service.rb b/app/services/post_service.rb index 768c1fdd..0f6bac19 100644 --- a/app/services/post_service.rb +++ b/app/services/post_service.rb @@ -8,8 +8,8 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do # # @return Post def create - # TODO: Implementar layout - self.post = site.posts(lang: params[:post][:lang] || I18n.locale).build + self.post = site.posts(lang: params[:post][:lang] || I18n.locale) + .build(layout: params[:post][:layout]) post.usuaries << usuarie params[:post][:draft] = true if site.invitade? usuarie diff --git a/app/views/posts/_form.haml b/app/views/posts/_form.haml index 09136f3e..573389fb 100644 --- a/app/views/posts/_form.haml +++ b/app/views/posts/_form.haml @@ -19,6 +19,8 @@ -# Botones de guardado = render 'posts/submit', site: site, post: post + = hidden_field_tag 'post[layout]', params[:layout] || 'post' + -# Dibuja cada atributo - post.attributes.each do |attribute| - metadata = post.send(attribute) From 2471dad5b244e9dde27d202590d1ae3b1535e732 Mon Sep 17 00:00:00 2001 From: f Date: Sat, 16 Nov 2019 20:13:30 -0300 Subject: [PATCH 02/66] contenedor --- Dockerfile | 92 +++++++++++++++++++++----------------------------- Makefile | 7 ++++ config/puma.rb | 19 +++++++++++ sync_assets.sh | 2 +- vendor/.keep | 0 5 files changed, 66 insertions(+), 54 deletions(-) delete mode 100644 vendor/.keep diff --git a/Dockerfile b/Dockerfile index 143d4043..e99c3fc8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ # el mismo repositorio de trabajo. Cuando tengamos CI/CD algunas cosas # como el tarball van a tener que cambiar porque ya vamos a haber hecho # un clone/pull limpio. -FROM sutty/sdk-ruby:latest as build +FROM alpine:3.9 as build MAINTAINER "f " ARG RAILS_MASTER_KEY @@ -13,10 +13,21 @@ ENV SECRET_KEY_BASE solo_es_necesaria_para_correr_rake ENV RAILS_ENV production ENV RAILS_MASTER_KEY=$RAILS_MASTER_KEY -# Para compilar los assets en brotli -RUN apk add --no-cache brotli libssh2 +RUN apk add --no-cache libxslt libxml2 tzdata ruby ruby-bundler ruby-json ruby-bigdecimal ruby-rake +RUN apk add --no-cache postgresql-libs git yarn brotli libssh2 -# Empezamos con la usuaria app creada por sdk-ruby +# https://github.com/rubygems/rubygems/issues/2918 +# https://gitlab.alpinelinux.org/alpine/aports/issues/10808 +COPY ./rubygems-platform-musl.patch /tmp/ +RUN cd /usr/lib/ruby/2.5.0 && patch -Np 0 -i /tmp/rubygems-platform-musl.patch + +# Agregar el usuario +RUN addgroup -g 82 -S www-data +RUN adduser -s /bin/sh -G www-data -h /home/app -D app +RUN install -dm750 -o app -g www-data /home/app/web +RUN gem install --no-document bundler:2.0.2 + +# Empezamos con la usuaria app USER app # Vamos a trabajar dentro de este directorio WORKDIR /home/app/sutty @@ -24,25 +35,23 @@ WORKDIR /home/app/sutty # Copiamos solo el Gemfile para poder instalar las gemas necesarias COPY --chown=app:www-data ./Gemfile . COPY --chown=app:www-data ./Gemfile.lock . -# XXX: No usamos la flag --production porque luego no nos deja -# desinstalar las gemas de los assets -# RUN --mount=type=cache,target=/home/app/.ccache \ RUN bundle install --no-cache --path=./vendor --without='test development' # Vaciar la caché RUN rm vendor/ruby/2.5.0/cache/*.gem -# Limpiar las librerías nativas, esto ahorra más espacio y uso de -# memoria ya que no hay que cargar símbolos que no se van a usar. -RUN find vendor -name "*.so" | xargs -rn 1 strip --strip-unneeded # Copiar el repositorio git COPY --chown=app:www-data ./.git/ ./.git/ -# Hacer un tarball de los archivos desde el repositorio -RUN git archive -o ../sutty.tar.gz HEAD +# Hacer un clon limpio del repositorio en lugar de copiar todos los +# archivos +RUN cd .. && git clone sutty checkout + +WORKDIR /home/app/checkout +# Traer las gemas: +RUN mv ../web/vendor ./vendor +RUN mv ../web/.bundle ./.bundle -# Extraer archivos necesarios para compilar los assets -RUN tar xf ../sutty.tar.gz Rakefile config app bin yarn.lock package.json # Instalar secretos -COPY --chown=app:www-data ./config/credentials.yml.enc ./config/ +COPY --chown=app:root ./config/credentials.yml.enc ./config/ # Pre-compilar los assets RUN bundle exec rake assets:precompile # Comprimirlos usando brotli @@ -52,71 +61,48 @@ RUN find public -type f -name "*.gz" | sed -re "s/\.gz$//" | xargs -r brotli -k # assets ya están pre-compilados. RUN sed -re "/(uglifier|bootstrap|coffee-rails)/d" -i Gemfile RUN bundle clean +RUN rm -rf ./node_modules ./tmp/cache ./.git # Contenedor final -FROM sutty/monit:latest +FROM sutty/monit:3.9 ENV RAILS_ENV production # Instalar las dependencias, separamos la librería de base de datos para # poder reutilizar este primer paso desde otros contenedores RUN apk add --no-cache libxslt libxml2 tzdata ruby ruby-bundler ruby-json ruby-bigdecimal ruby-rake +RUN apk add --no-cache postgresql-libs libssh2 file rsync git # Chequear que la versión de ruby sea la correcta RUN test "2.5.7" = `ruby -e 'puts RUBY_VERSION'` -RUN apk add --no-cache postgresql-libs libssh2 -# Necesitamos yarn para que Jekyll pueda generar los sitios -# XXX: Eliminarlo cuando extraigamos la generación de sitios del proceso -# principal -RUN apk add --no-cache yarn -# Instalar foreman para poder correr los servicios -RUN gem install --no-document --no-user-install foreman -RUN apk add --no-cache file - -# Agregar el grupo del servidor web -RUN addgroup -g 82 -S www-data -# Agregar la usuaria -RUN adduser -s /bin/sh -G www-data -h /srv/http -D app - # https://github.com/rubygems/rubygems/issues/2918 # https://gitlab.alpinelinux.org/alpine/aports/issues/10808 COPY ./rubygems-platform-musl.patch /tmp/ RUN cd /usr/lib/ruby/2.5.0 && patch -Np 0 -i /tmp/rubygems-platform-musl.patch +# Necesitamos yarn para que Jekyll pueda generar los sitios +# XXX: Eliminarlo cuando extraigamos la generación de sitios del proceso +# principal +RUN apk add --no-cache yarn +# Instalar foreman para poder correr los servicios +RUN gem install --no-document --no-user-install bundler foreman + +# Agregar el grupo del servidor web y la usuaria +RUN addgroup -g 82 -S www-data +RUN adduser -s /bin/sh -G www-data -h /srv/http -D app + # Convertirse en app para instalar USER app -WORKDIR /srv/http - -# Traer los archivos y colocarlos donde van definitivamente -COPY --from=build --chown=app:www-data /home/app/sutty.tar.gz /tmp/ -RUN tar xf /tmp/sutty.tar.gz -# Publicar el código! -RUN mv /tmp/sutty.tar.gz ./public/ - -# Traer los assets compilados y las gemas -COPY --from=build /home/app/sutty/public/assets public/assets -COPY --from=build /home/app/sutty/public/packs public/packs -COPY --from=build /home/app/sutty/vendor vendor -COPY --from=build /home/app/sutty/.bundle .bundle -COPY --from=build /home/app/sutty/Gemfile Gemfile -COPY --from=build /home/app/sutty/Gemfile.lock Gemfile.lock +COPY --from=build --chown=app:www-data /home/app/checkout /srv/http # Volver a root para cerrar la compilación USER root -# Convertir la aplicación en solo lectura -#RUN chown -R root:root /srv/http -#RUN chmod -R o=g /srv/http -#RUN chown -R app:www-data _deploy _sites - # Sincronizar los assets a un directorio compartido -RUN apk add --no-cache rsync COPY ./sync_assets.sh /usr/local/bin/sync_assets RUN chmod 755 /usr/local/bin/sync_assets # Instalar la configuración de monit y comprobarla RUN install -m 640 -o root -g root ./monit.conf /etc/monit.d/sutty.conf -RUN monit -t -RUN apk add --no-cache git # Mantener estos directorios! VOLUME "/srv/http/_deploy" diff --git a/Makefile b/Makefile index 226328d2..17d93c55 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,13 @@ clean: build: docker build --build-arg="RAILS_MASTER_KEY=`cat config/master.key`" -t sutty/sutty . +save: + docker save sutty/sutty:latest | gzip > sutty.latest.gz + scp sutty.latest.gz root@sutty.nl: + +load: + ssh root@sutty.nl sh -c "gunzip -c sutty.latest.gz | docker load" + # Crear el directorio donde se almacenan las gemas binarias ../gems/: mkdir -p $@ diff --git a/config/puma.rb b/config/puma.rb index 872346ff..629b81fe 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -38,3 +38,22 @@ preload_app! plugin :tmp_restart pidfile 'tmp/puma.pid' + +# If you are preloading your application and using Active Record, it's +# recommended that you close any connections to the database before workers +# are forked to prevent connection leakage. +# +before_fork do + ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord) +end + +# The code in the `on_worker_boot` will be called if you are using +# clustered mode by specifying a number of `workers`. After each worker +# process is booted, this block will be run. If you are using the `preload_app!` +# option, you will want to use this block to reconnect to any threads +# or connections that may have been created at application boot, as Ruby +# cannot share connections between processes. +# +on_worker_boot do + ActiveRecord::Base.establish_connection if defined?(ActiveRecord) +end diff --git a/sync_assets.sh b/sync_assets.sh index 167d6205..1c1a6ca1 100644 --- a/sync_assets.sh +++ b/sync_assets.sh @@ -2,4 +2,4 @@ # Sincronizar assets desde public a _public para que estén disponibles # en el contenedor web. -rsync -a --delete-after public/ _public/ +rsync -a --delete-after /srv/http/public/ /srv/http/_public/ diff --git a/vendor/.keep b/vendor/.keep deleted file mode 100644 index e69de29b..00000000 From 52e2eb7c39514a514bc2df1fc2412ebe8ddcd1db Mon Sep 17 00:00:00 2001 From: f Date: Mon, 18 Nov 2019 14:08:30 -0300 Subject: [PATCH 03/66] permitir punto al final del dominio --- app/models/site.rb | 5 ++++- app/views/sites/_form.haml | 2 +- test/models/site_test.rb | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/models/site.rb b/app/models/site.rb index d81b95f9..e82a347b 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -9,7 +9,10 @@ class Site < ApplicationRecord # @see app/services/site_service.rb DEPLOYS = %i[local www zip].freeze - validates :name, uniqueness: true, hostname: true + validates :name, uniqueness: true, hostname: { + allow_root_label: true + } + validates :design_id, presence: true validate :deploy_local_presence validates_inclusion_of :status, in: %w[waiting enqueued building] diff --git a/app/views/sites/_form.haml b/app/views/sites/_form.haml index 0afb3ada..60e5a8de 100644 --- a/app/views/sites/_form.haml +++ b/app/views/sites/_form.haml @@ -10,7 +10,7 @@ = f.text_field :name, class: form_control(site, :name), required: true, - pattern: '^([a-z0-9][a-z0-9\-]*)?[a-z0-9]$', + pattern: '^([a-z0-9][a-z0-9\-]*)?[a-z0-9\.]$', minlength: 1, maxlength: 63 - if invalid? site, :name diff --git a/test/models/site_test.rb b/test/models/site_test.rb index 78e3f577..bb6a4777 100644 --- a/test/models/site_test.rb +++ b/test/models/site_test.rb @@ -32,11 +32,11 @@ class SiteTest < ActiveSupport::TestCase assert_not site.errors.messages[:name].present? end - test 'el nombre del sitio no puede terminar con punto' do + test 'el nombre del sitio puede terminar con punto' do site = build :site, name: 'hola.chau.' site.validate - assert site.errors.messages[:name].present? + assert_not site.errors.messages[:name].present? end test 'el nombre del sitio no puede contener wildcard' do From 45b82f85b61bc2df752364676cffbfb14f75ece9 Mon Sep 17 00:00:00 2001 From: f Date: Mon, 18 Nov 2019 14:09:33 -0300 Subject: [PATCH 04/66] actualizacion de seguridad --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9f5db802..5d14ff4b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -240,7 +240,7 @@ GEM net-scp (2.0.0) net-ssh (>= 2.6.5, < 6.0.0) net-ssh (5.2.0) - netaddr (2.0.3) + netaddr (2.0.4) nio4r (2.5.2) nokogiri (1.10.5) mini_portile2 (~> 2.4.0) From 3892d12cbcfcca50cd33ce1ba4293e7da8090a1e Mon Sep 17 00:00:00 2001 From: f Date: Mon, 18 Nov 2019 14:10:05 -0300 Subject: [PATCH 05/66] contenedor --- Dockerfile | 15 +++++++-------- monit.conf | 3 ++- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index e99c3fc8..6c9855c1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ # el mismo repositorio de trabajo. Cuando tengamos CI/CD algunas cosas # como el tarball van a tener que cambiar porque ya vamos a haber hecho # un clone/pull limpio. -FROM alpine:3.9 as build +FROM alpine:3.10 as build MAINTAINER "f " ARG RAILS_MASTER_KEY @@ -24,7 +24,7 @@ RUN cd /usr/lib/ruby/2.5.0 && patch -Np 0 -i /tmp/rubygems-platform-musl.patch # Agregar el usuario RUN addgroup -g 82 -S www-data RUN adduser -s /bin/sh -G www-data -h /home/app -D app -RUN install -dm750 -o app -g www-data /home/app/web +RUN install -dm750 -o app -g www-data /home/app/sutty RUN gem install --no-document bundler:2.0.2 # Empezamos con la usuaria app @@ -47,8 +47,8 @@ RUN cd .. && git clone sutty checkout WORKDIR /home/app/checkout # Traer las gemas: -RUN mv ../web/vendor ./vendor -RUN mv ../web/.bundle ./.bundle +RUN mv ../sutty/vendor ./vendor +RUN mv ../sutty/.bundle ./.bundle # Instalar secretos COPY --chown=app:root ./config/credentials.yml.enc ./config/ @@ -99,10 +99,9 @@ COPY --from=build --chown=app:www-data /home/app/checkout /srv/http USER root # Sincronizar los assets a un directorio compartido -COPY ./sync_assets.sh /usr/local/bin/sync_assets -RUN chmod 755 /usr/local/bin/sync_assets -# Instalar la configuración de monit y comprobarla -RUN install -m 640 -o root -g root ./monit.conf /etc/monit.d/sutty.conf +RUN install -m 755 /srv/http/sync_assets.sh /usr/local/bin/sync_assets +# Instalar la configuración de monit +RUN install -m 640 -o root -g root /srv/http/monit.conf /etc/monit.d/sutty.conf # Mantener estos directorios! VOLUME "/srv/http/_deploy" diff --git a/monit.conf b/monit.conf index 4d34d69c..b612016b 100644 --- a/monit.conf +++ b/monit.conf @@ -1,5 +1,6 @@ check process sutty with pidfile /srv/http/tmp/puma.pid - start program = "/bin/sh -c 'cd /srv/http && foreman start migrate && foreman start sutty'" as uid app + start program = "/bin/sh -c 'cd /srv/http && foreman start migrate && foreman start sutty'" + as uid "app" and gid "www-data" stop program = "/bin/sh -c 'cat /srv/http/tmp/puma.pid | xargs kill'" check program sync_assets From 2c267ae116e00002d6657838b963b120b37ceccb Mon Sep 17 00:00:00 2001 From: f Date: Mon, 18 Nov 2019 17:05:36 -0300 Subject: [PATCH 06/66] radicale --- app/models/metadata_order.rb | 5 ++--- db/seeds/sites.yml | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/models/metadata_order.rb b/app/models/metadata_order.rb index 0b696ed8..df9e0559 100644 --- a/app/models/metadata_order.rb +++ b/app/models/metadata_order.rb @@ -2,9 +2,8 @@ # Un campo de orden class MetadataOrder < MetadataTemplate - # El valor según la posición del post en la relación, siguiendo el - # orden cronológico inverso + # El valor es 0 porque estamos ordenando por orden y fecha def default_value - site.posts(lang: post.lang.value).index(post) + 0 end end diff --git a/db/seeds/sites.yml b/db/seeds/sites.yml index 1485f0f9..9cc14ce1 100644 --- a/db/seeds/sites.yml +++ b/db/seeds/sites.yml @@ -17,3 +17,4 @@ - name: mail - name: email - name: xmpp +- name: radicale From fe5881069cb212b9045c5ddcf89d8fcea08cbf53 Mon Sep 17 00:00:00 2001 From: f Date: Fri, 22 Nov 2019 13:41:59 -0300 Subject: [PATCH 07/66] no aplicar limpieza de html por ahora --- app/views/posts/attribute_ro/_content.haml | 2 +- app/views/posts/attributes/_content.haml | 3 +-- app/views/posts/show.haml | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/views/posts/attribute_ro/_content.haml b/app/views/posts/attribute_ro/_content.haml index 27e599d4..31dd8f0d 100644 --- a/app/views/posts/attribute_ro/_content.haml +++ b/app/views/posts/attribute_ro/_content.haml @@ -1,3 +1,3 @@ %tr{ id: attribute } %th= post_label_t(attribute, post: post) - %td= sanitize_markdown metadata.value, tags: tags + %td= metadata.value diff --git a/app/views/posts/attributes/_content.haml b/app/views/posts/attributes/_content.haml index 3b9e1e94..f5c60f29 100644 --- a/app/views/posts/attributes/_content.haml +++ b/app/views/posts/attributes/_content.haml @@ -2,6 +2,5 @@ = label_tag "post_#{attribute}", post_label_t(attribute, post: post) = render 'posts/attribute_feedback', post: post, attribute: attribute, metadata: metadata - = rich_text_area_tag "post[#{attribute}]", - sanitize_markdown(metadata.value, tags: all_html_tags), + = rich_text_area_tag "post[#{attribute}]", metadata.value, **field_options(attribute, metadata), class: '' diff --git a/app/views/posts/show.haml b/app/views/posts/show.haml index 86c4822b..dc8a5def 100644 --- a/app/views/posts/show.haml +++ b/app/views/posts/show.haml @@ -33,4 +33,4 @@ - next if @post.send(attr).front_matter? %section{ id: attr } - = sanitize_markdown @post.send(attr).value, tags: all_html_tags + = raw @post.send(attr).value From 57457cfcc8201a28ad7afc1f06b2614b51eedc8f Mon Sep 17 00:00:00 2001 From: f Date: Thu, 28 Nov 2019 16:44:44 -0300 Subject: [PATCH 08/66] deshabilitar la lectura de ciertos archivos --- config/initializers/core_extensions.rb | 28 ++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/config/initializers/core_extensions.rb b/config/initializers/core_extensions.rb index 95cf9571..66003a00 100644 --- a/config/initializers/core_extensions.rb +++ b/config/initializers/core_extensions.rb @@ -1,6 +1,30 @@ # frozen_string_literal: true -require 'jekyll/document' - String.include CoreExtensions::String::StripTags Jekyll::Document.include CoreExtensions::Jekyll::Document::Path + +# Lazy Loading de Jekyll, deshabilitando la instanciación de elementos +# que no necesitamos +# +# TODO: Aplicar monkey patches en otro lado... +module Jekyll + Site.class_eval do + def setup + ensure_not_in_dest + end + end + + Reader.class_eval do + def retrieve_posts(_); end + + def retrieve_dirs(_, _, _); end + + def retrieve_pages(_, _); end + + def retrieve_static_files(_, _); end + end + + ThemeAssetsReader.class_eval do + def read; end + end +end From 0c81809edfb4a2f06cb036948d5269d558e486b1 Mon Sep 17 00:00:00 2001 From: f Date: Wed, 11 Dec 2019 17:05:31 -0300 Subject: [PATCH 09/66] cambiar el algoritmo de ordenamiento MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit para poder respetar el orden de más nuevo a más antiguo, el número de orden se convirtió en decreciente (de más alto a más bajo). además, encontramos algunos temas de performance como guardar solo los artículos que cambiaron y no todos. se graban los cambios sin validarlos, es decir, solo el cambio de orden. --- app/controllers/posts_controller.rb | 2 +- app/javascript/packs/application.js | 8 +- app/models/metadata_order.rb | 5 +- app/models/metadata_template.rb | 2 + app/models/post.rb | 13 +-- app/models/post_relation.rb | 17 +++- app/models/site/static_file_migration.rb | 2 +- app/services/post_service.rb | 13 ++- app/views/posts/index.haml | 115 +++++++++++------------ doc/reordenar.md | 8 ++ test/models/post_test.rb | 2 +- 11 files changed, 105 insertions(+), 82 deletions(-) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index c9ea8d23..fe8ad47d 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -12,7 +12,7 @@ class PostsController < ApplicationController @layout = params.dig(:layout).try :to_sym # TODO: Aplicar policy_scope @posts = @site.posts(lang: I18n.locale) - @posts.sort_by! :order, :date + @posts.sort_by!(:order, :date).reverse! end def show diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index 6d8e02e1..e8b19a03 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -29,7 +29,11 @@ document.addEventListener('turbolinks:load', () => { onlyBody: true, dragHandler: '.handle' }).on('drop', (from, to, el, mode) => { - $('.reorder').val((i,v) => i); - $('.submit-reorder').removeClass('d-none'); + Array.from(document.querySelectorAll('.reorder')) + .reverse() + .map((o,i) => o.value = i); + + Array.from(document.querySelectorAll('.submit-reorder')) + .map(s => s.classList.remove('d-none')); }); }) diff --git a/app/models/metadata_order.rb b/app/models/metadata_order.rb index df9e0559..e1f66e68 100644 --- a/app/models/metadata_order.rb +++ b/app/models/metadata_order.rb @@ -2,8 +2,9 @@ # Un campo de orden class MetadataOrder < MetadataTemplate - # El valor es 0 porque estamos ordenando por orden y fecha + # El valor según la posición del post en la relación ordenada por + # fecha, a fecha más alta, posición más alta def default_value - 0 + site.posts(lang: post.lang.value).sort_by(:date).index(post) end end diff --git a/app/models/metadata_template.rb b/app/models/metadata_template.rb index de5007b9..fb8e0388 100644 --- a/app/models/metadata_template.rb +++ b/app/models/metadata_template.rb @@ -15,6 +15,8 @@ MetadataTemplate = Struct.new(:site, :document, :name, :label, :type, # Valores posibles, busca todos los valores actuales en otros # artículos del mismo sitio + # + # TODO: Implementar lang! def values site.everything_of(name) end diff --git a/app/models/post.rb b/app/models/post.rb index 0dd9299f..8daf9ed1 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -156,8 +156,8 @@ class Post < OpenStruct # Guarda los cambios # rubocop:disable Metrics/CyclomaticComplexity - def save(validation = true) - return false if validation && !valid? + def save(validate: true) + return false if validate && !valid? # Salir si tenemos que cambiar el nombre del archivo y no pudimos return false if !new? && path_changed? && !update_path! return false unless save_attributes! @@ -197,12 +197,6 @@ class Post < OpenStruct # Detecta si el artículo es válido para guardar def valid? - validate - errors.blank? - end - - # Requisitos para que el post sea válido - def validate self.errors = {} layout.metadata.keys.map(&:to_sym).each do |metadata| @@ -210,8 +204,9 @@ class Post < OpenStruct errors[metadata] = template.errors unless template.valid? end + + errors.blank? end - alias validate! validate # Guarda los cambios en el archivo destino def write diff --git a/app/models/post_relation.rb b/app/models/post_relation.rb index 22eb5ca9..934b2c54 100644 --- a/app/models/post_relation.rb +++ b/app/models/post_relation.rb @@ -31,15 +31,18 @@ class PostRelation < Array post end + alias sort_by_generic sort_by alias sort_by_generic! sort_by! # Permite ordenar los artículos por sus atributos # # XXX: Prestar atención cuando estamos mezclando artículos con # diferentes tipos de atributos. - def sort_by!(*attrs) - sort_by_generic! do |post| + def sort_by(*attrs) + sort_by_generic do |post| attrs.map do |attr| + # TODO: detectar el tipo de atributo faltante y obtener el valor + # por defecto para hacer la comparación return 0 unless post.attributes.include? attr post.public_send(attr).value @@ -47,6 +50,10 @@ class PostRelation < Array end end + def sort_by!(*attrs) + replace sort_by(*attrs) + end + alias find_generic find # Encontra un post por su id convertido a SHA1 @@ -65,8 +72,10 @@ class PostRelation < Array end # Intenta guardar todos y devuelve true si pudo - def save_all - map(&:save).all? + def save_all(validate: true) + map do |post| + post.save(validate: validate) + end.all? end private diff --git a/app/models/site/static_file_migration.rb b/app/models/site/static_file_migration.rb index 4d08fc8c..48b3cf28 100644 --- a/app/models/site/static_file_migration.rb +++ b/app/models/site/static_file_migration.rb @@ -79,7 +79,7 @@ class Site end # Guardamos los cambios - unless doc.save(false) + unless doc.save(validate: false) log.write "#{doc.path.relative} no se pudo guardar\n" end diff --git a/app/services/post_service.rb b/app/services/post_service.rb index 0f6bac19..b97a3fdd 100644 --- a/app/services/post_service.rb +++ b/app/services/post_service.rb @@ -47,18 +47,23 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do def reorder posts = site.posts(lang: lang) reorder = params.require(:post).permit(reorder: {}).try(:[], :reorder) + modified = PostRelation.new(site: site) files = reorder.keys.map do |id| post = posts.find(id, sha1: true) - next unless post.attributes.include? :order + order = reorder[id].to_i - post.usuaries << usuarie - post.order.value = reorder[id].to_i + next unless post.attributes.include? :order + next if post.order.value == order + + modified << post + post.order.value = order post.path.absolute end.compact # TODO: Implementar transacciones! - posts.save_all && commit(action: :reorder, file: files) + modified.save_all(validate: false) && + commit(action: :reorder, file: files) end private diff --git a/app/views/posts/index.haml b/app/views/posts/index.haml index 4c903485..e50bdfa8 100644 --- a/app/views/posts/index.haml +++ b/app/views/posts/index.haml @@ -25,62 +25,61 @@ %section.col = render 'layouts/flash' - - if @posts.present? - .row - .col - = form_tag site_posts_reorder_path, method: :post do - = submit_tag t('posts.reorder'), class: 'btn submit-reorder d-none' - -# TODO: Permitir cambiar el idioma - %table.table.table-condensed.table-draggable - %tbody - - @posts.each_with_index do |post, i| - -# - saltearse el post a menos que esté en la categoría por - la que estamos filtrando - - if @category - - next unless post.attributes.include? :categories - - next unless post.categories.value.include?(@category) - - if @layout - - next unless post.layout.name == @layout - - next unless policy(post).show? - %tr - %td - .handle - = image_tag 'arrows-alt-v.svg' - = hidden_field 'post[reorder]', post.sha1, - value: i, class: 'reorder' - %td - %small - = link_to post.layout.name.to_s.humanize, - site_posts_path(@site, layout: post.layout.name) - %br/ - = link_to post.title.value, - site_post_path(@site, post.id) - - if post.attributes.include? :draft - - if post.draft.value - %span.badge.badge-primary - = post_label_t(:draft, post: post) - - if post.attributes.include? :categories - - unless post.categories.value.empty? - %br - %small - - post.categories.value.each do |c| - = link_to c, site_posts_path(@site, category: c) - - %td - = post.date.value.strftime('%F') - %br/ - = post.try(:order).try(:value) - %td - - if policy(post).edit? - = link_to t('posts.edit'), - edit_site_post_path(@site, post.id), - class: 'btn' - - if policy(post).destroy? - = link_to t('posts.destroy'), - site_post_path(@site, post.id), - class: 'btn', - method: :delete, - data: { confirm: t('posts.confirm_destroy') } - - else + - if @posts.empty? %h2= t('posts.none') + - else + = form_tag site_posts_reorder_path, method: :post do + = submit_tag t('posts.reorder'), class: 'btn submit-reorder' + -# TODO: Permitir cambiar el idioma + %table.table.table-condensed.table-draggable + %tbody + - @posts.each_with_index do |post, i| + -# + saltearse el post a menos que esté en la categoría por + la que estamos filtrando + - if @category + - next unless post.attributes.include? :categories + - next unless post.categories.value.include?(@category) + - if @layout + - next unless post.layout.name == @layout + - next unless policy(post).show? + %tr + %td + .handle + = image_tag 'arrows-alt-v.svg' + -# Orden más alto es mayor prioridad + = hidden_field 'post[reorder]', post.sha1, + value: @posts.length - i, class: 'reorder' + %td + %small + = link_to post.layout.name.to_s.humanize, + site_posts_path(@site, layout: post.layout.name) + %br/ + = link_to post.title.value, + site_post_path(@site, post.id) + - if post.attributes.include? :draft + - if post.draft.value + %span.badge.badge-primary + = post_label_t(:draft, post: post) + - if post.attributes.include? :categories + - unless post.categories.value.empty? + %br + %small + - post.categories.value.each do |c| + = link_to c, site_posts_path(@site, category: c) + + %td + = post.date.value.strftime('%F') + %br/ + = post.try(:order).try(:value) + %td + - if policy(post).edit? + = link_to t('posts.edit'), + edit_site_post_path(@site, post.id), + class: 'btn' + - if policy(post).destroy? + = link_to t('posts.destroy'), + site_post_path(@site, post.id), + class: 'btn', + method: :delete, + data: { confirm: t('posts.confirm_destroy') } diff --git a/doc/reordenar.md b/doc/reordenar.md index 99a9ed07..e40e92c8 100644 --- a/doc/reordenar.md +++ b/doc/reordenar.md @@ -23,3 +23,11 @@ otra vez. Lo más controlado sería enviar exactamente el id del post con su nueva ubicación en el orden. Esta es la implementación anterior. + +*** + +El orden es descendiente (fechas más nuevas primero), pero el orden que +estuvimos usando es ascendientes (números más bajos primero). Es más +simple invertir la lógica y hacer todo el orden descendiente. Para eso +los artículos más nuevos tienen que tener el número de orden +correspondiente a la posición en el array ordenado por fecha. diff --git a/test/models/post_test.rb b/test/models/post_test.rb index 827aeb5c..85280722 100644 --- a/test/models/post_test.rb +++ b/test/models/post_test.rb @@ -66,7 +66,7 @@ class PostTest < ActiveSupport::TestCase test 'se pueden guardar sin validar' do assert @post.valid? @post.title.value = '' - assert @post.save(false) + assert @post.save(validate: false) end test 'se pueden guardar los cambios' do From 64f45091ffbfdb5410325cad35553c9d50c9e5e4 Mon Sep 17 00:00:00 2001 From: f Date: Wed, 11 Dec 2019 17:09:20 -0300 Subject: [PATCH 10/66] =?UTF-8?q?actualizaci=C3=B3n=20de=20seguridad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 5d14ff4b..053f93bd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -256,7 +256,7 @@ GEM coderay (~> 1.1.0) method_source (~> 0.9.0) public_suffix (4.0.1) - puma (4.3.0) + puma (4.3.1) nio4r (~> 2.0) pundit (2.1.0) activesupport (>= 3.0.0) From 04ccb9f3a924f7c1c19ee317b83a9328122c8527 Mon Sep 17 00:00:00 2001 From: f Date: Wed, 11 Dec 2019 17:10:01 -0300 Subject: [PATCH 11/66] performance: no buscar usuaries en la base de datos cuando no hay ningune --- app/models/post.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/models/post.rb b/app/models/post.rb index 8daf9ed1..91d18d9f 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -234,8 +234,16 @@ class Post < OpenStruct end alias update update_attributes + # El Document guarda un Array de los ids de Usuarie. Si está vacío, + # no hacemos una consulta vacía. Si no, traemos todes les Usuaries + # por su id y convertimos a Array para poder agregar o quitar luego + # sin pasar por ActiveRecord. def usuaries - @usuaries ||= Usuarie.where(id: document_usuaries).to_a + @usuaries ||= if (d = document_usuaries).empty? + [] + else + Usuarie.where(id: d).to_a + end end private From f175212c431772def969a792dd5dc190e7e90a64 Mon Sep 17 00:00:00 2001 From: f Date: Wed, 11 Dec 2019 17:19:17 -0300 Subject: [PATCH 12/66] git 2.22.2 tiene varios CVE resueltos --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 6c9855c1..46872ab1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -74,6 +74,8 @@ RUN apk add --no-cache postgresql-libs libssh2 file rsync git # Chequear que la versión de ruby sea la correcta RUN test "2.5.7" = `ruby -e 'puts RUBY_VERSION'` +# Versión de git +RUN test "2.22.2" = `git --version | cut -d ' ' -f 3` # https://github.com/rubygems/rubygems/issues/2918 # https://gitlab.alpinelinux.org/alpine/aports/issues/10808 From 5fd1e6e762a87dc263ecffa98d46e576b109abc7 Mon Sep 17 00:00:00 2001 From: f Date: Sat, 14 Dec 2019 13:21:42 -0300 Subject: [PATCH 13/66] estamos en alpine 3.9 --- Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 46872ab1..6c9855c1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -74,8 +74,6 @@ RUN apk add --no-cache postgresql-libs libssh2 file rsync git # Chequear que la versión de ruby sea la correcta RUN test "2.5.7" = `ruby -e 'puts RUBY_VERSION'` -# Versión de git -RUN test "2.22.2" = `git --version | cut -d ' ' -f 3` # https://github.com/rubygems/rubygems/issues/2918 # https://gitlab.alpinelinux.org/alpine/aports/issues/10808 From 1dcdc632cfe6fe87179364ed1344a32f2858b72c Mon Sep 17 00:00:00 2001 From: f Date: Sat, 14 Dec 2019 13:22:07 -0300 Subject: [PATCH 14/66] compilar las gemas que tengan extconf --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 17d93c55..6a1429bf 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ load: mkdir -p $@ gem_dir := $(shell readlink -f ../gems) -gems := $(shell bundle show --paths | xargs -I {} sh -c 'test -d {}/ext && basename {}') +gems := $(shell bundle show --paths | xargs -I {} sh -c 'test -f {}/ext/*/extconf.rb && basename {}') gems_musl := $(patsubst %,$(gem_dir)/%-x86_64-linux-musl.gem,$(gems)) $(gem_dir)/%-x86_64-linux-musl.gem: From 0229094f3fb5a9e57b1cb67fb42b16b9dd292bef Mon Sep 17 00:00:00 2001 From: f Date: Thu, 19 Dec 2019 15:02:46 -0300 Subject: [PATCH 15/66] =?UTF-8?q?actualizaci=C3=B3n=20para=20subsanar=20el?= =?UTF-8?q?=20CVE-2019-16782?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.openwall.com/lists/oss-security/2019/12/18/2 --- Gemfile.lock | 114 +++++++++++++++++++++++++-------------------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 053f93bd..9869aefd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -16,56 +16,56 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (6.0.1) - actionpack (= 6.0.1) + actioncable (6.0.2.1) + actionpack (= 6.0.2.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.0.1) - actionpack (= 6.0.1) - activejob (= 6.0.1) - activerecord (= 6.0.1) - activestorage (= 6.0.1) - activesupport (= 6.0.1) + actionmailbox (6.0.2.1) + actionpack (= 6.0.2.1) + activejob (= 6.0.2.1) + activerecord (= 6.0.2.1) + activestorage (= 6.0.2.1) + activesupport (= 6.0.2.1) mail (>= 2.7.1) - actionmailer (6.0.1) - actionpack (= 6.0.1) - actionview (= 6.0.1) - activejob (= 6.0.1) + actionmailer (6.0.2.1) + actionpack (= 6.0.2.1) + actionview (= 6.0.2.1) + activejob (= 6.0.2.1) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.0.1) - actionview (= 6.0.1) - activesupport (= 6.0.1) - rack (~> 2.0) + actionpack (6.0.2.1) + actionview (= 6.0.2.1) + activesupport (= 6.0.2.1) + rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (6.0.1) - actionpack (= 6.0.1) - activerecord (= 6.0.1) - activestorage (= 6.0.1) - activesupport (= 6.0.1) + actiontext (6.0.2.1) + actionpack (= 6.0.2.1) + activerecord (= 6.0.2.1) + activestorage (= 6.0.2.1) + activesupport (= 6.0.2.1) nokogiri (>= 1.8.5) - actionview (6.0.1) - activesupport (= 6.0.1) + actionview (6.0.2.1) + activesupport (= 6.0.2.1) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (6.0.1) - activesupport (= 6.0.1) + activejob (6.0.2.1) + activesupport (= 6.0.2.1) globalid (>= 0.3.6) - activemodel (6.0.1) - activesupport (= 6.0.1) - activerecord (6.0.1) - activemodel (= 6.0.1) - activesupport (= 6.0.1) - activestorage (6.0.1) - actionpack (= 6.0.1) - activejob (= 6.0.1) - activerecord (= 6.0.1) + activemodel (6.0.2.1) + activesupport (= 6.0.2.1) + activerecord (6.0.2.1) + activemodel (= 6.0.2.1) + activesupport (= 6.0.2.1) + activestorage (6.0.2.1) + actionpack (= 6.0.2.1) + activejob (= 6.0.2.1) + activerecord (= 6.0.2.1) marcel (~> 0.3.1) - activesupport (6.0.1) + activesupport (6.0.2.1) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -85,7 +85,7 @@ GEM autoprefixer-rails (>= 9.1.0) popper_js (>= 1.14.3, < 2) sassc-rails (>= 2.0.0) - builder (3.2.3) + builder (3.2.4) capistrano (3.11.1) airbrussh (>= 1.0.0) i18n @@ -220,7 +220,7 @@ GEM rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) ruby_dep (~> 1.2) - loofah (2.3.1) + loofah (2.4.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) @@ -242,7 +242,7 @@ GEM net-ssh (5.2.0) netaddr (2.0.4) nio4r (2.5.2) - nokogiri (1.10.5) + nokogiri (1.10.7) mini_portile2 (~> 2.4.0) orm_adapter (0.5.0) parallel (1.17.0) @@ -260,25 +260,25 @@ GEM nio4r (~> 2.0) pundit (2.1.0) activesupport (>= 3.0.0) - rack (2.0.7) + rack (2.0.8) rack-proxy (0.6.5) rack rack-test (1.1.0) rack (>= 1.0, < 3) - rails (6.0.1) - actioncable (= 6.0.1) - actionmailbox (= 6.0.1) - actionmailer (= 6.0.1) - actionpack (= 6.0.1) - actiontext (= 6.0.1) - actionview (= 6.0.1) - activejob (= 6.0.1) - activemodel (= 6.0.1) - activerecord (= 6.0.1) - activestorage (= 6.0.1) - activesupport (= 6.0.1) + rails (6.0.2.1) + actioncable (= 6.0.2.1) + actionmailbox (= 6.0.2.1) + actionmailer (= 6.0.2.1) + actionpack (= 6.0.2.1) + actiontext (= 6.0.2.1) + actionview (= 6.0.2.1) + activejob (= 6.0.2.1) + activemodel (= 6.0.2.1) + activerecord (= 6.0.2.1) + activestorage (= 6.0.2.1) + activesupport (= 6.0.2.1) bundler (>= 1.3.0) - railties (= 6.0.1) + railties (= 6.0.2.1) sprockets-rails (>= 2.0.0) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) @@ -290,9 +290,9 @@ GEM railties (>= 6.0.0, < 7) rails_warden (0.6.0) warden (>= 1.2.0) - railties (6.0.1) - actionpack (= 6.0.1) - activesupport (= 6.0.1) + railties (6.0.2.1) + actionpack (= 6.0.2.1) + activesupport (= 6.0.2.1) method_source rake (>= 0.8.7) thor (>= 0.20.3, < 2.0) @@ -390,7 +390,7 @@ GEM temple (0.8.2) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) - thor (0.20.3) + thor (1.0.1) thread_safe (0.3.6) tilt (2.0.9) turbolinks (5.2.0) @@ -423,7 +423,7 @@ GEM websocket-extensions (0.1.4) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.2.1) + zeitwerk (2.2.2) PLATFORMS ruby From 4ef72f81d29d302617fd3fb7805b5a52f4066190 Mon Sep 17 00:00:00 2001 From: f Date: Fri, 20 Dec 2019 15:51:20 -0300 Subject: [PATCH 16/66] =?UTF-8?q?actualizaci=C3=B3n=20a=20alpine=203.11=20?= =?UTF-8?q?y=20ruby=202.6.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .rubocop.yml | 58 +-------------------------------- .ruby-version | 2 +- Dockerfile | 12 +++---- Gemfile | 2 +- Gemfile.lock | 90 +++++++++++++++++++++++++-------------------------- Makefile | 1 + 6 files changed, 54 insertions(+), 111 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 91d6fc6e..b970b82a 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,61 +1,5 @@ AllCops: - TargetRubyVersion: '2.5' + TargetRubyVersion: '2.6' Style/AsciiComments: Enabled: false - -# Sólo existe para molestarnos (?) -Metrics/AbcSize: - Enabled: false - -Metrics/LineLength: - Exclude: - - 'db/schema.rb' - - 'db/migrate/*.rb' - - 'app/models/site.rb' - -Metrics/MethodLength: - Exclude: - - 'db/schema.rb' - - 'db/migrate/*.rb' - - 'app/models/site.rb' - - 'app/controllers/sites_controller.rb' - - 'app/controllers/posts_controller.rb' - - 'app/controllers/invitadxs_controller.rb' - - 'app/controllers/i18n_controller.rb' - - 'app/controllers/collaborations_controller.rb' - - 'app/controllers/usuaries_controller.rb' - - 'app/models/post.rb' - -Metrics/BlockLength: - Exclude: - - 'config/environments/development.rb' - - 'config/environments/production.rb' - - 'config/initializers/devise.rb' - - 'db/schema.rb' - - 'config/routes.rb' - - 'test/controllers/sites_controller_test.rb' - -Metrics/ClassLength: - Exclude: - - 'app/models/site.rb' - - 'app/controllers/posts_controller.rb' - - 'app/controllers/sites_controller.rb' - - 'test/models/post_test.rb' - - 'test/controllers/sites_controller_test.rb' - -Lint/HandleExceptions: - Exclude: - - 'app/controllers/posts_controller.rb' - -Style/GuardClause: - Exclude: - - 'app/controllers/posts_controller.rb' - -Metrics/PerceivedComplexity: - Exclude: - - 'app/controllers/posts_controller.rb' - -Lint/UnreachableCode: - Exclude: - - 'app/policies/post_policy.rb' diff --git a/.ruby-version b/.ruby-version index 35d16fb1..57cf282e 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.5.7 +2.6.5 diff --git a/Dockerfile b/Dockerfile index 6c9855c1..ff0c9a58 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ # el mismo repositorio de trabajo. Cuando tengamos CI/CD algunas cosas # como el tarball van a tener que cambiar porque ya vamos a haber hecho # un clone/pull limpio. -FROM alpine:3.10 as build +FROM alpine:3.11 as build MAINTAINER "f " ARG RAILS_MASTER_KEY @@ -19,7 +19,7 @@ RUN apk add --no-cache postgresql-libs git yarn brotli libssh2 # https://github.com/rubygems/rubygems/issues/2918 # https://gitlab.alpinelinux.org/alpine/aports/issues/10808 COPY ./rubygems-platform-musl.patch /tmp/ -RUN cd /usr/lib/ruby/2.5.0 && patch -Np 0 -i /tmp/rubygems-platform-musl.patch +RUN cd /usr/lib/ruby/2.6.0 && patch -Np 0 -i /tmp/rubygems-platform-musl.patch # Agregar el usuario RUN addgroup -g 82 -S www-data @@ -37,7 +37,7 @@ COPY --chown=app:www-data ./Gemfile . COPY --chown=app:www-data ./Gemfile.lock . RUN bundle install --no-cache --path=./vendor --without='test development' # Vaciar la caché -RUN rm vendor/ruby/2.5.0/cache/*.gem +RUN rm vendor/ruby/2.6.0/cache/*.gem # Copiar el repositorio git COPY --chown=app:www-data ./.git/ ./.git/ @@ -64,7 +64,7 @@ RUN bundle clean RUN rm -rf ./node_modules ./tmp/cache ./.git # Contenedor final -FROM sutty/monit:3.9 +FROM sutty/monit:latest ENV RAILS_ENV production # Instalar las dependencias, separamos la librería de base de datos para @@ -73,12 +73,12 @@ RUN apk add --no-cache libxslt libxml2 tzdata ruby ruby-bundler ruby-json ruby-b RUN apk add --no-cache postgresql-libs libssh2 file rsync git # Chequear que la versión de ruby sea la correcta -RUN test "2.5.7" = `ruby -e 'puts RUBY_VERSION'` +RUN test "2.6.5" = `ruby -e 'puts RUBY_VERSION'` # https://github.com/rubygems/rubygems/issues/2918 # https://gitlab.alpinelinux.org/alpine/aports/issues/10808 COPY ./rubygems-platform-musl.patch /tmp/ -RUN cd /usr/lib/ruby/2.5.0 && patch -Np 0 -i /tmp/rubygems-platform-musl.patch +RUN cd /usr/lib/ruby/2.6.0 && patch -Np 0 -i /tmp/rubygems-platform-musl.patch # Necesitamos yarn para que Jekyll pueda generar los sitios # XXX: Eliminarlo cuando extraigamos la generación de sitios del proceso diff --git a/Gemfile b/Gemfile index e1f61e0a..2d86c067 100644 --- a/Gemfile +++ b/Gemfile @@ -15,7 +15,7 @@ git_source(:github) do |repo_name| end # Cambiar en Dockerfile también -ruby '2.5.7' +ruby '2.6.5' gem 'dotenv-rails', require: 'dotenv/rails-now' diff --git a/Gemfile.lock b/Gemfile.lock index 9869aefd..717618ae 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -73,20 +73,20 @@ GEM zeitwerk (~> 2.2) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) - airbrussh (1.3.4) + airbrussh (1.4.0) sshkit (>= 1.6.1, != 1.7.0) ast (2.4.0) - autoprefixer-rails (9.6.1.1) + autoprefixer-rails (9.7.3) execjs bcrypt (3.1.13) bcrypt_pbkdf (1.0.1) bindex (0.8.1) - bootstrap (4.3.1) + bootstrap (4.4.1) autoprefixer-rails (>= 9.1.0) popper_js (>= 1.14.3, < 2) sassc-rails (>= 2.0.0) builder (3.2.4) - capistrano (3.11.1) + capistrano (3.11.2) airbrussh (>= 1.0.0) i18n rake (>= 10.0.0) @@ -108,11 +108,10 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (>= 2.0, < 4.0) - childprocess (2.0.0) - rake (< 13.0) + childprocess (3.0.0) coderay (1.1.2) colorator (1.1.0) - commonmarker (0.20.1) + commonmarker (0.20.2) ruby-enum (~> 0.5) concurrent-ruby (1.1.5) crass (1.0.5) @@ -123,8 +122,8 @@ GEM railties (>= 4.1.0) responders warden (~> 1.2.3) - devise-i18n (1.8.2) - devise (>= 4.6) + devise-i18n (1.9.0) + devise (>= 4.7.1) devise_invitable (2.0.1) actionmailer (>= 5.0) devise (>= 4.6) @@ -136,8 +135,8 @@ GEM em-websocket (0.5.1) eventmachine (>= 0.12.9) http_parser.rb (~> 0.6.0) - email_address (0.1.11) - netaddr (~> 2.0) + email_address (0.1.12) + netaddr (>= 2.0.4, < 3) simpleidn erubi (1.9.0) eventmachine (1.2.7) @@ -145,14 +144,14 @@ GEM actionmailer (>= 4.0, < 7) activesupport (>= 4.0, < 7) execjs (2.7.0) - factory_bot (5.0.2) + factory_bot (5.1.1) activesupport (>= 4.2.0) - factory_bot_rails (5.0.2) - factory_bot (~> 5.0.2) + factory_bot_rails (5.1.1) + factory_bot (~> 5.1.0) railties (>= 4.2.0) - ffi (1.11.1) + ffi (1.11.3) forwardable-extended (2.6.0) - friendly_id (5.2.5) + friendly_id (5.3.0) activerecord (>= 4.0.0) globalid (0.4.2) activesupport (>= 4.2.0) @@ -161,13 +160,12 @@ GEM tilt haml-lint (0.999.999) haml_lint - haml_lint (0.33.0) + haml_lint (0.34.1) haml (>= 4.0, < 5.2) rainbow - rake (>= 10, < 13) rubocop (>= 0.50.0) sysexits (~> 1.1) - hamlit (2.10.0) + hamlit (2.11.0) temple (>= 0.8.2) thor tilt @@ -180,13 +178,13 @@ GEM http_parser.rb (0.6.0) i18n (1.7.0) concurrent-ruby (~> 1.0) - image_processing (1.9.3) + image_processing (1.10.0) mini_magick (>= 4.9.5, < 5) ruby-vips (>= 2.0.13, < 3) - inline_svg (1.5.2) + inline_svg (1.6.0) activesupport (>= 3.0) nokogiri (>= 1.6) - jaro_winkler (1.5.3) + jaro_winkler (1.5.4) jbuilder (2.9.1) activesupport (>= 4.2.0) jekyll (4.0.0) @@ -204,7 +202,7 @@ GEM rouge (~> 3.0) safe_yaml (~> 1.0) terminal-table (~> 1.8) - jekyll-sass-converter (2.0.0) + jekyll-sass-converter (2.0.1) sassc (> 2.0.1, < 3.0) jekyll-watch (2.2.1) listen (~> 3.0) @@ -245,8 +243,8 @@ GEM nokogiri (1.10.7) mini_portile2 (~> 2.4.0) orm_adapter (0.5.0) - parallel (1.17.0) - parser (2.6.4.1) + parallel (1.19.1) + parser (2.6.5.0) ast (~> 2.4.0) pathutil (0.16.2) forwardable-extended (~> 2.6) @@ -297,7 +295,7 @@ GEM rake (>= 0.8.7) thor (>= 0.20.3, < 2.0) rainbow (3.0.0) - rake (12.3.3) + rake (13.0.1) rb-fsevent (0.10.3) rb-inotify (0.10.0) ffi (~> 1.0) @@ -311,39 +309,39 @@ GEM redis-activesupport (5.2.0) activesupport (>= 3, < 7) redis-store (>= 1.3, < 2) - redis-rack (2.0.5) + redis-rack (2.0.6) rack (>= 1.5, < 3) redis-store (>= 1.2, < 2) redis-rails (5.0.2) redis-actionpack (>= 5.0, < 6) redis-activesupport (>= 5.0, < 6) redis-store (>= 1.2, < 2) - redis-store (1.6.0) - redis (>= 2.2, < 5) - request_store (1.4.1) + redis-store (1.8.1) + redis (>= 4, < 5) + request_store (1.5.0) rack (>= 1.4) responders (3.0.0) actionpack (>= 5.0) railties (>= 5.0) - rouge (3.11.0) - rubocop (0.74.0) + rouge (3.14.0) + rubocop (0.78.0) jaro_winkler (~> 1.5.1) parallel (~> 1.10) parser (>= 2.6) rainbow (>= 2.2.2, < 4.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 1.7) - rubocop-rails (2.3.2) + rubocop-rails (2.4.0) rack (>= 1.1) rubocop (>= 0.72.0) ruby-enum (0.7.2) i18n ruby-progressbar (1.10.1) - ruby-vips (2.0.15) + ruby-vips (2.0.16) ffi (~> 1.9) ruby_dep (1.5.0) - rubyzip (1.3.0) - rugged (0.28.3.1) + rubyzip (2.0.0) + rugged (0.28.4.1) safe_yaml (1.0.5) sass (3.7.4) sass-listen (~> 4.0.0) @@ -356,7 +354,7 @@ GEM sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) - sassc (2.2.0) + sassc (2.2.1) ffi (~> 1.9) sassc-rails (2.1.2) railties (>= 4.0.0) @@ -364,9 +362,9 @@ GEM sprockets (> 3.0) sprockets-rails tilt - selenium-webdriver (3.142.4) - childprocess (>= 0.5, < 3.0) - rubyzip (~> 1.2, >= 1.2.2) + selenium-webdriver (3.142.6) + childprocess (>= 0.5, < 4.0) + rubyzip (>= 1.2.2) simpleidn (0.1.1) unf (~> 0.1.4) spring (2.1.0) @@ -380,7 +378,7 @@ GEM actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - sqlite3 (1.4.1) + sqlite3 (1.4.2) sshkit (1.20.0) net-scp (>= 1.1.2) net-ssh (>= 2.8.0) @@ -392,13 +390,13 @@ GEM unicode-display_width (~> 1.1, >= 1.1.1) thor (1.0.1) thread_safe (0.3.6) - tilt (2.0.9) - turbolinks (5.2.0) + tilt (2.0.10) + turbolinks (5.2.1) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) tzinfo (1.2.5) thread_safe (~> 0.1) - uglifier (4.1.20) + uglifier (4.2.0) execjs (>= 0.3.0, < 3) unf (0.1.4) unf_ext @@ -414,7 +412,7 @@ GEM activemodel (>= 6.0.0) bindex (>= 0.4.0) railties (>= 6.0.0) - webpacker (4.0.7) + webpacker (4.2.2) activesupport (>= 4.2) rack-proxy (>= 0.6.1) railties (>= 4.2) @@ -489,7 +487,7 @@ DEPENDENCIES yaml_db! RUBY VERSION - ruby 2.5.7p206 + ruby 2.6.5p114 BUNDLED WITH 2.0.2 diff --git a/Makefile b/Makefile index 6a1429bf..f420e73f 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,7 @@ load: gem_dir := $(shell readlink -f ../gems) gems := $(shell bundle show --paths | xargs -I {} sh -c 'test -f {}/ext/*/extconf.rb && basename {}') +gems += $(shell bundle show --paths | xargs -I {} sh -c 'find {} -name extconf.rb && basename {}') gems_musl := $(patsubst %,$(gem_dir)/%-x86_64-linux-musl.gem,$(gems)) $(gem_dir)/%-x86_64-linux-musl.gem: From b9fd957f7e15f507fb061074e5b01052cec653cd Mon Sep 17 00:00:00 2001 From: f Date: Fri, 20 Dec 2019 15:59:42 -0300 Subject: [PATCH 17/66] usar sassc para compilar las hojas de estilo --- Gemfile | 2 +- Gemfile.lock | 13 +------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/Gemfile b/Gemfile index 2d86c067..c1f7eef1 100644 --- a/Gemfile +++ b/Gemfile @@ -24,7 +24,7 @@ gem 'rails', '~> 6' # Use Puma as the app server gem 'puma' # Use SCSS for stylesheets -gem 'sass-rails', '~> 5.0' +gem 'sassc-rails' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # See https://github.com/rails/execjs#readme for more supported runtimes diff --git a/Gemfile.lock b/Gemfile.lock index 717618ae..05abbea5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -343,17 +343,6 @@ GEM rubyzip (2.0.0) rugged (0.28.4.1) safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sass-rails (5.1.0) - railties (>= 5.2.0) - sass (~> 3.1) - sprockets (>= 2.8, < 4.0) - sprockets-rails (>= 2.0, < 4.0) - tilt (>= 1.1, < 3) sassc (2.2.1) ffi (~> 1.9) sassc-rails (2.1.2) @@ -472,7 +461,7 @@ DEPENDENCIES rubocop-rails rubyzip rugged - sass-rails (~> 5.0) + sassc-rails selenium-webdriver spring spring-watcher-listen (~> 2.0.0) From 83762bd0e6cf443f5ad1557e426166e3fecd16df Mon Sep 17 00:00:00 2001 From: f Date: Mon, 30 Dec 2019 15:29:40 -0300 Subject: [PATCH 18/66] actualizacion --- Gemfile.lock | 16 ++++++++-------- Makefile | 9 ++++----- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 05abbea5..a762a7d6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -244,16 +244,16 @@ GEM mini_portile2 (~> 2.4.0) orm_adapter (0.5.0) parallel (1.19.1) - parser (2.6.5.0) + parser (2.7.0.1) ast (~> 2.4.0) pathutil (0.16.2) forwardable-extended (~> 2.6) - pg (1.1.4) + pg (1.2.0) popper_js (1.14.5) pry (0.12.2) coderay (~> 1.1.0) method_source (~> 0.9.0) - public_suffix (4.0.1) + public_suffix (4.0.2) puma (4.3.1) nio4r (~> 2.0) pundit (2.1.0) @@ -297,7 +297,7 @@ GEM rainbow (3.0.0) rake (13.0.1) rb-fsevent (0.10.3) - rb-inotify (0.10.0) + rb-inotify (0.10.1) ffi (~> 1.0) rbnacl (4.0.2) ffi @@ -331,7 +331,7 @@ GEM rainbow (>= 2.2.2, < 4.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 1.7) - rubocop-rails (2.4.0) + rubocop-rails (2.4.1) rack (>= 1.1) rubocop (>= 0.72.0) ruby-enum (0.7.2) @@ -351,7 +351,7 @@ GEM sprockets (> 3.0) sprockets-rails tilt - selenium-webdriver (3.142.6) + selenium-webdriver (3.142.7) childprocess (>= 0.5, < 4.0) rubyzip (>= 1.2.2) simpleidn (0.1.1) @@ -360,7 +360,7 @@ GEM spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) - sprockets (3.7.2) + sprockets (4.0.0) concurrent-ruby (~> 1.0) rack (> 1, < 3) sprockets-rails (3.2.1) @@ -383,7 +383,7 @@ GEM turbolinks (5.2.1) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) - tzinfo (1.2.5) + tzinfo (1.2.6) thread_safe (~> 0.1) uglifier (4.2.0) execjs (>= 0.3.0, < 3) diff --git a/Makefile b/Makefile index f420e73f..84006b5b 100644 --- a/Makefile +++ b/Makefile @@ -12,8 +12,7 @@ build: docker build --build-arg="RAILS_MASTER_KEY=`cat config/master.key`" -t sutty/sutty . save: - docker save sutty/sutty:latest | gzip > sutty.latest.gz - scp sutty.latest.gz root@sutty.nl: + docker save sutty/sutty:latest | gzip | ssh root@sutty.nl docker load load: ssh root@sutty.nl sh -c "gunzip -c sutty.latest.gz | docker load" @@ -24,7 +23,7 @@ load: gem_dir := $(shell readlink -f ../gems) gems := $(shell bundle show --paths | xargs -I {} sh -c 'test -f {}/ext/*/extconf.rb && basename {}') -gems += $(shell bundle show --paths | xargs -I {} sh -c 'find {} -name extconf.rb && basename {}') +gems += $(shell bundle show --paths | xargs -I {} sh -c 'test -f {}/ext/extconf.rb && basename {}') gems_musl := $(patsubst %,$(gem_dir)/%-x86_64-linux-musl.gem,$(gems)) $(gem_dir)/%-x86_64-linux-musl.gem: @@ -53,8 +52,8 @@ test-container: $(dirs) -v $(PWD)/root/public:/srv/http/_public \ -v $(PWD)/config/credentials.yml.enc:/srv/http/config/credentials.yml.enc \ -e RAILS_MASTER_KEY=`cat config/master.key` \ + -e RAILS_ENV=production \ -it \ --rm \ --name=sutty \ - sutty/sutty \ - /bin/sh + sutty/sutty /bin/sh From aa9806d8f6649fdfa8280a1895698d201a9adde0 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 2 Jan 2020 15:05:28 -0300 Subject: [PATCH 19/66] optimizacion: no preguntar si es usuarie todo el tiempo solo funciona cuando le usuarie es usuarie del sitio. si es invitade, la pregunta se hace por cada post. --- app/controllers/posts_controller.rb | 1 + app/views/posts/index.haml | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index fe8ad47d..4d999d9a 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -13,6 +13,7 @@ class PostsController < ApplicationController # TODO: Aplicar policy_scope @posts = @site.posts(lang: I18n.locale) @posts.sort_by!(:order, :date).reverse! + @usuarie = @site.usuarie? current_usuarie end def show diff --git a/app/views/posts/index.haml b/app/views/posts/index.haml index e50bdfa8..eab39338 100644 --- a/app/views/posts/index.haml +++ b/app/views/posts/index.haml @@ -42,7 +42,7 @@ - next unless post.categories.value.include?(@category) - if @layout - next unless post.layout.name == @layout - - next unless policy(post).show? + - next unless @usuarie || policy(post).show? %tr %td .handle @@ -73,11 +73,11 @@ %br/ = post.try(:order).try(:value) %td - - if policy(post).edit? + - if @usuarie || policy(post).edit? = link_to t('posts.edit'), edit_site_post_path(@site, post.id), class: 'btn' - - if policy(post).destroy? + - if @usuarie || policy(post).destroy? = link_to t('posts.destroy'), site_post_path(@site, post.id), class: 'btn', From 7467356659bead478e0975cf21222f0b52373fe3 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 2 Jan 2020 15:08:45 -0300 Subject: [PATCH 20/66] optimizacion: no sumar los atributos todo el tiempo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit con esta optimización bajamos 10s en la generación del índice de posts para observatoriociudad.org y alrededor de medio millón de asignaciones de variables! --- app/models/post.rb | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 91d18d9f..3e838e09 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -64,14 +64,6 @@ class Post < OpenStruct Digest::SHA1.hexdigest id end - # Levanta un error si al construir el artículo no pasamos un atributo. - def default_attributes_missing(**args) - DEFAULT_ATTRIBUTES.each do |attr| - i18n = I18n.t("exceptions.post.#{attr}_missing") - - raise ArgumentError, i18n unless args[attr].present? - end - end # Solo ejecuta la magia de OpenStruct si el campo existe en la # plantilla @@ -101,12 +93,16 @@ class Post < OpenStruct # Detecta si es un atributo válido o no, a partir de la tabla de la # plantilla def attribute?(mid) - attrs = DEFAULT_ATTRIBUTES + PRIVATE_ATTRIBUTES + PUBLIC_ATTRIBUTES - if singleton_class.method_defined? :attributes - (attrs + attributes).include? attribute_name(mid) - else - attrs.include? attribute_name(mid) + mid = attribute_name mid + included = DEFAULT_ATTRIBUTES.include?(mid) || + PRIVATE_ATTRIBUTES.include?(mid) || + PUBLIC_ATTRIBUTES.include?(mid) + + if !included && singleton_class.method_defined?(:attributes) + included = attributes.include? attribute_name(mid) end + + included end # Devuelve los strong params para el layout @@ -248,6 +244,15 @@ class Post < OpenStruct private + # Levanta un error si al construir el artículo no pasamos un atributo. + def default_attributes_missing(**args) + DEFAULT_ATTRIBUTES.each do |attr| + i18n = I18n.t("exceptions.post.#{attr}_missing") + + raise ArgumentError, i18n unless args[attr].present? + end + end + def document_usuaries document.data.fetch('usuaries', []) end From 0437444247f25cb936f483b6da3b4457c6ed79a4 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 2 Jan 2020 20:20:41 -0300 Subject: [PATCH 21/66] optimizacion: solo leer el contenido de los docs cuando se los necesite --- app/models/post.rb | 23 ++++++++++++++++++----- app/models/site.rb | 8 ++------ config/initializers/core_extensions.rb | 6 ++++++ test/models/post_test.rb | 2 +- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 3e838e09..8b851adc 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'jekyll/utils' - # Esta clase representa un post en un sitio jekyll e incluye métodos # para modificarlos y crear nuevos. # @@ -15,6 +13,15 @@ class Post < OpenStruct PRIVATE_ATTRIBUTES = %i[path slug attributes errors].freeze PUBLIC_ATTRIBUTES = %i[lang date].freeze + class << self + # Obtiene el layout sin leer el Document + def find_layout(doc) + SafeYAML.load(IO.foreach(doc.path).lazy.grep(/^layout: /).take(1).first) + .try(:[], 'layout') + .try(:to_sym) + end + end + # Redefinir el inicializador de OpenStruct # # @param site: [Site] el sitio en Sutty @@ -33,6 +40,10 @@ class Post < OpenStruct # MetadataFactory devuelve un tipo de campo por cada campo. A # partir de ahí se pueden obtener los valores actuales y una lista # de valores por defecto. + # + # XXX: En el primer intento de hacerlo más óptimo, movimos esta + # lógica a instanciación bajo demanda, pero no solo no logramos + # optimizar sino que aumentamos el tiempo de carga :/ layout.metadata.each_pair do |name, template| send "#{name}=".to_sym, MetadataFactory.build(document: document, @@ -47,13 +58,15 @@ class Post < OpenStruct required: template['required']) end + # TODO: Llamar dinámicamente load_lang! load_slug! load_date! load_path! - # Leer el documento - read + # XXX: No usamos Post#read porque a esta altura todavía no sabemos + # nada del Document + document.read! if File.exist? document.path end def id @@ -172,7 +185,7 @@ class Post < OpenStruct return unless written? document.path = path.absolute - document.read + document.read! end def new? diff --git a/app/models/site.rb b/app/models/site.rb index e82a347b..9d734247 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -176,14 +176,10 @@ class Site < ApplicationRecord @posts[lang] = PostRelation.new site: self - # Jekyll lee los documentos en orden cronológico pero los invierte - # durante la renderización. Usamos el orden cronológico inverso por - # defecto para mostrar los artículos más nuevos primero. - docs = collections[lang.to_s].try(:docs).try(:sort) { |a, b| b <=> a } # No fallar si no existe colección para este idioma # XXX: queremos fallar silenciosamente? - (docs || []).each do |doc| - layout = layouts[doc.data['layout'].to_sym] + (collections[lang.to_s].try(:docs) || []).each do |doc| + layout = layouts[Post.find_layout(doc)] @posts[lang].build(document: doc, layout: layout, lang: lang) end diff --git a/config/initializers/core_extensions.rb b/config/initializers/core_extensions.rb index 66003a00..be441390 100644 --- a/config/initializers/core_extensions.rb +++ b/config/initializers/core_extensions.rb @@ -27,4 +27,10 @@ module Jekyll ThemeAssetsReader.class_eval do def read; end end + + # Prevenir la lectura del documento + Document.class_eval do + alias_method :read!, :read + def read; end + end end diff --git a/test/models/post_test.rb b/test/models/post_test.rb index 85280722..82a06cb4 100644 --- a/test/models/post_test.rb +++ b/test/models/post_test.rb @@ -82,7 +82,7 @@ class PostTest < ActiveSupport::TestCase document = Jekyll::Document.new(@post.path.value, site: @site.jekyll, collection: collection) - document.read + document.read! assert document.data['categories'].include?(title) assert_equal title, document.data['title'] From 5c8d8aafdf2bd2dba86b98f3e91f57fe5ef8557d Mon Sep 17 00:00:00 2001 From: f Date: Thu, 2 Jan 2020 20:29:04 -0300 Subject: [PATCH 22/66] implementar uuid como metadata --- app/models/post.rb | 17 ++++++++++++++--- app/models/post_relation.rb | 10 +++++++--- app/services/post_service.rb | 10 +++++----- app/views/posts/attribute_ro/_uuid.haml | 3 +++ app/views/posts/attributes/_uuid.haml | 1 + app/views/posts/index.haml | 2 +- config/locales/en.yml | 2 ++ config/locales/es.yml | 2 ++ test/controllers/posts_controller_test.rb | 4 ++-- 9 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 app/views/posts/attribute_ro/_uuid.haml create mode 100644 app/views/posts/attributes/_uuid.haml diff --git a/app/models/post.rb b/app/models/post.rb index 8b851adc..25beb7fa 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -11,7 +11,7 @@ class Post < OpenStruct DEFAULT_ATTRIBUTES = %i[site document layout].freeze # Otros atributos que no vienen en los metadatos PRIVATE_ATTRIBUTES = %i[path slug attributes errors].freeze - PUBLIC_ATTRIBUTES = %i[lang date].freeze + PUBLIC_ATTRIBUTES = %i[lang date uuid].freeze class << self # Obtiene el layout sin leer el Document @@ -63,18 +63,20 @@ class Post < OpenStruct load_slug! load_date! load_path! + load_uuid! # XXX: No usamos Post#read porque a esta altura todavía no sabemos # nada del Document document.read! if File.exist? document.path end + # TODO: Convertir a UUID? def id path.basename end - def sha1 - Digest::SHA1.hexdigest id + def updated_at + File.mtime(path.absolute) end @@ -142,8 +144,10 @@ class Post < OpenStruct { metadata.to_s => template.value } end.compact.inject(:merge) + # TODO: Convertir a Metadata? # Asegurarse que haya un layout yaml['layout'] = layout.name.to_s + yaml['uuid'] = uuid.value # Y que no se procese liquid yaml['liquid'] = false yaml['usuaries'] = usuaries.map(&:id).uniq @@ -335,6 +339,13 @@ class Post < OpenStruct required: true) end + def load_uuid! + self.uuid = MetadataUuid.new(document: document, site: site, + layout: layout, name: :uuid, + type: :uuid, post: self, + required: true) + end + # Ejecuta la acción de guardado en cada atributo def save_attributes! attributes.map do |attr| diff --git a/app/models/post_relation.rb b/app/models/post_relation.rb index 934b2c54..e262893d 100644 --- a/app/models/post_relation.rb +++ b/app/models/post_relation.rb @@ -56,10 +56,14 @@ class PostRelation < Array alias find_generic find - # Encontra un post por su id convertido a SHA1 - def find(id, sha1: false) + # Encontrar un post por su UUID + def find(id, uuid: false) find_generic do |p| - p.sha1 == (sha1 ? id : Digest::SHA1.hexdigest(id)) + if uuid + p.uuid.value == id + else + p.id == id + end end end diff --git a/app/services/post_service.rb b/app/services/post_service.rb index b97a3fdd..1745290f 100644 --- a/app/services/post_service.rb +++ b/app/services/post_service.rb @@ -40,18 +40,18 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do end # Reordena todos los posts que soporten orden de acuerdo a un hash de - # ids y nuevas posiciones. La posición actual la da la posición en + # uuids y nuevas posiciones. La posición actual la da la posición en # el array. # - # { sha1 => 2, sha1 => 1, sha1 => 0 } + # { uuid => 2, uuid => 1, uuid => 0 } def reorder posts = site.posts(lang: lang) reorder = params.require(:post).permit(reorder: {}).try(:[], :reorder) modified = PostRelation.new(site: site) - files = reorder.keys.map do |id| - post = posts.find(id, sha1: true) - order = reorder[id].to_i + files = reorder.keys.map do |uuid| + post = posts.find(uuid, uuid: true) + order = reorder[uuid].to_i next unless post.attributes.include? :order next if post.order.value == order diff --git a/app/views/posts/attribute_ro/_uuid.haml b/app/views/posts/attribute_ro/_uuid.haml new file mode 100644 index 00000000..31dd8f0d --- /dev/null +++ b/app/views/posts/attribute_ro/_uuid.haml @@ -0,0 +1,3 @@ +%tr{ id: attribute } + %th= post_label_t(attribute, post: post) + %td= metadata.value diff --git a/app/views/posts/attributes/_uuid.haml b/app/views/posts/attributes/_uuid.haml new file mode 100644 index 00000000..0aab9802 --- /dev/null +++ b/app/views/posts/attributes/_uuid.haml @@ -0,0 +1 @@ +-# nada diff --git a/app/views/posts/index.haml b/app/views/posts/index.haml index eab39338..7e0ce3a9 100644 --- a/app/views/posts/index.haml +++ b/app/views/posts/index.haml @@ -48,7 +48,7 @@ .handle = image_tag 'arrows-alt-v.svg' -# Orden más alto es mayor prioridad - = hidden_field 'post[reorder]', post.sha1, + = hidden_field 'post[reorder]', post.uuid.value, value: @posts.length - i, class: 'reorder' %td %small diff --git a/config/locales/en.yml b/config/locales/en.yml index 84215d03..4e0d1c8d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -348,6 +348,8 @@ en: required: label: ' (required)' feedback: 'This field cannot be empty!' + uuid: + label: 'Unique identifier' reorder: 'Reorder posts' sort: by: 'Sort by' diff --git a/config/locales/es.yml b/config/locales/es.yml index 2c71813e..3a11551a 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -358,6 +358,8 @@ es: required: label: ' (requerido)' feedback: '¡Este campo no puede estar vacío!' + uuid: + label: 'Identificador único' reorder: 'Reordenar artículos' sort: by: 'Ordenar por' diff --git a/test/controllers/posts_controller_test.rb b/test/controllers/posts_controller_test.rb index 3075948b..6a25fe30 100644 --- a/test/controllers/posts_controller_test.rb +++ b/test/controllers/posts_controller_test.rb @@ -145,7 +145,7 @@ class PostsControllerTest < ActionDispatch::IntegrationTest test 'se pueden reordenar' do lang = I18n.available_locales.sample posts = @site.posts(lang: lang) - reorder = Hash[posts.map(&:sha1).shuffle.each_with_index.to_a] + reorder = Hash[posts.map { |p| p.uuid.value }.shuffle.each_with_index.to_a] post site_posts_reorder_url(@site), headers: @authorization, @@ -157,7 +157,7 @@ class PostsControllerTest < ActionDispatch::IntegrationTest @site.repository.rugged.head.target.message assert_equal reorder, Hash[@site.posts(lang: lang).map do |p| - [p.sha1, p.order.value] + [p.uuid.value, p.order.value] end] end end From a3effa6e2609db32ca9b345a123b4ed8fa0c7931 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 2 Jan 2020 20:29:53 -0300 Subject: [PATCH 23/66] optimizacion: usar menos Post#attribute_name --- app/models/post.rb | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 25beb7fa..b0c6ded6 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -89,14 +89,18 @@ class Post < OpenStruct # XXX: rubocop dice que tenemos que usar super cuando ya lo estamos # usando... def method_missing(mid, *args) - unless attribute? mid + # Limpiar el nombre del atributo, para que todos los ayudantes + # reciban el método en limpio + name = attribute_name mid + + unless attribute? name raise NoMethodError, I18n.t('exceptions.post.no_method', method: mid) end # Definir los attribute_* - new_attribute_was(mid) - new_attribute_changed(mid) + new_attribute_was(name) + new_attribute_changed(name) # OpenStruct super(mid, *args) @@ -108,13 +112,12 @@ class Post < OpenStruct # Detecta si es un atributo válido o no, a partir de la tabla de la # plantilla def attribute?(mid) - mid = attribute_name mid included = DEFAULT_ATTRIBUTES.include?(mid) || PRIVATE_ATTRIBUTES.include?(mid) || PUBLIC_ATTRIBUTES.include?(mid) if !included && singleton_class.method_defined?(:attributes) - included = attributes.include? attribute_name(mid) + included = attributes.include? mid end included @@ -275,7 +278,7 @@ class Post < OpenStruct end def new_attribute_was(method) - attr_was = (attribute_name(method).to_s + '_was').to_sym + attr_was = "#{method}_was".to_sym return attr_was if singleton_class.method_defined? attr_was define_singleton_method(attr_was) do @@ -290,7 +293,7 @@ class Post < OpenStruct # Pregunta si el atributo cambió def new_attribute_changed(method) - attr_changed = (attribute_name(method).to_s + '_changed?').to_sym + attr_changed = "#{method}_changed?".to_sym return attr_changed if singleton_class.method_defined? attr_changed From 362cbe13508c16ac2767fc72920feed8fc667c78 Mon Sep 17 00:00:00 2001 From: f Date: Fri, 3 Jan 2020 13:47:46 -0300 Subject: [PATCH 24/66] =?UTF-8?q?mensaje=20de=20deprecaci=C3=B3n=20de=20sv?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_breadcrumb.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/_breadcrumb.haml b/app/views/layouts/_breadcrumb.haml index f94e329c..8d9939eb 100644 --- a/app/views/layouts/_breadcrumb.haml +++ b/app/views/layouts/_breadcrumb.haml @@ -1,6 +1,6 @@ %nav.navbar %a.navbar-brand.d-none.d-sm-block{ href: '/' } - = inline_svg 'sutty.svg', class: 'black', aria: true, + = inline_svg_tag 'sutty.svg', class: 'black', aria: true, title: t('svg.sutty.title'), desc: t('svg.sutty.desc') - if crumbs From 14efee286fc49aaa344b368b0cf813e7768ab90e Mon Sep 17 00:00:00 2001 From: f Date: Fri, 3 Jan 2020 13:48:27 -0300 Subject: [PATCH 25/66] link de descarga del documento --- app/views/posts/attribute_ro/_file.haml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/views/posts/attribute_ro/_file.haml b/app/views/posts/attribute_ro/_file.haml index 55c086f5..a941839e 100644 --- a/app/views/posts/attribute_ro/_file.haml +++ b/app/views/posts/attribute_ro/_file.haml @@ -2,6 +2,4 @@ %th= post_label_t(attribute, :path, post: post) %td - if metadata.value['path'].present? - %figure - = link_to url_for(metadata.static_file) - %figcaption= metadata.value['description'] + = link_to metadata.value['description'], url_for(metadata.static_file) From 597daceb5b89a19432d31bd4bef3d24d5c6eb70f Mon Sep 17 00:00:00 2001 From: f Date: Wed, 22 Jan 2020 17:38:22 -0300 Subject: [PATCH 26/66] email --- app/models/metadata_email.rb | 14 ++++++++++++++ app/views/posts/attribute_ro/_email.haml | 4 ++++ app/views/posts/attributes/_email.haml | 6 ++++++ 3 files changed, 24 insertions(+) create mode 100644 app/models/metadata_email.rb create mode 100644 app/views/posts/attribute_ro/_email.haml create mode 100644 app/views/posts/attributes/_email.haml diff --git a/app/models/metadata_email.rb b/app/models/metadata_email.rb new file mode 100644 index 00000000..18ee2392 --- /dev/null +++ b/app/models/metadata_email.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +# Un campo de correo +# TODO: Validar que tenga un formato correo +class MetadataString < MetadataTemplate + # Una string vacía + def default_value + '' + end + + def value + super.strip + end +end diff --git a/app/views/posts/attribute_ro/_email.haml b/app/views/posts/attribute_ro/_email.haml new file mode 100644 index 00000000..cf15531c --- /dev/null +++ b/app/views/posts/attribute_ro/_email.haml @@ -0,0 +1,4 @@ +%tr{ id: attribute } + %th= post_label_t(attribute, post: post) + %td + %a{ href: "mailto:#{metadata.value}" }= metadata.value diff --git a/app/views/posts/attributes/_email.haml b/app/views/posts/attributes/_email.haml new file mode 100644 index 00000000..b2a301c3 --- /dev/null +++ b/app/views/posts/attributes/_email.haml @@ -0,0 +1,6 @@ +.form-group + = label_tag "post_#{attribute}", post_label_t(attribute, post: post) + = email_field 'post', attribute, value: metadata.value, + **field_options(attribute, metadata) + = render 'posts/attribute_feedback', + post: post, attribute: attribute, metadata: metadata From 55a37edae0bd0ae6e801911ab490d1f91dff0249 Mon Sep 17 00:00:00 2001 From: f Date: Wed, 22 Jan 2020 17:42:08 -0300 Subject: [PATCH 27/66] color --- app/models/metadata_color.rb | 5 +++++ app/models/metadata_email.rb | 11 +---------- app/views/posts/attribute_ro/_color.haml | 3 +++ app/views/posts/attributes/_color.haml | 6 ++++++ 4 files changed, 15 insertions(+), 10 deletions(-) create mode 100644 app/models/metadata_color.rb create mode 100644 app/views/posts/attribute_ro/_color.haml create mode 100644 app/views/posts/attributes/_color.haml diff --git a/app/models/metadata_color.rb b/app/models/metadata_color.rb new file mode 100644 index 00000000..ce359215 --- /dev/null +++ b/app/models/metadata_color.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +# Un campo de correo +# TODO: Validar que tenga un formato correo +class MetadataString < MetadataString; end diff --git a/app/models/metadata_email.rb b/app/models/metadata_email.rb index 18ee2392..ce359215 100644 --- a/app/models/metadata_email.rb +++ b/app/models/metadata_email.rb @@ -2,13 +2,4 @@ # Un campo de correo # TODO: Validar que tenga un formato correo -class MetadataString < MetadataTemplate - # Una string vacía - def default_value - '' - end - - def value - super.strip - end -end +class MetadataString < MetadataString; end diff --git a/app/views/posts/attribute_ro/_color.haml b/app/views/posts/attribute_ro/_color.haml new file mode 100644 index 00000000..787aacd5 --- /dev/null +++ b/app/views/posts/attribute_ro/_color.haml @@ -0,0 +1,3 @@ +%tr{ id: attribute } + %th= post_label_t(attribute, post: post) + %td{ style: "background-color: #{metadata.value}" } = metadata.value diff --git a/app/views/posts/attributes/_color.haml b/app/views/posts/attributes/_color.haml new file mode 100644 index 00000000..a2945016 --- /dev/null +++ b/app/views/posts/attributes/_color.haml @@ -0,0 +1,6 @@ +.form-group + = label_tag "post_#{attribute}", post_label_t(attribute, post: post) + = color_field 'post', attribute, value: metadata.value, + **field_options(attribute, metadata) + = render 'posts/attribute_feedback', + post: post, attribute: attribute, metadata: metadata From 008ef93cbe9b9180d8166ea95bd134b559ca43d1 Mon Sep 17 00:00:00 2001 From: f Date: Wed, 22 Jan 2020 17:42:25 -0300 Subject: [PATCH 28/66] limpieza --- Gemfile | 15 +++------------ Gemfile.lock | 30 ++---------------------------- 2 files changed, 5 insertions(+), 40 deletions(-) diff --git a/Gemfile b/Gemfile index c1f7eef1..059fa2d1 100644 --- a/Gemfile +++ b/Gemfile @@ -39,9 +39,6 @@ gem 'jbuilder', '~> 2.5' # Use ActiveModel has_secure_password gem 'bcrypt', '~> 3.1.7' -# Use Capistrano for deployment -# gem 'capistrano-rails', group: :development - gem 'bootstrap', '~> 4' gem 'commonmarker' gem 'devise' @@ -83,23 +80,17 @@ end group :development do # Access an IRB console on exception pages or by using <%= console %> # anywhere in the code. - gem 'listen', '>= 3.0.5', '< 3.2' - gem 'web-console', '>= 3.3.0' - # Spring speeds up development by keeping your application running in - # the background. Read more: https://github.com/rails/spring gem 'bcrypt_pbkdf' - gem 'capistrano' - gem 'capistrano-bundler' - gem 'capistrano-passenger' - gem 'capistrano-rails' - gem 'capistrano-rbenv' + gem 'brakeman' gem 'ed25519' gem 'haml-lint', require: false gem 'letter_opener' + gem 'listen', '>= 3.0.5', '< 3.2' gem 'rbnacl', '< 5.0' gem 'rubocop-rails' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' + gem 'web-console', '>= 3.3.0' end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index a762a7d6..51ea3239 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -73,8 +73,6 @@ GEM zeitwerk (~> 2.2) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) - airbrussh (1.4.0) - sshkit (>= 1.6.1, != 1.7.0) ast (2.4.0) autoprefixer-rails (9.7.3) execjs @@ -85,22 +83,8 @@ GEM autoprefixer-rails (>= 9.1.0) popper_js (>= 1.14.3, < 2) sassc-rails (>= 2.0.0) + brakeman (4.7.2) builder (3.2.4) - capistrano (3.11.2) - airbrussh (>= 1.0.0) - i18n - rake (>= 10.0.0) - sshkit (>= 1.9.0) - capistrano-bundler (1.6.0) - capistrano (~> 3.1) - capistrano-passenger (0.2.0) - capistrano (~> 3.0) - capistrano-rails (1.4.0) - capistrano (~> 3.1) - capistrano-bundler (~> 1.1) - capistrano-rbenv (2.1.4) - capistrano (~> 3.1) - sshkit (~> 1.3) capybara (2.18.0) addressable mini_mime (>= 0.1.3) @@ -235,9 +219,6 @@ GEM mobility (0.8.9) i18n (>= 0.6.10, < 2) request_store (~> 1.0) - net-scp (2.0.0) - net-ssh (>= 2.6.5, < 6.0.0) - net-ssh (5.2.0) netaddr (2.0.4) nio4r (2.5.2) nokogiri (1.10.7) @@ -368,9 +349,6 @@ GEM activesupport (>= 4.0) sprockets (>= 3.0.0) sqlite3 (1.4.2) - sshkit (1.20.0) - net-scp (>= 1.1.2) - net-ssh (>= 2.8.0) sucker_punch (2.1.2) concurrent-ruby (~> 1.0) sysexits (1.2.0) @@ -419,11 +397,7 @@ DEPENDENCIES bcrypt (~> 3.1.7) bcrypt_pbkdf bootstrap (~> 4) - capistrano - capistrano-bundler - capistrano-passenger - capistrano-rails - capistrano-rbenv + brakeman capybara (~> 2.13) commonmarker database_cleaner From 5a055a6da3501522fc9857a5c8198d117a958bcb Mon Sep 17 00:00:00 2001 From: f Date: Wed, 22 Jan 2020 18:25:48 -0300 Subject: [PATCH 29/66] por trabajar con apuro --- app/models/metadata_color.rb | 3 +-- app/models/metadata_email.rb | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/models/metadata_color.rb b/app/models/metadata_color.rb index ce359215..450700ea 100644 --- a/app/models/metadata_color.rb +++ b/app/models/metadata_color.rb @@ -1,5 +1,4 @@ # frozen_string_literal: true # Un campo de correo -# TODO: Validar que tenga un formato correo -class MetadataString < MetadataString; end +class MetadataColor < MetadataString; end diff --git a/app/models/metadata_email.rb b/app/models/metadata_email.rb index ce359215..bbe95561 100644 --- a/app/models/metadata_email.rb +++ b/app/models/metadata_email.rb @@ -2,4 +2,4 @@ # Un campo de correo # TODO: Validar que tenga un formato correo -class MetadataString < MetadataString; end +class MetadataEmail < MetadataString; end From 46f3cc1d901b4fdce7dea2efcd0763a07c13e668 Mon Sep 17 00:00:00 2001 From: f Date: Wed, 22 Jan 2020 18:43:25 -0300 Subject: [PATCH 30/66] por trabajar con apuro 2 --- app/models/metadata_uuid.rb | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 app/models/metadata_uuid.rb diff --git a/app/models/metadata_uuid.rb b/app/models/metadata_uuid.rb new file mode 100644 index 00000000..ba51c708 --- /dev/null +++ b/app/models/metadata_uuid.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +# Asigna un identificador único al artículo +class MetadataUuid < MetadataTemplate + def default_value + SecureRandom.uuid + end +end From c0de7d8d48af0ce1a69bc4133464eebd3d6937a4 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 23 Jan 2020 18:37:09 -0300 Subject: [PATCH 31/66] bugcito --- app/views/posts/attributes/_date.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/posts/attributes/_date.haml b/app/views/posts/attributes/_date.haml index ac1c7b02..392b6b93 100644 --- a/app/views/posts/attributes/_date.haml +++ b/app/views/posts/attributes/_date.haml @@ -1,6 +1,6 @@ .form-group = label_tag "post_#{attribute}", post_label_t(attribute, post: post) - = date_field 'post', attribute, value: metadata.value.strftime('%F'), + = date_field 'post', attribute, value: metadata.value.to_date.strftime('%F'), **field_options(attribute, metadata) = render 'posts/attribute_feedback', post: post, attribute: attribute, metadata: metadata From c3eb5550667fe10c5855c0edd78b04c589dcf0d5 Mon Sep 17 00:00:00 2001 From: f Date: Fri, 24 Jan 2020 11:57:20 -0300 Subject: [PATCH 32/66] tipografia minificada --- app/assets/fonts/saira/v3/Saira-subset.woff2 | Bin 0 -> 16324 bytes .../fonts/saira/v3/Saira-subset.zopfli.woff | Bin 0 -> 20244 bytes .../fonts/saira/v3/SairaBold-subset.woff2 | Bin 0 -> 16264 bytes .../saira/v3/SairaBold-subset.zopfli.woff | Bin 0 -> 20120 bytes .../fonts/saira/v3/SairaMedium-subset.woff2 | Bin 0 -> 16388 bytes .../saira/v3/SairaMedium-subset.zopfli.woff | Bin 0 -> 20232 bytes app/assets/stylesheets/application.scss | 6 +- package.json | 1 + yarn.lock | 1780 ++++++++++++++++- 9 files changed, 1754 insertions(+), 33 deletions(-) create mode 100644 app/assets/fonts/saira/v3/Saira-subset.woff2 create mode 100644 app/assets/fonts/saira/v3/Saira-subset.zopfli.woff create mode 100644 app/assets/fonts/saira/v3/SairaBold-subset.woff2 create mode 100644 app/assets/fonts/saira/v3/SairaBold-subset.zopfli.woff create mode 100644 app/assets/fonts/saira/v3/SairaMedium-subset.woff2 create mode 100644 app/assets/fonts/saira/v3/SairaMedium-subset.zopfli.woff diff --git a/app/assets/fonts/saira/v3/Saira-subset.woff2 b/app/assets/fonts/saira/v3/Saira-subset.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..174440748fe4b9ad1a1861bcefd4bb5ff9d2932f GIT binary patch literal 16324 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 literal 0 HcmV?d00001 diff --git a/app/assets/fonts/saira/v3/SairaBold-subset.woff2 b/app/assets/fonts/saira/v3/SairaBold-subset.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1cdf264ee5407b65a5a7447d6fda442f6adc7b5a GIT binary patch literal 16264 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 literal 0 HcmV?d00001 diff --git a/app/assets/fonts/saira/v3/SairaMedium-subset.woff2 b/app/assets/fonts/saira/v3/SairaMedium-subset.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9a95bcd0ca2115e53afb00fe6c517b3648eb1cad GIT binary patch literal 16388 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 S?~`xwUw_$q>bBWFtI`I~j)sZ= literal 0 HcmV?d00001 diff --git a/app/assets/fonts/saira/v3/SairaMedium-subset.zopfli.woff b/app/assets/fonts/saira/v3/SairaMedium-subset.zopfli.woff new file mode 100644 index 0000000000000000000000000000000000000000..061310a254e423cb08b089df4dffde3978f67390 GIT binary patch literal 20232 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 P{K!xId=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -1029,6 +1089,13 @@ aproba@^1.0.3, aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +archive-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" + integrity sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA= + dependencies: + file-type "^4.2.0" + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -1058,6 +1125,11 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -1090,6 +1162,11 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -1212,7 +1289,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2: +base64-js@^1.0.2, base64-js@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== @@ -1247,11 +1324,24 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bignumber.js@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" + integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -1302,6 +1392,19 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1331,6 +1434,11 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +browser-process-hrtime@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -1399,6 +1507,34 @@ browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.3, browserslist@^4.6 electron-to-chromium "^1.3.191" node-releases "^1.1.25" +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1423,6 +1559,14 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.2.1: + version "5.4.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115" + integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -1494,6 +1638,19 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -1521,6 +1678,15 @@ camelcase-keys@^2.0.0: camelcase "^2.0.0" map-obj "^1.0.0" +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" @@ -1531,6 +1697,11 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= +camelcase@^4.0.0, camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + camelcase@^5.0.0, camelcase@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -1551,6 +1722,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30000981, can resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + case-sensitive-paths-webpack-plugin@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz#3371ef6365ef9c25fa4b81c16ace0e9c7dc58c3e" @@ -1561,7 +1737,17 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@2.4.2, chalk@^2.0, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: +caw@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" + integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + +chalk@2.4.2, chalk@^2.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1581,6 +1767,11 @@ chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" +characterset@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/characterset/-/characterset-1.3.0.tgz#9640d47d285f3ec742a5a6144eb445e073494e1a" + integrity sha1-lkDUfShfPsdCpaYUTrRF4HNJTho= + chokidar@^2.0.2, chokidar@^2.1.6: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -1612,6 +1803,11 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -1630,6 +1826,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -1666,6 +1867,13 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + coa@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" @@ -1733,6 +1941,13 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commander@~2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ= + dependencies: + graceful-readlink ">= 1.0.0" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -1790,7 +2005,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: +concat-stream@1.6.2, concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -1800,11 +2015,41 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +configstore@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +connect@^3.6.6: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -1822,7 +2067,7 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -content-disposition@0.5.3: +content-disposition@0.5.3, content-disposition@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== @@ -1921,6 +2166,13 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -1963,6 +2215,15 @@ cross-spawn@^3.0.0: lru-cache "^4.0.1" which "^1.2.9" +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + crossvent@1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/crossvent/-/crossvent-1.5.4.tgz#da2c4f8f40c94782517bf2beec1044148194ab92" @@ -1986,6 +2247,11 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + css-blank-pseudo@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" @@ -2169,6 +2435,18 @@ csso@^3.5.1: dependencies: css-tree "1.0.0-alpha.29" +cssom@0.3.x, cssom@^0.3.4: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== + dependencies: + cssom "0.3.x" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -2192,6 +2470,15 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-urls@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -2204,7 +2491,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.2.5, debug@^3.2.6: +debug@^3.0.0, debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2218,7 +2505,15 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -2228,6 +2523,66 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" + integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" + integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" + integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" + integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k= + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d" + integrity sha1-eu3YVCflqS2s/lVnSnxQXpbQH50= + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + deep-equal@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745" @@ -2245,6 +2600,11 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" @@ -2390,6 +2750,13 @@ domelementtype@^2.0.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" @@ -2398,13 +2765,31 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" -dot-prop@^4.1.1: +dot-prop@^4.1.0, dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== dependencies: is-obj "^1.0.0" +download@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233" + integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ== + dependencies: + archive-type "^4.0.0" + caw "^2.0.1" + content-disposition "^0.5.2" + decompress "^4.2.0" + ext-name "^5.0.0" + file-type "^8.1.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^8.3.1" + make-dir "^1.2.0" + p-event "^2.1.0" + pify "^3.0.0" + dragula@^3.7.0: version "3.7.2" resolved "https://registry.yarnpkg.com/dragula/-/dragula-3.7.2.tgz#4a35c9d3981ffac1a949c29ca7285058e87393ce" @@ -2413,6 +2798,11 @@ dragula@^3.7.0: contra "1.9.4" crossvent "1.5.4" +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -2431,6 +2821,13 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -2530,6 +2927,18 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2540,6 +2949,18 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escodegen@^1.11.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.13.0.tgz#c7adf9bd3f3cc675bb752f202f79a720189cab29" + integrity sha512-eYk2dCkxR07DsHA/X2hRBj0CFAZeri/LyDMc0C8JT1Hqi6JnVpMhJ7XFITbb0+yZS3lVkaPL2oCkZ3AVmeVbMw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -2548,7 +2969,7 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -2560,7 +2981,7 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -2575,6 +2996,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -2600,6 +3026,19 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.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" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -2669,6 +3108,21 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -2684,7 +3138,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.2: +extend@^3.0.2, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -2703,6 +3157,16 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-zip@^1.6.6: + version "1.6.7" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" + integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= + dependencies: + concat-stream "1.6.2" + debug "2.6.9" + mkdirp "0.5.1" + yauzl "2.4.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -2723,6 +3187,16 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fast-text-encoding@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz#3e5ce8293409cfaa7177a71b9ca84e1b1e6f25ef" + integrity sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ== + faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -2737,6 +3211,20 @@ faye-websocket@~0.11.1: dependencies: websocket-driver ">=0.5.1" +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= + dependencies: + pend "~1.2.0" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -2750,6 +3238,50 @@ file-loader@^3.0.1: loader-utils "^1.0.2" schema-utils "^1.0.0" +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= + +file-type@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" + integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU= + +file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" + integrity sha1-LdvqfHP/42No365J3DOMBYwritY= + +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" + integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== + +file-type@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c" + integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik= + +filenamify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9" + integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" + +filesize@^3.5.11: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -2760,7 +3292,7 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@~1.1.2: +finalhandler@1.1.2, finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== @@ -2790,6 +3322,13 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -2868,7 +3407,7 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: +from2@^2.1.0, from2@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= @@ -2876,6 +3415,20 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" @@ -2935,6 +3488,16 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +gaxios@^1.0.2, gaxios@^1.0.4, gaxios@^1.2.1, gaxios@^1.2.2: + version "1.8.4" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-1.8.4.tgz#e08c34fe93c0a9b67a52b7b9e7a64e6435f9a339" + integrity sha512-BoENMnu1Gav18HcpV9IleMPZ9exM+AvUjrAOV4Mzs/vfz2Lu/ABv451iEXByKiMPn2M140uul1txXCg83sAENw== + dependencies: + abort-controller "^3.0.0" + extend "^3.0.2" + https-proxy-agent "^2.2.1" + node-fetch "^2.3.0" + gaze@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" @@ -2942,6 +3505,14 @@ gaze@^1.0.0: dependencies: globule "^1.0.0" +gcp-metadata@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-1.0.0.tgz#5212440229fa099fc2f7c2a5cdcb95575e9b2ca6" + integrity sha512-Q6HrgfrCQeEircnNP3rCcEgiDv7eF9+1B+1MMgpE190+/+0mjQR8PxeOaRgxZWmdDAF9EIryHB9g1moPiw1SbQ== + dependencies: + gaxios "^1.0.2" + json-bigint "^0.3.0" + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -2952,11 +3523,36 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" + integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw== + dependencies: + npm-conf "^1.1.0" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4= + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -2996,6 +3592,13 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + global-modules@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -3057,11 +3660,136 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" +glyphhanger@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/glyphhanger/-/glyphhanger-3.2.0.tgz#68f0a67c5ae973e482c13ddd9c40e93bad688246" + integrity sha512-B7uHCjxq1jByOnX4GgWw3mY/RnePz4HMYpVzhnFEfCw7JkasPCaiIihlJUrGt5yJro5UE4Bd+YPjE9CW/ja/4g== + dependencies: + "@zachleat/spider-pig" "^1.0.3" + chalk "^2.3.0" + characterset "^1.3.0" + connect "^3.6.6" + debug "^3.1.0" + filesize "^3.5.11" + fs-extra "^5.0.0" + get-stdin "^6.0.0" + glob "^7.1.2" + jsdom "^13.0.0" + minimist "^1.2.0" + parse-filepath "^1.0.2" + rsvp "^4.7.0" + serve-static "^1.13.2" + shelljs "^0.7.8" + +google-auth-library@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-3.1.2.tgz#ff2f88cd5cd2118a57bd3d5ad3c093c8837fc350" + integrity sha512-cDQMzTotwyWMrg5jRO7q0A4TL/3GWBgO7I7q5xGKNiiFf9SmGY/OJ1YsLMgI2MVHHsEGyrqYnbnmV1AE+Z6DnQ== + dependencies: + base64-js "^1.3.0" + fast-text-encoding "^1.0.0" + gaxios "^1.2.1" + gcp-metadata "^1.0.0" + gtoken "^2.3.2" + https-proxy-agent "^2.2.1" + jws "^3.1.5" + lru-cache "^5.0.0" + semver "^5.5.0" + +google-p12-pem@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-1.0.4.tgz#b77fb833a2eb9f7f3c689e2e54f095276f777605" + integrity sha512-SwLAUJqUfTB2iS+wFfSS/G9p7bt4eWcc2LyfvmUXe7cWp6p3mpxDo6LLI29MXdU6wvPcQ/up298X7GMC5ylAlA== + dependencies: + node-forge "^0.8.0" + pify "^4.0.0" + +googleapis-common@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/googleapis-common/-/googleapis-common-0.7.2.tgz#a694f55d979cb7c2eac21a0e0439af12f9b418ba" + integrity sha512-9DEJIiO4nS7nw0VE1YVkEfXEj8x8MxsuB+yZIpOBULFSN9OIKcUU8UuKgSZFU4lJmRioMfngktrbkMwWJcUhQg== + dependencies: + gaxios "^1.2.2" + google-auth-library "^3.0.0" + pify "^4.0.0" + qs "^6.5.2" + url-template "^2.0.8" + uuid "^3.2.1" + +googleapis@^38.0.0: + version "38.0.0" + resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-38.0.0.tgz#780453875d56ea3cc2ed70063cd59db068b8a0f0" + integrity sha512-8p3gYviQniL4bsRJV79ZIXHEPjVpI+z8UBNrrHcBOv6aEGWZPKa2bpStMocHXNQ4E39GhZdMON857e0BAJ2Z0Q== + dependencies: + google-auth-library "^3.0.0" + googleapis-common "^0.7.0" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +got@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.10, graceful-fs@^4.1.6: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + +gtoken@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-2.3.3.tgz#8a7fe155c5ce0c4b71c886cfb282a9060d94a641" + integrity sha512-EaB49bu/TCoNeQjhCYKI/CurooBKkGxIqFHsWABW0b25fobBYVTMe84A8EBVVZhl8emiUdNypil9huMOTmyAnw== + dependencies: + gaxios "^1.0.4" + google-p12-pem "^1.0.0" + jws "^3.1.5" + mime "^2.2.0" + pify "^4.0.0" + handle-thing@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" @@ -3092,11 +3820,23 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -3207,11 +3947,23 @@ html-comment-regex@^1.1.0: resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + html-entities@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -3287,6 +4039,22 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= +https-proxy-agent@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +humanize-url@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff" + integrity sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8= + dependencies: + normalize-url "^1.0.0" + strip-url-auth "^1.0.0" + iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -3345,6 +4113,11 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + import-local@2.0.0, import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -3370,6 +4143,11 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -3420,11 +4198,19 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@1.2.0: +interpret@1.2.0, interpret@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -3442,6 +4228,11 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +ip-regex@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd" + integrity sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0= + ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -3472,6 +4263,14 @@ is-absolute-url@^3.0.0: resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.1.tgz#e315cbdcbbc3d6789532d591954ac78a0e5049f6" integrity sha512-c2QjUwuMxLsld90sj3xYzpFYWJtuxkIn1f5ua9RTEYJt/vV2IsM+Py00/6qjV7qExgifUvt7qfyBGBBKm+2iBg== +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -3518,6 +4317,13 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + is-color-stop@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" @@ -3622,6 +4428,24 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -3634,6 +4458,11 @@ is-obj@^1.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= + is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -3646,6 +4475,13 @@ is-path-in-cwd@^2.0.0: dependencies: is-path-inside "^2.1.0" +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + is-path-inside@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" @@ -3653,7 +4489,7 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-obj@^1.0.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= @@ -3665,6 +4501,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -3672,12 +4513,24 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + dependencies: + is-unc-path "^1.0.0" + is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== -is-stream@^1.1.0: +is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -3701,6 +4554,13 @@ is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + dependencies: + unc-path-regex "^0.1.2" + is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -3743,6 +4603,14 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + js-base64@^2.1.8: version "2.5.1" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" @@ -3771,6 +4639,38 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdom@^13.0.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.2.0.tgz#b1a0dbdadc255435262be8ea3723d2dba0d7eb3a" + integrity sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw== + dependencies: + abab "^2.0.0" + acorn "^6.0.4" + acorn-globals "^4.3.0" + array-equal "^1.0.0" + cssom "^0.3.4" + cssstyle "^1.1.1" + data-urls "^1.1.0" + domexception "^1.0.1" + escodegen "^1.11.0" + html-encoding-sniffer "^1.0.2" + nwsapi "^2.0.9" + parse5 "5.1.0" + pn "^1.1.0" + request "^2.88.0" + request-promise-native "^1.0.5" + saxes "^3.1.5" + symbol-tree "^3.2.2" + tough-cookie "^2.5.0" + w3c-hr-time "^1.0.1" + w3c-xmlserializer "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^7.0.0" + ws "^6.1.2" + xml-name-validator "^3.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3781,6 +4681,18 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-bigint@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.3.0.tgz#0ccd912c4b8270d05f056fbd13814b53d3825b1e" + integrity sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4= + dependencies: + bignumber.js "^7.0.0" + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -3820,6 +4732,13 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -3830,6 +4749,30 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.1.5: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -3867,6 +4810,13 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -3881,6 +4831,14 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -3892,6 +4850,16 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -3906,6 +4874,14 @@ loader-utils@1.2.3, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1. emojis-list "^2.0.0" json5 "^1.0.1" +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -3934,6 +4910,11 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -3954,7 +4935,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.5, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.5, lodash@~4.17.10: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -3979,6 +4960,16 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -3987,13 +4978,20 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^5.1.1: +lru-cache@^5.0.0, lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" +make-dir@^1.0.0, make-dir@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -4014,7 +5012,7 @@ map-age-cleaner@^0.1.1: dependencies: p-defer "^1.0.0" -map-cache@^0.2.2: +map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= @@ -4024,6 +5022,11 @@ map-obj@^1.0.0, map-obj@^1.0.1: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -4092,6 +5095,21 @@ meow@^3.7.0: redent "^1.0.0" trim-newlines "^1.0.0" +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -4134,6 +5152,11 @@ mime-db@1.40.0, "mime-db@>= 1.40.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== +mime-db@^1.28.0: + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.24" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" @@ -4146,7 +5169,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.2: +mime@^2.0.3, mime@^2.2.0, mime@^2.4.2: version "2.4.4" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== @@ -4156,6 +5179,11 @@ mimic-fn@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + mini-css-extract-plugin@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz#5ba8290fbb4179a43dd27cca444ba150bee743a0" @@ -4183,6 +5211,14 @@ minimatch@^3.0.4, minimatch@~3.0.2: dependencies: brace-expansion "^1.1.7" +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -4232,7 +5268,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -4325,11 +5361,21 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-fetch@^2.3.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + node-forge@0.7.5: version "0.7.5" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== +node-forge@^0.8.0: + version "0.8.5" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.5.tgz#57906f07614dc72762c84cef442f427c0e1b86ee" + integrity sha512-vFMQIWt+J/7FLNyKouZ9TazT74PRV3wgv9UT4cRjC8BffxFbKXkgIWR42URCPSnHm/QDz6BOlb2Q0U4+VQT67Q== + node-gyp@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" @@ -4465,7 +5511,7 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= -normalize-url@1.9.1: +normalize-url@1.9.1, normalize-url@^1.0.0: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= @@ -4475,6 +5521,15 @@ normalize-url@1.9.1: query-string "^4.1.0" sort-keys "^1.0.0" +normalize-url@2.0.1, normalize-url@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + normalize-url@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" @@ -4485,6 +5540,14 @@ npm-bundled@^1.0.1: resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + npm-packlist@^1.1.6: version "1.4.4" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" @@ -4527,6 +5590,11 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= +nwsapi@^2.0.9: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -4637,6 +5705,18 @@ optimize-css-assets-webpack-plugin@^5.0.1: cssnano "^4.1.10" last-call-webpack-plugin "^3.0.0" +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -4683,21 +5763,45 @@ osenv@0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= +p-event@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" + integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== + dependencies: + p-timeout "^2.0.1" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= + p-is-promise@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + p-limit@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" @@ -4705,6 +5809,13 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -4724,11 +5835,33 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" @@ -4755,6 +5888,15 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-filepath@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= + dependencies: + is-absolute "^1.0.0" + map-cache "^0.2.0" + path-root "^0.1.1" + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -4770,11 +5912,21 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-ms@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -4817,7 +5969,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -4832,6 +5984,18 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= + dependencies: + path-root-regex "^0.1.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -4846,6 +6010,13 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -4857,6 +6028,11 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -4867,7 +6043,12 @@ pify@^2.0.0, pify@^2.3.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= -pify@^4.0.1: +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.0, pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== @@ -4891,6 +6072,11 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + pnp-webpack-plugin@^1.4.3: version "1.5.0" resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz#62a1cd3068f46d564bb33c56eb250e4d586676eb" @@ -5556,11 +6742,33 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2 source-map "^0.6.1" supports-color "^6.1.0" -prepend-http@^1.0.0: +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0, prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +pretty-bytes@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2" + integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg== + +pretty-ms@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-4.0.0.tgz#31baf41b94fd02227098aaa03bd62608eb0d6e92" + integrity sha512-qG66ahoLCwpLXD09ZPHSCbUWYTqdosB7SMP4OffgTgL2PBKXMuUsrk5Bwg8q4qPkjTXsKBMr+YK3Ltd/6F9s/Q== + dependencies: + parse-ms "^2.0.0" + private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -5576,11 +6784,21 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= +progress@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" @@ -5589,6 +6807,11 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.0" +proxy-from-env@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -5599,11 +6822,35 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= +psi@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/psi/-/psi-4.0.1.tgz#a0bb76a341ecac1d13d6267e211bbb34c84af660" + integrity sha512-XtuXy+HgmCRxMEKgHEKXHR/2E+QymReFsCaGPoXYzbJhSaZhOpXyNDZ5xfHZoIgeDO2+Qdv7HkpEGR2oc2d+FA== + dependencies: + chalk "^2.4.2" + download "^7.0.0" + googleapis "^38.0.0" + humanize-url "^1.0.1" + lodash "^4.17.11" + meow "^5.0.0" + pify "^4.0.0" + prepend-http "^2.0.0" + pretty-bytes "^5.1.0" + pretty-ms "^4.0.0" + sort-on "^3.0.0" + strip-ansi "^5.1.0" + update-notifier "^2.5.0" + psl@^1.1.24: version "1.3.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd" integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag== +psl@^1.1.28: + version "1.7.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" + integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== + public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -5651,11 +6898,25 @@ punycode@^1.2.4, punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +puppeteer@^1.0.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.20.0.tgz#e3d267786f74e1d87cf2d15acc59177f471bbe38" + integrity sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ== + dependencies: + debug "^4.1.0" + extract-zip "^1.6.6" + https-proxy-agent "^2.2.1" + mime "^2.0.3" + progress "^2.0.1" + proxy-from-env "^1.0.0" + rimraf "^2.6.1" + ws "^6.1.0" + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -5666,6 +6927,11 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@^6.5.2: + version "6.9.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" + integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -5679,6 +6945,15 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -5694,6 +6969,11 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + ramda@^0.26.1: version "0.26.1" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" @@ -5729,7 +7009,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.7: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -5754,6 +7034,14 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -5763,6 +7051,15 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" @@ -5776,6 +7073,19 @@ read-pkg@^1.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readable-stream@^3.0.6: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" @@ -5794,6 +7104,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -5802,6 +7119,14 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -5858,6 +7183,21 @@ regexpu-core@^4.5.4: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + regjsgen@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" @@ -5892,6 +7232,22 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== + dependencies: + lodash "^4.17.15" + +request-promise-native@^1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== + dependencies: + request-promise-core "1.1.3" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + request@^2.87.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" @@ -5963,6 +7319,13 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve@^1.1.6: + version "1.15.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" + integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw== + dependencies: + path-parse "^1.0.6" + resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" @@ -5970,6 +7333,13 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: dependencies: path-parse "^1.0.6" +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -6005,6 +7375,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rsvp@^4.7.0: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -6067,6 +7442,13 @@ sax@^1.2.4, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +saxes@^3.1.5: + version "3.1.11" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" + integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== + dependencies: + xmlchars "^2.1.1" + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -6084,6 +7466,13 @@ scss-tokenizer@^0.2.3: js-base64 "^2.1.8" source-map "^0.4.2" +seek-bzip@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" + integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w= + dependencies: + commander "~2.8.1" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -6096,7 +7485,14 @@ selfsigned@^1.10.4: dependencies: node-forge "0.7.5" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -6148,7 +7544,7 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.14.1: +serve-static@1.14.1, serve-static@^1.13.2: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== @@ -6215,7 +7611,16 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -signal-exit@^3.0.0: +shelljs@^0.7.8: + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" + integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM= + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= @@ -6277,6 +7682,13 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg= + dependencies: + sort-keys "^1.0.0" + sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" @@ -6284,6 +7696,21 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + +sort-on@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/sort-on/-/sort-on-3.0.0.tgz#8094005281bf450e91ac4cb4c4cf00c3d6569c41" + integrity sha512-e2RHeY1iM6dT9od3RoqeJSyz3O7naNFsGy34+EFEcwghjAncuOXC2/Xwq87S4FbypqLVp6PcizYEsGEGsGIDXA== + dependencies: + arrify "^1.0.0" + dot-prop "^4.1.1" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -6442,6 +7869,11 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -6552,6 +7984,18 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== + dependencies: + is-natural-number "^4.0.1" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -6564,11 +8008,28 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-outer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +strip-url-auth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" + integrity sha1-IrD6OkE4WzO+PzMVUbu4N/oM164= + style-loader@^0.23.1: version "0.23.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" @@ -6624,6 +8085,11 @@ svgo@^1.0.0: unquote "~1.1.1" util.promisify "~1.0.0" +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + "table-dragger@https://0xacab.org/sutty/table-dragger.git": version "2.0.2" resolved "https://0xacab.org/sutty/table-dragger.git#a5199975398dca9b3a849f5d56220fd11e68733c" @@ -6639,6 +8105,19 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + tar@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" @@ -6661,6 +8140,13 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + terser-webpack-plugin@^1.3.0, terser-webpack-plugin@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" @@ -6693,6 +8179,11 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + thunky@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" @@ -6702,6 +8193,11 @@ ticky@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ticky/-/ticky-1.0.1.tgz#b7cfa71e768f1c9000c497b9151b30947c50e46d" +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + timers-browserify@^2.0.4: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" @@ -6714,11 +8210,21 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= +tlds@^1.187.0: + version "1.207.0" + resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.207.0.tgz#459264e644cf63ddc0965fece3898913286b1afd" + integrity sha512-k7d7Q1LqjtAvhtEOs3yN14EabsNO8ZCoY6RESSJDB9lst3bTx3as/m1UuAeCKzYxiyhR1qq72ZPhpSf+qlqiwg== + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -6754,6 +8260,14 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +tough-cookie@^2.3.3, tough-cookie@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -6762,11 +8276,30 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= + dependencies: + escape-string-regexp "^1.0.2" + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -6810,6 +8343,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -6823,6 +8363,19 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +unbzip2-stream@^1.0.9: + version "1.3.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz#d156d205e670d8d8c393e1c02ebd506422873f6a" + integrity sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -6880,6 +8433,18 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -6898,11 +8463,32 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + upath@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== +update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -6915,6 +8501,20 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + url-parse@^1.4.3: version "1.4.7" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" @@ -6923,6 +8523,24 @@ url-parse@^1.4.3: querystringify "^2.1.1" requires-port "^1.0.0" +url-regex@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-4.1.1.tgz#a5617b22e15e26dac57ce74c3f52088bcdfec995" + integrity sha512-ViSDgDPNKkrQHI81GLCjdDN+Rsk3tAW/uLXlBOJxtcHzWZjta58Z0APXhfXzS89YszsheMnEvXeDXsWUB53wwA== + dependencies: + ip-regex "^1.0.1" + tlds "^1.187.0" + +url-template@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" + integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -6968,7 +8586,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.3.2: +uuid@^3.0.1, uuid@^3.2.1, uuid@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== @@ -7010,6 +8628,22 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + dependencies: + browser-process-hrtime "^0.1.2" + +w3c-xmlserializer@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" + integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== + dependencies: + domexception "^1.0.1" + webidl-conversions "^4.0.2" + xml-name-validator "^3.0.0" + watchpack@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" @@ -7026,6 +8660,11 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + webpack-assets-manifest@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-3.1.1.tgz#39bbc3bf2ee57fcd8ba07cda51c9ba4a3c6ae1de" @@ -7164,6 +8803,27 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" @@ -7188,6 +8848,18 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -7217,13 +8889,37 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -ws@^6.2.1: +write-file-atomic@^2.0.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@^6.1.0, ws@^6.1.2, ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== dependencies: async-limiter "~1.0.0" +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -7249,6 +8945,13 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" @@ -7326,6 +9029,21 @@ yargs@^7.0.0: y18n "^3.2.1" yargs-parser "^5.0.0" +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= + dependencies: + fd-slicer "~1.0.1" + +yauzl@^2.4.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + zepto@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/zepto/-/zepto-1.2.0.tgz#e127bd9e66fd846be5eab48c1394882f7c0e4f98" From 8b4eb2877bd0feb0037714143f603879fb4cacff Mon Sep 17 00:00:00 2001 From: f Date: Fri, 24 Jan 2020 11:58:27 -0300 Subject: [PATCH 33/66] ordenar los sitios por nombre --- app/controllers/sites_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/sites_controller.rb b/app/controllers/sites_controller.rb index c770e092..598c7755 100644 --- a/app/controllers/sites_controller.rb +++ b/app/controllers/sites_controller.rb @@ -8,7 +8,7 @@ class SitesController < ApplicationController # Ver un listado de sitios def index authorize Site - @sites = current_usuarie.sites + @sites = current_usuarie.sites.order(:title) end # No tenemos propiedades de un sitio aún, así que vamos al listado de From 8add50d310a6c8d923dc925bae4bd0cba89453d6 Mon Sep 17 00:00:00 2001 From: f Date: Fri, 24 Jan 2020 11:59:43 -0300 Subject: [PATCH 34/66] fixup! tipografia minificada --- yarn.lock | 1195 ++--------------------------------------------------- 1 file changed, 24 insertions(+), 1171 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1a3e107d..6a01172f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -746,11 +746,6 @@ webpack-cli "^3.3.2" webpack-sources "^1.3.0" -"@sindresorhus/is@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" - integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== - "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -957,13 +952,6 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -1032,13 +1020,6 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -1089,13 +1070,6 @@ aproba@^1.0.3, aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -archive-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" - integrity sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA= - dependencies: - file-type "^4.2.0" - are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -1162,11 +1136,6 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -arrify@^1.0.0, arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -1289,7 +1258,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2, base64-js@^1.3.0: +base64-js@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== @@ -1324,24 +1293,11 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bignumber.js@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" - integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== - binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -bl@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" - integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -1392,19 +1348,6 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1507,34 +1450,6 @@ browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.3, browserslist@^4.6 electron-to-chromium "^1.3.191" node-releases "^1.1.25" -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= - buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1559,14 +1474,6 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.2.1: - version "5.4.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115" - integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -1638,19 +1545,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cacheable-request@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" - integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= - dependencies: - clone-response "1.0.2" - get-stream "3.0.0" - http-cache-semantics "3.8.1" - keyv "3.0.0" - lowercase-keys "1.0.0" - normalize-url "2.0.1" - responselike "1.0.2" - caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -1678,15 +1572,6 @@ camelcase-keys@^2.0.0: camelcase "^2.0.0" map-obj "^1.0.0" -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" @@ -1697,11 +1582,6 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= -camelcase@^4.0.0, camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - camelcase@^5.0.0, camelcase@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -1722,11 +1602,6 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30000981, can resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== - case-sensitive-paths-webpack-plugin@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz#3371ef6365ef9c25fa4b81c16ace0e9c7dc58c3e" @@ -1737,17 +1612,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -caw@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" - integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== - dependencies: - get-proxy "^2.0.0" - isurl "^1.0.0-alpha5" - tunnel-agent "^0.6.0" - url-to-options "^1.0.1" - -chalk@2.4.2, chalk@^2.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0, chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1803,11 +1668,6 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -1826,11 +1686,6 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -1867,13 +1722,6 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-response@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - coa@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" @@ -1941,13 +1789,6 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== -commander@~2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" - integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ= - dependencies: - graceful-readlink ">= 1.0.0" - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -2015,26 +1856,6 @@ concat-stream@1.6.2, concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" -config-chain@^1.1.11: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" @@ -2067,7 +1888,7 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -content-disposition@0.5.3, content-disposition@^0.5.2: +content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== @@ -2166,13 +1987,6 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -2215,15 +2029,6 @@ cross-spawn@^3.0.0: lru-cache "^4.0.1" which "^1.2.9" -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - crossvent@1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/crossvent/-/crossvent-1.5.4.tgz#da2c4f8f40c94782517bf2beec1044148194ab92" @@ -2247,11 +2052,6 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - css-blank-pseudo@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" @@ -2505,15 +2305,7 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -2523,66 +2315,6 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" - integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== - dependencies: - file-type "^5.2.0" - is-stream "^1.1.0" - tar-stream "^1.5.2" - -decompress-tarbz2@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" - integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== - dependencies: - decompress-tar "^4.1.0" - file-type "^6.1.0" - is-stream "^1.1.0" - seek-bzip "^1.0.5" - unbzip2-stream "^1.0.9" - -decompress-targz@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" - integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== - dependencies: - decompress-tar "^4.1.1" - file-type "^5.2.0" - is-stream "^1.1.0" - -decompress-unzip@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" - integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k= - dependencies: - file-type "^3.8.0" - get-stream "^2.2.0" - pify "^2.3.0" - yauzl "^2.4.2" - -decompress@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d" - integrity sha1-eu3YVCflqS2s/lVnSnxQXpbQH50= - dependencies: - decompress-tar "^4.0.0" - decompress-tarbz2 "^4.0.0" - decompress-targz "^4.0.0" - decompress-unzip "^4.0.1" - graceful-fs "^4.1.10" - make-dir "^1.0.0" - pify "^2.3.0" - strip-dirs "^2.0.0" - deep-equal@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745" @@ -2765,31 +2497,13 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" -dot-prop@^4.1.0, dot-prop@^4.1.1: +dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== dependencies: is-obj "^1.0.0" -download@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233" - integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ== - dependencies: - archive-type "^4.0.0" - caw "^2.0.1" - content-disposition "^0.5.2" - decompress "^4.2.0" - ext-name "^5.0.0" - file-type "^8.1.0" - filenamify "^2.0.0" - get-stream "^3.0.0" - got "^8.3.1" - make-dir "^1.2.0" - p-event "^2.1.0" - pify "^3.0.0" - dragula@^3.7.0: version "3.7.2" resolved "https://registry.yarnpkg.com/dragula/-/dragula-3.7.2.tgz#4a35c9d3981ffac1a949c29ca7285058e87393ce" @@ -2798,11 +2512,6 @@ dragula@^3.7.0: contra "1.9.4" crossvent "1.5.4" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -2821,13 +2530,6 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -2996,11 +2698,6 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - eventemitter3@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -3026,19 +2723,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.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" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -3108,21 +2792,6 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" -ext-list@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" - integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== - dependencies: - mime-db "^1.28.0" - -ext-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" - integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== - dependencies: - ext-list "^2.0.0" - sort-keys-length "^1.0.0" - extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -3138,7 +2807,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.2, extend@~3.0.2: +extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -3192,11 +2861,6 @@ fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-text-encoding@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz#3e5ce8293409cfaa7177a71b9ca84e1b1e6f25ef" - integrity sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ== - faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -3218,13 +2882,6 @@ fd-slicer@~1.0.1: dependencies: pend "~1.2.0" -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -3238,45 +2895,6 @@ file-loader@^3.0.1: loader-utils "^1.0.2" schema-utils "^1.0.0" -file-type@^3.8.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" - integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= - -file-type@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" - integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU= - -file-type@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" - integrity sha1-LdvqfHP/42No365J3DOMBYwritY= - -file-type@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" - integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== - -file-type@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c" - integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== - -filename-reserved-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" - integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik= - -filenamify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9" - integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== - dependencies: - filename-reserved-regex "^2.0.0" - strip-outer "^1.0.0" - trim-repeated "^1.0.0" - filesize@^3.5.11: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" @@ -3322,13 +2940,6 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -3407,7 +3018,7 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0, from2@^2.1.1: +from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= @@ -3415,11 +3026,6 @@ from2@^2.1.0, from2@^2.1.1: inherits "^2.0.1" readable-stream "^2.0.0" -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - fs-extra@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" @@ -3488,16 +3094,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -gaxios@^1.0.2, gaxios@^1.0.4, gaxios@^1.2.1, gaxios@^1.2.2: - version "1.8.4" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-1.8.4.tgz#e08c34fe93c0a9b67a52b7b9e7a64e6435f9a339" - integrity sha512-BoENMnu1Gav18HcpV9IleMPZ9exM+AvUjrAOV4Mzs/vfz2Lu/ABv451iEXByKiMPn2M140uul1txXCg83sAENw== - dependencies: - abort-controller "^3.0.0" - extend "^3.0.2" - https-proxy-agent "^2.2.1" - node-fetch "^2.3.0" - gaze@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" @@ -3505,14 +3101,6 @@ gaze@^1.0.0: dependencies: globule "^1.0.0" -gcp-metadata@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-1.0.0.tgz#5212440229fa099fc2f7c2a5cdcb95575e9b2ca6" - integrity sha512-Q6HrgfrCQeEircnNP3rCcEgiDv7eF9+1B+1MMgpE190+/+0mjQR8PxeOaRgxZWmdDAF9EIryHB9g1moPiw1SbQ== - dependencies: - gaxios "^1.0.2" - json-bigint "^0.3.0" - get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -3523,13 +3111,6 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-proxy@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" - integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw== - dependencies: - npm-conf "^1.1.0" - get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -3540,19 +3121,6 @@ get-stdin@^6.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== -get-stream@3.0.0, get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" - integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4= - dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -3592,13 +3160,6 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - global-modules@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -3681,114 +3242,15 @@ glyphhanger@^3.2.0: serve-static "^1.13.2" shelljs "^0.7.8" -google-auth-library@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-3.1.2.tgz#ff2f88cd5cd2118a57bd3d5ad3c093c8837fc350" - integrity sha512-cDQMzTotwyWMrg5jRO7q0A4TL/3GWBgO7I7q5xGKNiiFf9SmGY/OJ1YsLMgI2MVHHsEGyrqYnbnmV1AE+Z6DnQ== - dependencies: - base64-js "^1.3.0" - fast-text-encoding "^1.0.0" - gaxios "^1.2.1" - gcp-metadata "^1.0.0" - gtoken "^2.3.2" - https-proxy-agent "^2.2.1" - jws "^3.1.5" - lru-cache "^5.0.0" - semver "^5.5.0" - -google-p12-pem@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-1.0.4.tgz#b77fb833a2eb9f7f3c689e2e54f095276f777605" - integrity sha512-SwLAUJqUfTB2iS+wFfSS/G9p7bt4eWcc2LyfvmUXe7cWp6p3mpxDo6LLI29MXdU6wvPcQ/up298X7GMC5ylAlA== - dependencies: - node-forge "^0.8.0" - pify "^4.0.0" - -googleapis-common@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/googleapis-common/-/googleapis-common-0.7.2.tgz#a694f55d979cb7c2eac21a0e0439af12f9b418ba" - integrity sha512-9DEJIiO4nS7nw0VE1YVkEfXEj8x8MxsuB+yZIpOBULFSN9OIKcUU8UuKgSZFU4lJmRioMfngktrbkMwWJcUhQg== - dependencies: - gaxios "^1.2.2" - google-auth-library "^3.0.0" - pify "^4.0.0" - qs "^6.5.2" - url-template "^2.0.8" - uuid "^3.2.1" - -googleapis@^38.0.0: - version "38.0.0" - resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-38.0.0.tgz#780453875d56ea3cc2ed70063cd59db068b8a0f0" - integrity sha512-8p3gYviQniL4bsRJV79ZIXHEPjVpI+z8UBNrrHcBOv6aEGWZPKa2bpStMocHXNQ4E39GhZdMON857e0BAJ2Z0Q== - dependencies: - google-auth-library "^3.0.0" - googleapis-common "^0.7.0" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -got@^8.3.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" - integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== - dependencies: - "@sindresorhus/is" "^0.7.0" - cacheable-request "^2.1.1" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - into-stream "^3.1.0" - is-retry-allowed "^1.1.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - mimic-response "^1.0.0" - p-cancelable "^0.4.0" - p-timeout "^2.0.1" - pify "^3.0.0" - safe-buffer "^5.1.1" - timed-out "^4.0.1" - url-parse-lax "^3.0.0" - url-to-options "^1.0.1" - -graceful-fs@^4.1.10, graceful-fs@^4.1.6: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= - -gtoken@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-2.3.3.tgz#8a7fe155c5ce0c4b71c886cfb282a9060d94a641" - integrity sha512-EaB49bu/TCoNeQjhCYKI/CurooBKkGxIqFHsWABW0b25fobBYVTMe84A8EBVVZhl8emiUdNypil9huMOTmyAnw== - dependencies: - gaxios "^1.0.4" - google-p12-pem "^1.0.0" - jws "^3.1.5" - mime "^2.2.0" - pify "^4.0.0" +graceful-fs@^4.1.6: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== handle-thing@^2.0.0: version "2.0.0" @@ -3820,23 +3282,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== - has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== - dependencies: - has-symbol-support-x "^1.4.1" - has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -3959,11 +3409,6 @@ html-entities@^1.2.1: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= -http-cache-semantics@3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -4047,14 +3492,6 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" -humanize-url@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff" - integrity sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8= - dependencies: - normalize-url "^1.0.0" - strip-url-auth "^1.0.0" - iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -4113,11 +3550,6 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - import-local@2.0.0, import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -4143,11 +3575,6 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -4203,14 +3630,6 @@ interpret@1.2.0, interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== -into-stream@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" - integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= - dependencies: - from2 "^2.1.1" - p-is-promise "^1.1.0" - invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -4317,13 +3736,6 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - is-color-stop@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" @@ -4428,24 +3840,6 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-natural-number@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" - integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -4458,11 +3852,6 @@ is-obj@^1.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= -is-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= - is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -4475,13 +3864,6 @@ is-path-in-cwd@^2.0.0: dependencies: is-path-inside "^2.1.0" -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - is-path-inside@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" @@ -4489,7 +3871,7 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: +is-plain-obj@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= @@ -4501,11 +3883,6 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -4525,12 +3902,7 @@ is-resolvable@^1.0.0: resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== -is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -4603,14 +3975,6 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - js-base64@^2.1.8: version "2.5.1" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" @@ -4681,18 +4045,6 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-bigint@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.3.0.tgz#0ccd912c4b8270d05f056fbd13814b53d3825b1e" - integrity sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4= - dependencies: - bignumber.js "^7.0.0" - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -4749,30 +4101,6 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.1.5: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -keyv@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" - integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== - dependencies: - json-buffer "3.0.0" - killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -4810,13 +4138,6 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -4850,16 +4171,6 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -4874,14 +4185,6 @@ loader-utils@1.2.3, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1. emojis-list "^2.0.0" json5 "^1.0.1" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -4960,16 +4263,6 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lowercase-keys@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -4978,20 +4271,13 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^5.0.0, lru-cache@^5.1.1: +lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" -make-dir@^1.0.0, make-dir@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -5022,11 +4308,6 @@ map-obj@^1.0.0, map-obj@^1.0.1: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -5095,21 +4376,6 @@ meow@^3.7.0: redent "^1.0.0" trim-newlines "^1.0.0" -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -5152,11 +4418,6 @@ mime-db@1.40.0, "mime-db@>= 1.40.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== -mime-db@^1.28.0: - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== - mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.24" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" @@ -5169,7 +4430,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.0.3, mime@^2.2.0, mime@^2.4.2: +mime@^2.0.3, mime@^2.4.2: version "2.4.4" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== @@ -5179,11 +4440,6 @@ mimic-fn@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - mini-css-extract-plugin@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz#5ba8290fbb4179a43dd27cca444ba150bee743a0" @@ -5211,14 +4467,6 @@ minimatch@^3.0.4, minimatch@~3.0.2: dependencies: brace-expansion "^1.1.7" -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -5361,21 +4609,11 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-fetch@^2.3.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - node-forge@0.7.5: version "0.7.5" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== -node-forge@^0.8.0: - version "0.8.5" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.5.tgz#57906f07614dc72762c84cef442f427c0e1b86ee" - integrity sha512-vFMQIWt+J/7FLNyKouZ9TazT74PRV3wgv9UT4cRjC8BffxFbKXkgIWR42URCPSnHm/QDz6BOlb2Q0U4+VQT67Q== - node-gyp@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" @@ -5511,7 +4749,7 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= -normalize-url@1.9.1, normalize-url@^1.0.0: +normalize-url@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= @@ -5521,7 +4759,7 @@ normalize-url@1.9.1, normalize-url@^1.0.0: query-string "^4.1.0" sort-keys "^1.0.0" -normalize-url@2.0.1, normalize-url@^2.0.1: +normalize-url@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== @@ -5540,14 +4778,6 @@ npm-bundled@^1.0.1: resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== -npm-conf@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" - integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== - dependencies: - config-chain "^1.1.11" - pify "^3.0.0" - npm-packlist@^1.1.6: version "1.4.4" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" @@ -5763,45 +4993,21 @@ osenv@0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-cancelable@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" - integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= -p-event@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" - integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== - dependencies: - p-timeout "^2.0.1" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-is-promise@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= - p-is-promise@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" @@ -5809,13 +5015,6 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -5835,33 +5034,11 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" -p-timeout@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" - integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== - dependencies: - p-finally "^1.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" @@ -5912,11 +5089,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-ms@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -5969,7 +5141,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -6010,13 +5182,6 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -6043,12 +5208,7 @@ pify@^2.0.0, pify@^2.3.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.0, pify@^4.0.1: +pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== @@ -6747,7 +5907,7 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0, prepend-http@^1.0.1: +prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= @@ -6757,18 +5917,6 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= -pretty-bytes@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2" - integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg== - -pretty-ms@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-4.0.0.tgz#31baf41b94fd02227098aaa03bd62608eb0d6e92" - integrity sha512-qG66ahoLCwpLXD09ZPHSCbUWYTqdosB7SMP4OffgTgL2PBKXMuUsrk5Bwg8q4qPkjTXsKBMr+YK3Ltd/6F9s/Q== - dependencies: - parse-ms "^2.0.0" - private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -6794,11 +5942,6 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" @@ -6822,25 +5965,6 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psi@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/psi/-/psi-4.0.1.tgz#a0bb76a341ecac1d13d6267e211bbb34c84af660" - integrity sha512-XtuXy+HgmCRxMEKgHEKXHR/2E+QymReFsCaGPoXYzbJhSaZhOpXyNDZ5xfHZoIgeDO2+Qdv7HkpEGR2oc2d+FA== - dependencies: - chalk "^2.4.2" - download "^7.0.0" - googleapis "^38.0.0" - humanize-url "^1.0.1" - lodash "^4.17.11" - meow "^5.0.0" - pify "^4.0.0" - prepend-http "^2.0.0" - pretty-bytes "^5.1.0" - pretty-ms "^4.0.0" - sort-on "^3.0.0" - strip-ansi "^5.1.0" - update-notifier "^2.5.0" - psl@^1.1.24: version "1.3.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd" @@ -6927,11 +6051,6 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@^6.5.2: - version "6.9.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" - integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== - qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -6969,11 +6088,6 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - ramda@^0.26.1: version "0.26.1" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" @@ -7009,7 +6123,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: +rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -7034,14 +6148,6 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -7051,15 +6157,6 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" @@ -7073,19 +6170,6 @@ read-pkg@^3.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^2.3.0, readable-stream@^2.3.5: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - readable-stream@^3.0.6: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" @@ -7119,14 +6203,6 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -7183,21 +6259,6 @@ regexpu-core@^4.5.4: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" -registry-auth-token@^3.0.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - regjsgen@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" @@ -7333,13 +6394,6 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: dependencies: path-parse "^1.0.6" -responselike@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -7466,13 +6520,6 @@ scss-tokenizer@^0.2.3: js-base64 "^2.1.8" source-map "^0.4.2" -seek-bzip@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" - integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w= - dependencies: - commander "~2.8.1" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -7485,14 +6532,7 @@ selfsigned@^1.10.4: dependencies: node-forge "0.7.5" -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -7620,7 +6660,7 @@ shelljs@^0.7.8: interpret "^1.0.0" rechoir "^0.6.2" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= @@ -7682,13 +6722,6 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" -sort-keys-length@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" - integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg= - dependencies: - sort-keys "^1.0.0" - sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" @@ -7703,14 +6736,6 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -sort-on@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/sort-on/-/sort-on-3.0.0.tgz#8094005281bf450e91ac4cb4c4cf00c3d6569c41" - integrity sha512-e2RHeY1iM6dT9od3RoqeJSyz3O7naNFsGy34+EFEcwghjAncuOXC2/Xwq87S4FbypqLVp6PcizYEsGEGsGIDXA== - dependencies: - arrify "^1.0.0" - dot-prop "^4.1.1" - source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -7984,18 +7009,6 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-dirs@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" - integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== - dependencies: - is-natural-number "^4.0.1" - strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -8008,28 +7021,11 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-outer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== - dependencies: - escape-string-regexp "^1.0.2" - -strip-url-auth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" - integrity sha1-IrD6OkE4WzO+PzMVUbu4N/oM164= - style-loader@^0.23.1: version "0.23.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" @@ -8105,19 +7101,6 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar-stream@^1.5.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" - integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== - dependencies: - bl "^1.0.0" - buffer-alloc "^1.2.0" - end-of-stream "^1.0.0" - fs-constants "^1.0.0" - readable-stream "^2.3.0" - to-buffer "^1.1.1" - xtend "^4.0.0" - tar@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" @@ -8140,13 +7123,6 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - terser-webpack-plugin@^1.3.0, terser-webpack-plugin@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" @@ -8179,11 +7155,6 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - thunky@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" @@ -8193,11 +7164,6 @@ ticky@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ticky/-/ticky-1.0.1.tgz#b7cfa71e768f1c9000c497b9151b30947c50e46d" -timed-out@^4.0.0, timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - timers-browserify@^2.0.4: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" @@ -8220,11 +7186,6 @@ to-arraybuffer@^1.0.0: resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= -to-buffer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" - integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -8288,18 +7249,6 @@ trim-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= - dependencies: - escape-string-regexp "^1.0.2" - trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -8363,14 +7312,6 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -unbzip2-stream@^1.0.9: - version "1.3.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz#d156d205e670d8d8c393e1c02ebd506422873f6a" - integrity sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg== - dependencies: - buffer "^5.2.1" - through "^2.3.8" - unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -8433,13 +7374,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -8463,32 +7397,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - upath@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== -update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -8501,20 +7414,6 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - url-parse@^1.4.3: version "1.4.7" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" @@ -8531,16 +7430,6 @@ url-regex@^4.1.1: ip-regex "^1.0.1" tlds "^1.187.0" -url-template@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" - integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= - -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= - url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -8586,7 +7475,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.2.1, uuid@^3.3.2: +uuid@^3.0.1, uuid@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== @@ -8848,13 +7737,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -8889,15 +7771,6 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - ws@^6.1.0, ws@^6.1.2, ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" @@ -8905,11 +7778,6 @@ ws@^6.1.0, ws@^6.1.2, ws@^6.2.1: dependencies: async-limiter "~1.0.0" -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -8945,13 +7813,6 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" - yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" @@ -9036,14 +7897,6 @@ yauzl@2.4.1: dependencies: fd-slicer "~1.0.1" -yauzl@^2.4.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - zepto@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/zepto/-/zepto-1.2.0.tgz#e127bd9e66fd846be5eab48c1394882f7c0e4f98" From 624ed476ca47bfa2c5b19cf4624028094d6945e7 Mon Sep 17 00:00:00 2001 From: f Date: Fri, 24 Jan 2020 12:12:49 -0300 Subject: [PATCH 35/66] =?UTF-8?q?avisar=20cuando=20falla=20la=20compilaci?= =?UTF-8?q?=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/deploy_job.rb | 3 +++ app/models/deploy_local.rb | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/jobs/deploy_job.rb b/app/jobs/deploy_job.rb index 608b485b..85411cb0 100644 --- a/app/jobs/deploy_job.rb +++ b/app/jobs/deploy_job.rb @@ -15,6 +15,9 @@ class DeployJob < ApplicationJob # No es opcional unless @deployed[:deploy_local] @site.update_attribute :status, 'waiting' + notify_usuaries + + # Hacer fallar la tarea raise DeployException, deploy_local.build_stats.last.log end diff --git a/app/models/deploy_local.rb b/app/models/deploy_local.rb index 9f143bd3..b9de4a44 100644 --- a/app/models/deploy_local.rb +++ b/app/models/deploy_local.rb @@ -13,7 +13,12 @@ class DeployLocal < Deploy # Pasamos variables de entorno mínimas para no filtrar secretos de # Sutty def deploy - mkdir && yarn && bundle && jekyll_build + return false unless mkdir + return false unless yarn + return false unless gem + return false unless bundle + + jekyll_build end # Sólo permitimos un deploy local @@ -49,7 +54,8 @@ class DeployLocal < Deploy { 'HOME' => home_dir, 'PATH' => paths.join(':'), - 'JEKYLL_ENV' => Rails.env + 'JEKYLL_ENV' => Rails.env, + 'LANG' => ENV['LANG'] } end @@ -61,6 +67,10 @@ class DeployLocal < Deploy File.exist? yarn_lock end + def gem + run %(gem install bundler --no-document) + end + # Corre yarn dentro del repositorio def yarn return unless yarn_lock? From d0fb22ef1650ff1c6b3d9ab747c845936ad475a6 Mon Sep 17 00:00:00 2001 From: f Date: Fri, 24 Jan 2020 14:52:36 -0300 Subject: [PATCH 36/66] =?UTF-8?q?que=20la=20barra=20te=20acompa=C3=B1e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/assets/stylesheets/application.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 6b6a08dc..f3fc5f4a 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -22,6 +22,12 @@ $magenta: #f206f9; } } +trix-toolbar { + background-color: var(--background); + position: sticky; + top: 0; +} + // TODO: Encontrar la forma de generar esto desde los locales de Rails $custom-file-text: ( en: 'Browse', From e325441bfac051ed70829f5fd6c2ce88d8b71f22 Mon Sep 17 00:00:00 2001 From: f Date: Sat, 25 Jan 2020 19:47:03 -0300 Subject: [PATCH 37/66] access.log --- .../20200118155319_create_access_log.rb | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 db/migrate/20200118155319_create_access_log.rb diff --git a/db/migrate/20200118155319_create_access_log.rb b/db/migrate/20200118155319_create_access_log.rb new file mode 100644 index 00000000..8b4eaf46 --- /dev/null +++ b/db/migrate/20200118155319_create_access_log.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +class CreateAccessLog < ActiveRecord::Migration[6.0] + def change + create_table :access_logs, id: :uuid do |t| + t.string :host, index: true + + t.float :msec + + t.string :server_protocol + t.string :request_method + t.string :request_completion + + t.string :uri, index: true + t.string :query_string + t.integer :status, index: true + + t.string :sent_http_content_type + t.string :sent_http_content_encoding + t.string :sent_http_etag + t.datetime :sent_http_last_modified + + t.string :http_accept + t.string :http_accept_encoding + t.string :http_accept_language + + t.string :http_pragma + t.string :http_cache_control + t.string :http_if_none_match + + t.string :http_dnt + t.string :http_user_agent, index: true + t.string :http_referer, index: true + + t.float :request_time + + t.integer :bytes_sent + t.integer :body_bytes_sent + t.integer :request_length + + t.string :http_connection + t.string :pipe + t.integer :connection_requests + + t.string :geoip2_data_country_name, index: true + t.string :geoip2_data_city_name, index: true + + t.string :ssl_server_name + t.string :ssl_protocol + t.string :ssl_early_data + t.string :ssl_session_reused + t.string :ssl_curves + t.string :ssl_ciphers + t.string :ssl_cipher + + t.string :sent_http_x_xss_protection + t.string :sent_http_x_frame_options + t.string :sent_http_x_content_type_options + t.string :sent_http_strict_transport_security + + t.string :nginx_version + t.integer :pid + end + end +end From ed539893303180a814830f362bac65f1041785f9 Mon Sep 17 00:00:00 2001 From: f Date: Sat, 25 Jan 2020 20:29:40 -0300 Subject: [PATCH 38/66] =?UTF-8?q?ahora=20resulta=20que=20tambi=C3=A9n=20ne?= =?UTF-8?q?cesitamos=20python?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ff0c9a58..c340cbd5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ ENV RAILS_ENV production ENV RAILS_MASTER_KEY=$RAILS_MASTER_KEY RUN apk add --no-cache libxslt libxml2 tzdata ruby ruby-bundler ruby-json ruby-bigdecimal ruby-rake -RUN apk add --no-cache postgresql-libs git yarn brotli libssh2 +RUN apk add --no-cache postgresql-libs git yarn brotli libssh2 python # https://github.com/rubygems/rubygems/issues/2918 # https://gitlab.alpinelinux.org/alpine/aports/issues/10808 From 364a233d07f697a321f8deb3f1dcd8134c49ff54 Mon Sep 17 00:00:00 2001 From: f Date: Sat, 25 Jan 2020 20:30:06 -0300 Subject: [PATCH 39/66] =?UTF-8?q?no=20instalamos=20gem=20en=20producci?= =?UTF-8?q?=C3=B3n...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/deploy_local.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/models/deploy_local.rb b/app/models/deploy_local.rb index b9de4a44..31e147ad 100644 --- a/app/models/deploy_local.rb +++ b/app/models/deploy_local.rb @@ -15,7 +15,6 @@ class DeployLocal < Deploy def deploy return false unless mkdir return false unless yarn - return false unless gem return false unless bundle jekyll_build From d9a7d69e0637de8fe36087a6ff66056ed664bcb5 Mon Sep 17 00:00:00 2001 From: f Date: Sun, 26 Jan 2020 14:54:26 -0300 Subject: [PATCH 40/66] =?UTF-8?q?sent=5Fhttp=5Flast=5Fmodified=20a=20veces?= =?UTF-8?q?=20viene=20vac=C3=ADo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/migrate/20200126175158_change_last_modified.rb | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 db/migrate/20200126175158_change_last_modified.rb diff --git a/db/migrate/20200126175158_change_last_modified.rb b/db/migrate/20200126175158_change_last_modified.rb new file mode 100644 index 00000000..93d05dec --- /dev/null +++ b/db/migrate/20200126175158_change_last_modified.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class ChangeLastModified < ActiveRecord::Migration[6.0] + def change + change_column :access_logs, :sent_http_last_modified, :string + end +end From 0444f1a6cbea1baebfe6c690222e8c4b586724b8 Mon Sep 17 00:00:00 2001 From: f Date: Mon, 27 Jan 2020 13:07:08 -0300 Subject: [PATCH 41/66] enviar correos en texto plano --- ...ructions.haml => confirmation_instructions.html.haml} | 0 .../devise/mailer/confirmation_instructions.text.haml | 5 +++++ .../{email_changed.haml => email_changed.html.haml} | 0 app/views/devise/mailer/email_changed.text.haml | 6 ++++++ ...structions.haml => invitation_instructions.html.haml} | 0 .../{password_change.haml => password_change.html.haml} | 0 app/views/devise/mailer/password_change.text.haml | 3 +++ ...ctions.haml => reset_password_instructions.html.haml} | 0 .../devise/mailer/reset_password_instructions.text.haml | 9 +++++++++ ...k_instructions.haml => unlock_instructions.html.haml} | 0 app/views/devise/mailer/unlock_instructions.text.haml | 7 +++++++ app/views/layouts/mailer.text.haml | 3 ++- 12 files changed, 32 insertions(+), 1 deletion(-) rename app/views/devise/mailer/{confirmation_instructions.haml => confirmation_instructions.html.haml} (100%) create mode 100644 app/views/devise/mailer/confirmation_instructions.text.haml rename app/views/devise/mailer/{email_changed.haml => email_changed.html.haml} (100%) create mode 100644 app/views/devise/mailer/email_changed.text.haml rename app/views/devise/mailer/{invitation_instructions.haml => invitation_instructions.html.haml} (100%) rename app/views/devise/mailer/{password_change.haml => password_change.html.haml} (100%) create mode 100644 app/views/devise/mailer/password_change.text.haml rename app/views/devise/mailer/{reset_password_instructions.haml => reset_password_instructions.html.haml} (100%) create mode 100644 app/views/devise/mailer/reset_password_instructions.text.haml rename app/views/devise/mailer/{unlock_instructions.haml => unlock_instructions.html.haml} (100%) create mode 100644 app/views/devise/mailer/unlock_instructions.text.haml diff --git a/app/views/devise/mailer/confirmation_instructions.haml b/app/views/devise/mailer/confirmation_instructions.html.haml similarity index 100% rename from app/views/devise/mailer/confirmation_instructions.haml rename to app/views/devise/mailer/confirmation_instructions.html.haml diff --git a/app/views/devise/mailer/confirmation_instructions.text.haml b/app/views/devise/mailer/confirmation_instructions.text.haml new file mode 100644 index 00000000..38e4c548 --- /dev/null +++ b/app/views/devise/mailer/confirmation_instructions.text.haml @@ -0,0 +1,5 @@ += t('.greeting', recipient: @email) +\ += t('.instruction') +\ += confirmation_url(@resource, confirmation_token: @token) diff --git a/app/views/devise/mailer/email_changed.haml b/app/views/devise/mailer/email_changed.html.haml similarity index 100% rename from app/views/devise/mailer/email_changed.haml rename to app/views/devise/mailer/email_changed.html.haml diff --git a/app/views/devise/mailer/email_changed.text.haml b/app/views/devise/mailer/email_changed.text.haml new file mode 100644 index 00000000..e5216a5a --- /dev/null +++ b/app/views/devise/mailer/email_changed.text.haml @@ -0,0 +1,6 @@ += t('.greeting', recipient: @email) +\ +- if @resource.try(:unconfirmed_email?) + = t('.message', email: @resource.unconfirmed_email) +- else + = t('.message', email: @resource.email) diff --git a/app/views/devise/mailer/invitation_instructions.haml b/app/views/devise/mailer/invitation_instructions.html.haml similarity index 100% rename from app/views/devise/mailer/invitation_instructions.haml rename to app/views/devise/mailer/invitation_instructions.html.haml diff --git a/app/views/devise/mailer/password_change.haml b/app/views/devise/mailer/password_change.html.haml similarity index 100% rename from app/views/devise/mailer/password_change.haml rename to app/views/devise/mailer/password_change.html.haml diff --git a/app/views/devise/mailer/password_change.text.haml b/app/views/devise/mailer/password_change.text.haml new file mode 100644 index 00000000..fe4c1ea5 --- /dev/null +++ b/app/views/devise/mailer/password_change.text.haml @@ -0,0 +1,3 @@ += t('.greeting', recipient: @resource.email) +\ += t('.message') diff --git a/app/views/devise/mailer/reset_password_instructions.haml b/app/views/devise/mailer/reset_password_instructions.html.haml similarity index 100% rename from app/views/devise/mailer/reset_password_instructions.haml rename to app/views/devise/mailer/reset_password_instructions.html.haml diff --git a/app/views/devise/mailer/reset_password_instructions.text.haml b/app/views/devise/mailer/reset_password_instructions.text.haml new file mode 100644 index 00000000..3d0fe64d --- /dev/null +++ b/app/views/devise/mailer/reset_password_instructions.text.haml @@ -0,0 +1,9 @@ += t('.greeting', recipient: @resource.email) +\ += t('.instruction') +\ += edit_password_url(@resource, reset_password_token: @token) +\ += t('.instruction_2') +\ += t('.instruction_3') diff --git a/app/views/devise/mailer/unlock_instructions.haml b/app/views/devise/mailer/unlock_instructions.html.haml similarity index 100% rename from app/views/devise/mailer/unlock_instructions.haml rename to app/views/devise/mailer/unlock_instructions.html.haml diff --git a/app/views/devise/mailer/unlock_instructions.text.haml b/app/views/devise/mailer/unlock_instructions.text.haml new file mode 100644 index 00000000..cf06927b --- /dev/null +++ b/app/views/devise/mailer/unlock_instructions.text.haml @@ -0,0 +1,7 @@ += t('.greeting', recipient: @resource.email) +\ += t('.message') +\ += t('.instruction') +\ += unlock_url(@resource, unlock_token: @token) diff --git a/app/views/layouts/mailer.text.haml b/app/views/layouts/mailer.text.haml index 36d87bd3..7edd2beb 100644 --- a/app/views/layouts/mailer.text.haml +++ b/app/views/layouts/mailer.text.haml @@ -1,3 +1,4 @@ = yield - +\ += '-- ' = t('.signature') From 6ae31c333a99ced6ecd40feca5be7d34752723df Mon Sep 17 00:00:00 2001 From: f Date: Mon, 27 Jan 2020 13:48:37 -0300 Subject: [PATCH 42/66] usar el mailer de sutty --- config/initializers/devise.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index e503bfc9..ea927a67 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -24,7 +24,7 @@ Devise.setup do |config| # config.mailer = 'Devise::Mailer' # Configure the parent class responsible to send e-mails. - # config.parent_mailer = 'ActionMailer::Base' + config.parent_mailer = 'ApplicationMailer' # ==> ORM configuration # Load and configure the ORM. Supports :active_record (default) and From 2286ddfa5b59a810b70c4a768063a2f20ff372af Mon Sep 17 00:00:00 2001 From: f Date: Mon, 27 Jan 2020 17:56:50 -0300 Subject: [PATCH 43/66] resaltar botones del editor en tema oscuro --- app/assets/stylesheets/application.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index f3fc5f4a..a0807b0a 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -20,12 +20,18 @@ $magenta: #f206f9; --background: #{$black}; --color: #{$cyan}; } + trix-toolbar { + .trix-button--icon { + background-color: var(--color); + } + } } trix-toolbar { background-color: var(--background); position: sticky; top: 0; + } // TODO: Encontrar la forma de generar esto desde los locales de Rails From c8bdec242e5f69619a750afd644d9f2ce1f9da17 Mon Sep 17 00:00:00 2001 From: f Date: Tue, 28 Jan 2020 18:05:59 -0300 Subject: [PATCH 44/66] articulos relacionados, sin filtro --- app/assets/javascripts/application.js | 1 + app/assets/javascripts/input-tag.js | 9 + app/assets/stylesheets/application.scss | 2 + app/models/metadata_related_posts.rb | 23 + .../posts/attribute_ro/_related_posts.haml | 11 + .../posts/attributes/_related_posts.haml | 19 + app/views/posts/show.haml | 1 + doc/uuid.md | 28 + package.json | 2 +- yarn.lock | 603 +----------------- 10 files changed, 113 insertions(+), 586 deletions(-) create mode 100644 app/models/metadata_related_posts.rb create mode 100644 app/views/posts/attribute_ro/_related_posts.haml create mode 100644 app/views/posts/attributes/_related_posts.haml create mode 100644 doc/uuid.md diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 5585413d..b3a88447 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -1,5 +1,6 @@ //= require rails-ujs //= require turbolinks //= require input-tag/input-tag.js +//= require input-map/input-map.js //= require zepto/dist/zepto.min.js //= require_tree . diff --git a/app/assets/javascripts/input-tag.js b/app/assets/javascripts/input-tag.js index ed952c49..99079891 100644 --- a/app/assets/javascripts/input-tag.js +++ b/app/assets/javascripts/input-tag.js @@ -7,4 +7,13 @@ $(document).on('turbolinks:load', function() { props: { ...this.dataset } }); }); + + $('.mapable').each(function() { + this.innerHTML = ''; + + new InputMap({ + target: this, + props: { ...this.dataset } + }); + }); }); diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index a0807b0a..5894e684 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -142,7 +142,9 @@ ol.breadcrumb { transition: all 3s; } +.mapable, .taggable { + .input-map, .input-tag { legend { @extend .sr-only diff --git a/app/models/metadata_related_posts.rb b/app/models/metadata_related_posts.rb new file mode 100644 index 00000000..7d2273a0 --- /dev/null +++ b/app/models/metadata_related_posts.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +# Devuelve una lista de títulos y UUID de todos los posts del mismo +# idioma que el actual, para usar con input-map.js +class MetadataRelatedPosts < MetadataArray + # Genera un Hash de { title | slug => uuid } + def values + site.posts(lang: lang).map do |p| + { title(p) => p.uuid.value } + end.inject(:merge) + end + + private + + def title(post) + post.try(:title).try(:value) || post.try(:slug).try(:value) + end + + # TODO: Traer el idioma actual de otra forma + def lang + post.try(:lang).try(:value) || I18n.locale + end +end diff --git a/app/views/posts/attribute_ro/_related_posts.haml b/app/views/posts/attribute_ro/_related_posts.haml new file mode 100644 index 00000000..f8ffb73c --- /dev/null +++ b/app/views/posts/attribute_ro/_related_posts.haml @@ -0,0 +1,11 @@ +%tr{ id: attribute } + %th= post_label_t(attribute, post: post) + %td + %ul + - metadata.value.each do |v| + - p = site.posts(lang: post.lang.value).find(v, uuid: true) + -# + XXX: Ignorar todos los posts no encontrados (ej: fueron + borrados o el uuid cambió) + - next unless p + %li= link_to p.title.value, site_post_path(site, p.id) diff --git a/app/views/posts/attributes/_related_posts.haml b/app/views/posts/attributes/_related_posts.haml new file mode 100644 index 00000000..8984cb4e --- /dev/null +++ b/app/views/posts/attributes/_related_posts.haml @@ -0,0 +1,19 @@ +.form-group + = label_tag "post_#{attribute}", post_label_t(attribute, post: post) + + .mapable{ data: { values: metadata.value.to_json, + 'default-values': metadata.values.to_json, + name: "post[#{attribute}][]", list: id_for_datalist(attribute), + remove: 'false', legend: post_label_t(attribute, post: post), + described: id_for_help(attribute) } } + + = text_field(*field_name_for('post', attribute, '[]'), + value: metadata.value.join(', '), + **field_options(attribute, metadata)) + + = render 'posts/attribute_feedback', + post: post, attribute: attribute, metadata: metadata + + %datalist{ id: id_for_datalist(attribute) } + - metadata.values.keys.each do |value| + %option{ value: value } diff --git a/app/views/posts/show.haml b/app/views/posts/show.haml index dc8a5def..5cac7f4b 100644 --- a/app/views/posts/show.haml +++ b/app/views/posts/show.haml @@ -26,6 +26,7 @@ = render("posts/attribute_ro/#{metadata.type}", post: @post, attribute: attr, metadata: metadata, + site: @site, tags: all_html_tags) -# Mostrar todo lo que no va en el front_matter (el contenido) diff --git a/doc/uuid.md b/doc/uuid.md new file mode 100644 index 00000000..00c6ffd8 --- /dev/null +++ b/doc/uuid.md @@ -0,0 +1,28 @@ +# Identificadores para los artículos + +Para poder vincular artículos entre sí y para otros usos, necesitamos +identificarlos únicamente. Un identificador incremental es problemático +porque tendríamos que mantener el estado y poder responder preguntas +como ¿cuál es el último identificador que asignamos? + +Para poder identificar artículos sin mantener estado, usamos +[UUIDs](https://en.wikipedia.org/wiki/Universally_unique_identifier), +que son cadenas aleatorias que se pueden asignar adhoc. Así, en lugar +de un ID numérico que va incrementando, podemos asociar cadenas al +estilo `fb4a5048-5fa1-4b85-b70e-6c502feecdb9` (generada con la +herramienta `uuidgen`). + +## MetadataUUID + +Cada artículo se crea con un metadato `uuid` cuyo valor por defecto es +un UUID autogenerado utilizando `SecureRandom.uuid`. Este valor no +cambia (a menos que se lo vacíe intencionalmente). + +## Migración + +Para todos los artículos que existen, hay que escribir una migración que +se los agregue. + +Para esto hay que cargar sitio por sitio, recorrer los artículos +asignando un UUID y guardando todos los cambios como un solo commit de +git. diff --git a/package.json b/package.json index c066c577..13048f70 100644 --- a/package.json +++ b/package.json @@ -5,13 +5,13 @@ "@rails/actiontext": "^6.0.0", "@rails/webpacker": "^4.0.7", "commonmark": "^0.29.0", + "input-map": "https://0xacab.org/sutty/input-map.git", "input-tag": "https://0xacab.org/sutty/input-tag.git", "table-dragger": "https://0xacab.org/sutty/table-dragger.git", "trix": "https://0xacab.org/sutty/trix.git", "zepto": "^1.2.0" }, "devDependencies": { - "glyphhanger": "^3.2.0", "webpack-dev-server": "^3.8.0" } } diff --git a/yarn.lock b/yarn.lock index 6a01172f..e0efd90b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -931,22 +931,6 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -"@zachleat/spider-pig@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@zachleat/spider-pig/-/spider-pig-1.0.3.tgz#36cd1c7c3308449ac09a01e0e7dbc302080e13e3" - integrity sha512-hcYWsxKQt8bQ9ilKyD3dW6IGC5r4jK1gshhFGwiOlzlT1+PX1HCBs7LalLNPmmgh3w6/QJu80NY+AYllZOuCpw== - dependencies: - chalk "^2.3.0" - minimist "^1.2.0" - normalize-url "^2.0.1" - puppeteer "^1.0.0" - url-regex "^4.1.1" - -abab@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" - integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== - abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -960,36 +944,11 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-globals@^4.3.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn@^6.0.1, acorn@^6.0.4: - version "6.4.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" - integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== - acorn@^6.2.1: version "6.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== -agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" - ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1099,11 +1058,6 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -1377,11 +1331,6 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-process-hrtime@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" - integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== - browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -1612,7 +1561,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@2.4.2, chalk@^2.0, chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1632,11 +1581,6 @@ chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" -characterset@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/characterset/-/characterset-1.3.0.tgz#9640d47d285f3ec742a5a6144eb445e073494e1a" - integrity sha1-lkDUfShfPsdCpaYUTrRF4HNJTho= - chokidar@^2.0.2, chokidar@^2.1.6: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -1846,7 +1790,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@1.6.2, concat-stream@^1.5.0: +concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -1861,16 +1805,6 @@ connect-history-api-fallback@^1.6.0: resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== -connect@^3.6.6: - version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -2235,18 +2169,6 @@ csso@^3.5.1: dependencies: css-tree "1.0.0-alpha.29" -cssom@0.3.x, cssom@^0.3.4: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" - integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== - dependencies: - cssom "0.3.x" - currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -2270,15 +2192,6 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -2291,7 +2204,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: +debug@^3.0.0, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2332,11 +2245,6 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" @@ -2482,13 +2390,6 @@ domelementtype@^2.0.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" @@ -2629,18 +2530,6 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2651,18 +2540,6 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.11.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.13.0.tgz#c7adf9bd3f3cc675bb752f202f79a720189cab29" - integrity sha512-eYk2dCkxR07DsHA/X2hRBj0CFAZeri/LyDMc0C8JT1Hqi6JnVpMhJ7XFITbb0+yZS3lVkaPL2oCkZ3AVmeVbMw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -2671,7 +2548,7 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -2683,7 +2560,7 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.0, estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -2826,16 +2703,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@^1.6.6: - version "1.6.7" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" - integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= - dependencies: - concat-stream "1.6.2" - debug "2.6.9" - mkdirp "0.5.1" - yauzl "2.4.1" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -2856,11 +2723,6 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -2875,13 +2737,6 @@ faye-websocket@~0.11.1: dependencies: websocket-driver ">=0.5.1" -fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= - dependencies: - pend "~1.2.0" - figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -2895,11 +2750,6 @@ file-loader@^3.0.1: loader-utils "^1.0.2" schema-utils "^1.0.0" -filesize@^3.5.11: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -2910,7 +2760,7 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.2, finalhandler@~1.1.2: +finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== @@ -3026,15 +2876,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-minipass@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" @@ -3116,11 +2957,6 @@ get-stdin@^4.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -3221,37 +3057,11 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" -glyphhanger@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/glyphhanger/-/glyphhanger-3.2.0.tgz#68f0a67c5ae973e482c13ddd9c40e93bad688246" - integrity sha512-B7uHCjxq1jByOnX4GgWw3mY/RnePz4HMYpVzhnFEfCw7JkasPCaiIihlJUrGt5yJro5UE4Bd+YPjE9CW/ja/4g== - dependencies: - "@zachleat/spider-pig" "^1.0.3" - chalk "^2.3.0" - characterset "^1.3.0" - connect "^3.6.6" - debug "^3.1.0" - filesize "^3.5.11" - fs-extra "^5.0.0" - get-stdin "^6.0.0" - glob "^7.1.2" - jsdom "^13.0.0" - minimist "^1.2.0" - parse-filepath "^1.0.2" - rsvp "^4.7.0" - serve-static "^1.13.2" - shelljs "^0.7.8" - graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== -graceful-fs@^4.1.6: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - handle-thing@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" @@ -3397,13 +3207,6 @@ html-comment-regex@^1.1.0: resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - html-entities@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" @@ -3484,14 +3287,6 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -3613,6 +3408,10 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +"input-map@https://0xacab.org/sutty/input-map.git": + version "0.0.7" + resolved "https://0xacab.org/sutty/input-map.git#e2a356c63e4e956f74dc26527bacb2c7c82c8773" + "input-tag@https://0xacab.org/sutty/input-tag.git": version "0.0.6" resolved "https://0xacab.org/sutty/input-tag.git#5bfcbcb83abd941caadab09f80cc684909f12a37" @@ -3625,7 +3424,7 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@1.2.0, interpret@^1.0.0: +interpret@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== @@ -3647,11 +3446,6 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -ip-regex@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd" - integrity sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0= - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -3682,14 +3476,6 @@ is-absolute-url@^3.0.0: resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.1.tgz#e315cbdcbbc3d6789532d591954ac78a0e5049f6" integrity sha512-c2QjUwuMxLsld90sj3xYzpFYWJtuxkIn1f5ua9RTEYJt/vV2IsM+Py00/6qjV7qExgifUvt7qfyBGBBKm+2iBg== -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -3890,13 +3676,6 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -3926,13 +3705,6 @@ is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -4003,38 +3775,6 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^13.0.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.2.0.tgz#b1a0dbdadc255435262be8ea3723d2dba0d7eb3a" - integrity sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw== - dependencies: - abab "^2.0.0" - acorn "^6.0.4" - acorn-globals "^4.3.0" - array-equal "^1.0.0" - cssom "^0.3.4" - cssstyle "^1.1.1" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.0" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.0.9" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.5" - saxes "^3.1.5" - symbol-tree "^3.2.2" - tough-cookie "^2.5.0" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^6.1.2" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -4084,13 +3824,6 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -4152,14 +3885,6 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -4213,11 +3938,6 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -4238,7 +3958,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.5, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.5, lodash@~4.17.10: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -4298,7 +4018,7 @@ map-age-cleaner@^0.1.1: dependencies: p-defer "^1.0.0" -map-cache@^0.2.0, map-cache@^0.2.2: +map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= @@ -4430,7 +4150,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.0.3, mime@^2.4.2: +mime@^2.4.2: version "2.4.4" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== @@ -4516,7 +4236,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -4759,15 +4479,6 @@ normalize-url@1.9.1: query-string "^4.1.0" sort-keys "^1.0.0" -normalize-url@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" - integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== - dependencies: - prepend-http "^2.0.0" - query-string "^5.0.1" - sort-keys "^2.0.0" - normalize-url@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" @@ -4820,11 +4531,6 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.0.9: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -4935,18 +4641,6 @@ optimize-css-assets-webpack-plugin@^5.0.1: cssnano "^4.1.10" last-call-webpack-plugin "^3.0.0" -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -5065,15 +4759,6 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-filepath@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -5094,11 +4779,6 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== - parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -5156,18 +4836,6 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= - dependencies: - path-root-regex "^0.1.0" - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -5193,11 +4861,6 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -5232,11 +4895,6 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - pnp-webpack-plugin@^1.4.3: version "1.5.0" resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz#62a1cd3068f46d564bb33c56eb250e4d586676eb" @@ -5902,21 +5560,11 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2 source-map "^0.6.1" supports-color "^6.1.0" -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -5932,11 +5580,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -5950,11 +5593,6 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.0" -proxy-from-env@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -5970,11 +5608,6 @@ psl@^1.1.24: resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd" integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag== -psl@^1.1.28: - version "1.7.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" - integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== - public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -6022,25 +5655,11 @@ punycode@^1.2.4, punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -puppeteer@^1.0.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.20.0.tgz#e3d267786f74e1d87cf2d15acc59177f471bbe38" - integrity sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ== - dependencies: - debug "^4.1.0" - extract-zip "^1.6.6" - https-proxy-agent "^2.2.1" - mime "^2.0.3" - progress "^2.0.1" - proxy-from-env "^1.0.0" - rimraf "^2.6.1" - ws "^6.1.0" - q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -6064,15 +5683,6 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -6188,13 +5798,6 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -6293,22 +5896,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request-promise-core@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" - integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== - dependencies: - lodash "^4.17.15" - -request-promise-native@^1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" - integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== - dependencies: - request-promise-core "1.1.3" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - request@^2.87.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" @@ -6380,13 +5967,6 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6: - version "1.15.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" - integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw== - dependencies: - path-parse "^1.0.6" - resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" @@ -6429,11 +6009,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rsvp@^4.7.0: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -6496,13 +6071,6 @@ sax@^1.2.4, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -saxes@^3.1.5: - version "3.1.11" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== - dependencies: - xmlchars "^2.1.1" - schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -6584,7 +6152,7 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.14.1, serve-static@^1.13.2: +serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== @@ -6651,15 +6219,6 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shelljs@^0.7.8: - version "0.7.8" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" - integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM= - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -6729,13 +6288,6 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= - dependencies: - is-plain-obj "^1.0.0" - source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -6894,11 +6446,6 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -7081,11 +6628,6 @@ svgo@^1.0.0: unquote "~1.1.1" util.promisify "~1.0.0" -symbol-tree@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - "table-dragger@https://0xacab.org/sutty/table-dragger.git": version "2.0.2" resolved "https://0xacab.org/sutty/table-dragger.git#a5199975398dca9b3a849f5d56220fd11e68733c" @@ -7176,11 +6718,6 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= -tlds@^1.187.0: - version "1.207.0" - resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.207.0.tgz#459264e644cf63ddc0965fece3898913286b1afd" - integrity sha512-k7d7Q1LqjtAvhtEOs3yN14EabsNO8ZCoY6RESSJDB9lst3bTx3as/m1UuAeCKzYxiyhR1qq72ZPhpSf+qlqiwg== - to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -7221,14 +6758,6 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@^2.3.3, tough-cookie@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -7237,13 +6766,6 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -7292,13 +6814,6 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -7312,11 +6827,6 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= - unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -7374,11 +6884,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -7422,14 +6927,6 @@ url-parse@^1.4.3: querystringify "^2.1.1" requires-port "^1.0.0" -url-regex@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-4.1.1.tgz#a5617b22e15e26dac57ce74c3f52088bcdfec995" - integrity sha512-ViSDgDPNKkrQHI81GLCjdDN+Rsk3tAW/uLXlBOJxtcHzWZjta58Z0APXhfXzS89YszsheMnEvXeDXsWUB53wwA== - dependencies: - ip-regex "^1.0.1" - tlds "^1.187.0" - url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -7517,22 +7014,6 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== -w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= - dependencies: - browser-process-hrtime "^0.1.2" - -w3c-xmlserializer@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - watchpack@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" @@ -7549,11 +7030,6 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - webpack-assets-manifest@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-3.1.1.tgz#39bbc3bf2ee57fcd8ba07cda51c9ba4a3c6ae1de" @@ -7692,27 +7168,6 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" @@ -7737,11 +7192,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -7771,23 +7221,13 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -ws@^6.1.0, ws@^6.1.2, ws@^6.2.1: +ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== dependencies: async-limiter "~1.0.0" -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -7890,13 +7330,6 @@ yargs@^7.0.0: y18n "^3.2.1" yargs-parser "^5.0.0" -yauzl@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" - integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= - dependencies: - fd-slicer "~1.0.1" - zepto@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/zepto/-/zepto-1.2.0.tgz#e127bd9e66fd846be5eab48c1394882f7c0e4f98" From 5b20919fb3ebbde5f05b08b7facc569292bc43b3 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 6 Feb 2020 13:11:17 -0300 Subject: [PATCH 45/66] Content Security Policy --- .env.example | 5 ++- app/controllers/api/v1/base_controller.rb | 3 -- .../api/v1/csp_reports_controller.rb | 42 +++++++++++++++++++ app/controllers/api/v1/sites_controller.rb | 3 ++ app/models/csp_report.rb | 4 ++ .../initializers/content_security_policy.rb | 41 +++++++++--------- config/initializers/mime_types.rb | 5 +-- config/routes.rb | 1 + .../20200205173039_create_csp_reports.rb | 17 ++++++++ ...0200206151057_add_source_to_csp_reports.rb | 7 ++++ db/schema.rb | 9 +++- .../api/v1/csp_reports_controller_test.rb | 25 +++++++++++ 12 files changed, 133 insertions(+), 29 deletions(-) create mode 100644 app/controllers/api/v1/csp_reports_controller.rb create mode 100644 app/models/csp_report.rb create mode 100644 db/migrate/20200205173039_create_csp_reports.rb create mode 100644 db/migrate/20200206151057_add_source_to_csp_reports.rb create mode 100644 test/controllers/api/v1/csp_reports_controller_test.rb diff --git a/.env.example b/.env.example index eea8055d..ac0751b1 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,8 @@ -RAILS_ENV=production +RAILS_ENV= IMAP_SERVER= DEFAULT_FROM= SKEL_SUTTY=https://0xacab.org/sutty/skel.sutty.nl -SUTTY=sutty.nl +SUTTY=sutty.local +SUTTY_WITH_PORT=sutty.local:3000 REDIS_SERVER= REDIS_CLIENT= diff --git a/app/controllers/api/v1/base_controller.rb b/app/controllers/api/v1/base_controller.rb index 517fa28f..6f76e51a 100644 --- a/app/controllers/api/v1/base_controller.rb +++ b/app/controllers/api/v1/base_controller.rb @@ -4,9 +4,6 @@ module Api module V1 # API class BaseController < ActionController::Base - http_basic_authenticate_with name: ENV['HTTP_BASIC_USER'], - password: ENV['HTTP_BASIC_PASSWORD'] - protect_from_forgery with: :null_session respond_to :json end diff --git a/app/controllers/api/v1/csp_reports_controller.rb b/app/controllers/api/v1/csp_reports_controller.rb new file mode 100644 index 00000000..cdce92d6 --- /dev/null +++ b/app/controllers/api/v1/csp_reports_controller.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +module Api + module V1 + # Recibe los reportes de Content Security Policy + class CspReportsController < BaseController + # Crea un reporte de CSP intercambiando los guiones medios por + # bajos + # + # TODO: Aplicar rate_limit + def create + csp = CspReport.new(csp_report_params.to_h.map do |k, v| + { k.tr('-', '_') => v } + end.inject(&:merge)) + + csp.id = SecureRandom.uuid + csp.save + + render json: {}, status: :created + end + + private + + # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only#Violation_report_syntax + def csp_report_params + params.require(:'csp-report') + .permit(:disposition, + :referrer, + :'blocked-uri', + :'document-uri', + :'effective-directive', + :'original-policy', + :'script-sample', + :'status-code', + :'violated-directive', + :'line-number', + :'column-number', + :'source-file') + end + end + end +end diff --git a/app/controllers/api/v1/sites_controller.rb b/app/controllers/api/v1/sites_controller.rb index 8bea164e..18550feb 100644 --- a/app/controllers/api/v1/sites_controller.rb +++ b/app/controllers/api/v1/sites_controller.rb @@ -4,6 +4,9 @@ module Api module V1 # API para sitios class SitesController < BaseController + http_basic_authenticate_with name: ENV['HTTP_BASIC_USER'], + password: ENV['HTTP_BASIC_PASSWORD'] + def index render json: Site.all.order(:name).pluck(:name) end diff --git a/app/models/csp_report.rb b/app/models/csp_report.rb new file mode 100644 index 00000000..e76c23bb --- /dev/null +++ b/app/models/csp_report.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +# Almacena un reporte de CSP +class CspReport < ApplicationRecord; end diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index cccb03cb..5423271b 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -6,31 +6,34 @@ # For further information see the following documentation # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy -# Rails.application.config.content_security_policy do |policy| -# policy.default_src :self, :https -# policy.font_src :self, :https, :data -# policy.img_src :self, :https, :data -# policy.object_src :none -# policy.script_src :self, :https -# policy.style_src :self, :https -# # If you are using webpack-dev-server then specify -# # webpack-dev-server host -# policy.connect_src :self, :https, "http://localhost:3035", -# "ws://localhost:3035" if Rails.env.development? +Rails.application.config.content_security_policy do |policy| + policy.default_src :self + # XXX: Varios scripts generan estilos en línea + policy.style_src :self, :unsafe_inline + # Repetimos la default para poder saber cuál es la política en falta + policy.script_src :self + policy.font_src :self + # TODO: Permitimos cargar imágenes remotas? + policy.img_src :self + # Ya no usamos applets! + policy.object_src :none + if Rails.env.development? + policy.connect_src :self, + 'http://localhost:3035', + 'ws://localhost:3035' + end -# # Specify URI for violation reports -# # policy.report_uri "/csp-violation-report-endpoint" -# end + # Specify URI for violation reports + policy.report_uri "https://api.#{ENV.fetch('SUTTY_WITH_PORT', 'sutty.nl')}/v1/csp_reports.json" +end # If you are using UJS then enable automatic nonce generation -# Rails.application.config.content_security_policy_nonce_generator = -# -> request { SecureRandom.base64(16) } +# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } # Set the nonce only to specific directives -# Rails.application.config.content_security_policy_nonce_directives = -# %w(script-src) +# Rails.application.config.content_security_policy_nonce_directives = %w(script-src) # Report CSP violations to a specified URI # For further information see the following documentation: # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only -# Rails.application.config.content_security_policy_report_only = true +Rails.application.config.content_security_policy_report_only = false diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb index be6fedc5..1836ef30 100644 --- a/config/initializers/mime_types.rb +++ b/config/initializers/mime_types.rb @@ -1,6 +1,3 @@ # frozen_string_literal: true -# Be sure to restart your server when you modify this file. - -# Add new mime types for use in respond_to blocks: -# Mime::Type.register "text/richtext", :rtf +Mime::Type.register 'application/csp-report', :json diff --git a/config/routes.rb b/config/routes.rb index 8ef82cbc..abad9ea7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -18,6 +18,7 @@ Rails.application.routes.draw do constraints subdomain: 'api' do scope module: 'api' do namespace :v1 do + resources :csp_reports, only: %i[create] get 'sites/allowed', to: 'sites#allowed' resources :sites, only: %i[index] end diff --git a/db/migrate/20200205173039_create_csp_reports.rb b/db/migrate/20200205173039_create_csp_reports.rb new file mode 100644 index 00000000..2a0f4051 --- /dev/null +++ b/db/migrate/20200205173039_create_csp_reports.rb @@ -0,0 +1,17 @@ +class CreateCspReports < ActiveRecord::Migration[6.0] + def change + create_table :csp_reports, id: :uuid do |t| + t.timestamps + + t.string :disposition + t.string :referrer + t.string :blocked_uri + t.string :document_uri + t.string :effective_directive + t.string :original_policy + t.string :script_sample + t.string :status_code + t.string :violated_directive + end + end +end diff --git a/db/migrate/20200206151057_add_source_to_csp_reports.rb b/db/migrate/20200206151057_add_source_to_csp_reports.rb new file mode 100644 index 00000000..9b1dd8fb --- /dev/null +++ b/db/migrate/20200206151057_add_source_to_csp_reports.rb @@ -0,0 +1,7 @@ +class AddSourceToCspReports < ActiveRecord::Migration[6.0] + def change + add_column :csp_reports, :column_number, :integer + add_column :csp_reports, :line_number, :integer + add_column :csp_reports, :source_file, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 6d63cb91..5d0d00a8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -12,7 +12,10 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20_190_829_180_743) do +ActiveRecord::Schema.define(version: 20_200_206_151_057) do + # Could not dump table "access_logs" because of following StandardError + # Unknown type '' for column 'id' + create_table 'action_text_rich_texts', force: :cascade do |t| t.string 'name', null: false t.text 'body' @@ -55,6 +58,9 @@ ActiveRecord::Schema.define(version: 20_190_829_180_743) do t.index ['deploy_id'], name: 'index_build_stats_on_deploy_id' end + # Could not dump table "csp_reports" because of following StandardError + # Unknown type 'uuid' for column 'id' + create_table 'deploys', force: :cascade do |t| t.datetime 'created_at', null: false t.datetime 'updated_at', null: false @@ -132,6 +138,7 @@ ActiveRecord::Schema.define(version: 20_190_829_180_743) do t.string 'status', default: 'waiting' t.text 'description' t.string 'title' + t.boolean 'colaboracion_anonima', default: false t.index ['design_id'], name: 'index_sites_on_design_id' t.index ['licencia_id'], name: 'index_sites_on_licencia_id' t.index ['name'], name: 'index_sites_on_name', unique: true diff --git a/test/controllers/api/v1/csp_reports_controller_test.rb b/test/controllers/api/v1/csp_reports_controller_test.rb new file mode 100644 index 00000000..c98fd860 --- /dev/null +++ b/test/controllers/api/v1/csp_reports_controller_test.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'test_helper' + +module Api + module V1 + class CSPReportsControllerTest < ActionDispatch::IntegrationTest + test 'se puede enviar un reporte' do + post v1_csp_reports_url, + params: { + 'csp-report': { + 'document-uri': 'http://example.com/signup.html', + 'referrer': '', + 'blocked-uri': 'http://example.com/css/style.css', + 'violated-directive': 'style-src cdn.example.com', + 'original-policy': "default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports" + } + } + + assert_equal 201, response.status + assert_equal 1, CspReport.all.count + end + end + end +end From c2b695b017befb1c24beb216c27a8eba1cbae098 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 6 Feb 2020 13:17:36 -0300 Subject: [PATCH 46/66] =?UTF-8?q?no=20habilitar=20protecci=C3=B3n=20contra?= =?UTF-8?q?=20dns=20rebinding=20en=20producci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/initializers/hosts.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/hosts.rb b/config/initializers/hosts.rb index 05ed2f5b..58ee2e39 100644 --- a/config/initializers/hosts.rb +++ b/config/initializers/hosts.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true Rails.application.configure do - next if ENV['RAILS_ENV'] == 'test' + next unless ENV['RAILS_ENV'] == 'development' domain = ENV.fetch('SUTTY', 'sutty.nl') From 6434d130be6a577b266e372c4dcf1e0c12ce49ba Mon Sep 17 00:00:00 2001 From: f Date: Thu, 6 Feb 2020 13:18:10 -0300 Subject: [PATCH 47/66] desarrollar con https, ver https://0xacab.org/sutty/sutty.local --- .gitignore | 3 +++ Makefile | 3 +++ config/webpacker.yml | 6 +++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index e2387c87..8d7772c3 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,6 @@ yarn-debug.log* .yarn-integrity /vendor + +*.key +*.crt diff --git a/Makefile b/Makefile index 84006b5b..45fbf66b 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,9 @@ mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) root_dir := $(patsubst %/,%,$(dir $(mkfile_path))) include $(root_dir)/.env +serve: + bundle exec rails s -b "ssl://0.0.0.0:3000?key=config/sutty.local.key&cert=config/sutty.local.crt" + # Limpiar los archivos de testeo clean: rm -rf _sites/test-* _deploy/test-* diff --git a/config/webpacker.yml b/config/webpacker.yml index 46ed57dd..ec2129c4 100644 --- a/config/webpacker.yml +++ b/config/webpacker.yml @@ -57,10 +57,10 @@ development: # Reference: https://webpack.js.org/configuration/dev-server/ dev_server: - https: false - host: localhost + https: true + host: sutty.local port: 3035 - public: localhost:3035 + public: sutty.local:3035 hmr: false # Inline should be set to true if using HMR inline: true From 61e9bf70dc7d4b0ce9b6dfe8780609b87050a5a2 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 6 Feb 2020 13:30:21 -0300 Subject: [PATCH 48/66] =?UTF-8?q?agregar=20optimizadores=20de=20im=C3=A1ge?= =?UTF-8?q?nes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit es una herramienta secreta que nos va a servir luego --- Dockerfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c340cbd5..634c264a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ # el mismo repositorio de trabajo. Cuando tengamos CI/CD algunas cosas # como el tarball van a tener que cambiar porque ya vamos a haber hecho # un clone/pull limpio. +FROM sutty/oxipng:latest as oxipng FROM alpine:3.11 as build MAINTAINER "f " @@ -67,10 +68,14 @@ RUN rm -rf ./node_modules ./tmp/cache ./.git FROM sutty/monit:latest ENV RAILS_ENV production +# Instalar oxipng +COPY --from=oxipng --chown=root:root /root/.cargo/bin/oxipng /usr/bin/oxipng +RUN chmod 755 /usr/bin/oxipng + # Instalar las dependencias, separamos la librería de base de datos para # poder reutilizar este primer paso desde otros contenedores RUN apk add --no-cache libxslt libxml2 tzdata ruby ruby-bundler ruby-json ruby-bigdecimal ruby-rake -RUN apk add --no-cache postgresql-libs libssh2 file rsync git +RUN apk add --no-cache postgresql-libs libssh2 file rsync git jpegoptim vips # Chequear que la versión de ruby sea la correcta RUN test "2.6.5" = `ruby -e 'puts RUBY_VERSION'` From fb5cc9ae26a19cc8b14361a9af0a86493a9456e0 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 6 Feb 2020 14:06:47 -0300 Subject: [PATCH 49/66] hacer inteligencia con sutty --- .env.example | 7 ++ Gemfile | 2 +- Gemfile.lock | 12 +++- config/blazer.yml | 75 +++++++++++++++++++++ config/routes.rb | 1 + db/migrate/20200206163257_install_blazer.rb | 51 ++++++++++++++ 6 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 config/blazer.yml create mode 100644 db/migrate/20200206163257_install_blazer.rb diff --git a/.env.example b/.env.example index ac0751b1..2d888779 100644 --- a/.env.example +++ b/.env.example @@ -6,3 +6,10 @@ SUTTY=sutty.local SUTTY_WITH_PORT=sutty.local:3000 REDIS_SERVER= REDIS_CLIENT= +# API authentication +HTTP_BASIC_USER= +HTTP_BASIC_PASSWORD= +BLAZER_DATABASE_URL= +BLAZER_SLACK_WEBHOOK_URL= +BLAZER_USERNAME= +BLAZER_PASSWORD= diff --git a/Gemfile b/Gemfile index 059fa2d1..b9a71077 100644 --- a/Gemfile +++ b/Gemfile @@ -38,7 +38,7 @@ gem 'turbolinks', '~> 5' gem 'jbuilder', '~> 2.5' # Use ActiveModel has_secure_password gem 'bcrypt', '~> 3.1.7' - +gem 'blazer' gem 'bootstrap', '~> 4' gem 'commonmarker' gem 'devise' diff --git a/Gemfile.lock b/Gemfile.lock index 51ea3239..c46f3333 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -79,6 +79,11 @@ GEM bcrypt (3.1.13) bcrypt_pbkdf (1.0.1) bindex (0.8.1) + blazer (2.2.1) + activerecord (>= 5) + chartkick (>= 3.2) + railties (>= 5) + safely_block (>= 0.1.1) bootstrap (4.4.1) autoprefixer-rails (>= 9.1.0) popper_js (>= 1.14.3, < 2) @@ -92,6 +97,7 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (>= 2.0, < 4.0) + chartkick (3.3.1) childprocess (3.0.0) coderay (1.1.2) colorator (1.1.0) @@ -122,6 +128,7 @@ GEM email_address (0.1.12) netaddr (>= 2.0.4, < 3) simpleidn + errbase (0.2.0) erubi (1.9.0) eventmachine (1.2.7) exception_notification (4.4.0) @@ -324,6 +331,8 @@ GEM rubyzip (2.0.0) rugged (0.28.4.1) safe_yaml (1.0.5) + safely_block (0.3.0) + errbase (>= 0.1.1) sassc (2.2.1) ffi (~> 1.9) sassc-rails (2.1.2) @@ -396,6 +405,7 @@ PLATFORMS DEPENDENCIES bcrypt (~> 3.1.7) bcrypt_pbkdf + blazer bootstrap (~> 4) brakeman capybara (~> 2.13) @@ -453,4 +463,4 @@ RUBY VERSION ruby 2.6.5p114 BUNDLED WITH - 2.0.2 + 2.1.4 diff --git a/config/blazer.yml b/config/blazer.yml new file mode 100644 index 00000000..3ce51b87 --- /dev/null +++ b/config/blazer.yml @@ -0,0 +1,75 @@ +# see https://github.com/ankane/blazer for more info + +data_sources: + main: + url: <%= ENV["BLAZER_DATABASE_URL"] %> + + # statement timeout, in seconds + # none by default + # timeout: 15 + + # caching settings + # can greatly improve speed + # off by default + # cache: + # mode: slow # or all + # expires_in: 60 # min + # slow_threshold: 15 # sec, only used in slow mode + + # wrap queries in a transaction for safety + # not necessary if you use a read-only user + # true by default + # use_transaction: false + + smart_variables: + site_id: 'select id, name from sites order by name asc' + # zone_id: "SELECT id, name FROM zones ORDER BY name ASC" + # period: ["day", "week", "month"] + # status: {0: "Active", 1: "Archived"} + + linked_columns: + # user_id: "/admin/users/{value}" + + smart_columns: + site_id: 'select id, name from sites where id in {value}' + # user_id: "SELECT id, name FROM users WHERE id IN {value}" + +# create audits +audit: true + +# change the time zone +# time_zone: "Pacific Time (US & Canada)" + +# class name of the user model +user_class: Usuarie + +# method name for the current user +user_method: current_usuarie + +# method name for the display name +user_name: email + +# custom before_action to use for auth +# before_action_method: require_admin + +# email to send checks from +from_email: blazer@<%= ENV.fetch('SUTTY', 'sutty.nl') %> + +# webhook for Slack +# slack_webhook_url: <%= ENV["BLAZER_SLACK_WEBHOOK_URL"] %> + +check_schedules: + - "1 day" + - "1 hour" + - "5 minutes" + +# enable anomaly detection +# note: with trend, time series are sent to https://trendapi.org +# anomaly_checks: trend / r + +# enable forecasting +# note: with trend, time series are sent to https://trendapi.org +# forecasting: trend + +# enable map +# mapbox_access_token: <%= ENV["MAPBOX_ACCESS_TOKEN"] %> diff --git a/config/routes.rb b/config/routes.rb index abad9ea7..d8b5f391 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,6 +2,7 @@ Rails.application.routes.draw do devise_for :usuaries + mount Blazer::Engine, at: 'blazer' root 'application#index' diff --git a/db/migrate/20200206163257_install_blazer.rb b/db/migrate/20200206163257_install_blazer.rb new file mode 100644 index 00000000..9b084169 --- /dev/null +++ b/db/migrate/20200206163257_install_blazer.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +# Blazer +class InstallBlazer < ActiveRecord::Migration[6.0] + def change + return unless Rails.env.production? + + create_table :blazer_queries do |t| + t.references :creator + t.string :name + t.text :description + t.text :statement + t.string :data_source + t.timestamps null: false + end + + create_table :blazer_audits do |t| + t.references :user + t.references :query + t.text :statement + t.string :data_source + t.timestamp :created_at + end + + create_table :blazer_dashboards do |t| + t.references :creator + t.text :name + t.timestamps null: false + end + + create_table :blazer_dashboard_queries do |t| + t.references :dashboard + t.references :query + t.integer :position + t.timestamps null: false + end + + create_table :blazer_checks do |t| + t.references :creator + t.references :query + t.string :state + t.string :schedule + t.text :emails + t.text :slack_channels + t.string :check_type + t.text :message + t.timestamp :last_run_at + t.timestamps null: false + end + end +end From aa826629cfdb38eb451ecfb1c0afbde5b97fcbb9 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 6 Feb 2020 14:07:13 -0300 Subject: [PATCH 50/66] webpacker configurable --- config/webpacker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/webpacker.yml b/config/webpacker.yml index ec2129c4..c37bb708 100644 --- a/config/webpacker.yml +++ b/config/webpacker.yml @@ -58,9 +58,9 @@ development: # Reference: https://webpack.js.org/configuration/dev-server/ dev_server: https: true - host: sutty.local + host: <%= ENV.fetch('SUTTY', 'localhost') %> port: 3035 - public: sutty.local:3035 + public: <%= ENV.fetch('SUTTY', 'localhost') %>:3035 hmr: false # Inline should be set to true if using HMR inline: true From 983f2da04f9a168a2c4354483ffcd6ea89bf26ee Mon Sep 17 00:00:00 2001 From: f Date: Thu, 6 Feb 2020 14:18:14 -0300 Subject: [PATCH 51/66] solo detectar gemas cuando las estamos compilando --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 45fbf66b..78154240 100644 --- a/Makefile +++ b/Makefile @@ -24,10 +24,12 @@ load: ../gems/: mkdir -p $@ +ifeq ($(MAKECMDGOALS),convert-gems) gem_dir := $(shell readlink -f ../gems) gems := $(shell bundle show --paths | xargs -I {} sh -c 'test -f {}/ext/*/extconf.rb && basename {}') gems += $(shell bundle show --paths | xargs -I {} sh -c 'test -f {}/ext/extconf.rb && basename {}') gems_musl := $(patsubst %,$(gem_dir)/%-x86_64-linux-musl.gem,$(gems)) +endif $(gem_dir)/%-x86_64-linux-musl.gem: docker run \ From c6151c2d3e6eb65858396973015b05e02a240b68 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 6 Feb 2020 16:20:11 -0300 Subject: [PATCH 52/66] sin csp para blazer --- config/blazer.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/blazer.yml b/config/blazer.yml index 3ce51b87..14501c81 100644 --- a/config/blazer.yml +++ b/config/blazer.yml @@ -63,6 +63,8 @@ check_schedules: - "1 hour" - "5 minutes" +override_csp: true + # enable anomaly detection # note: with trend, time series are sent to https://trendapi.org # anomaly_checks: trend / r From e6dce0e05597186b201269f5662707b767442d5c Mon Sep 17 00:00:00 2001 From: f Date: Fri, 7 Feb 2020 20:38:56 -0300 Subject: [PATCH 53/66] cargar los iconos de trix --- config/initializers/content_security_policy.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index 5423271b..7040a8d1 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -14,7 +14,8 @@ Rails.application.config.content_security_policy do |policy| policy.script_src :self policy.font_src :self # TODO: Permitimos cargar imágenes remotas? - policy.img_src :self + # XXX: Los íconos de Trix se cargan vía data: + policy.img_src :self, :data # Ya no usamos applets! policy.object_src :none if Rails.env.development? From f03e42f350474954811481ebdb4543959059e2a6 Mon Sep 17 00:00:00 2001 From: f Date: Tue, 11 Feb 2020 13:54:10 -0300 Subject: [PATCH 54/66] boton de registro #80 --- app/views/devise/shared/_links.haml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/devise/shared/_links.haml b/app/views/devise/shared/_links.haml index 0e646e41..c182d323 100644 --- a/app/views/devise/shared/_links.haml +++ b/app/views/devise/shared/_links.haml @@ -5,7 +5,8 @@ %br/ - if devise_mapping.registerable? && controller_name != 'registrations' - = link_to t('.sign_up'), new_registration_path(resource_name) + = link_to t('.sign_up'), new_registration_path(resource_name), + class: 'btn btn-lg btn-block btn-success' %br/ - if devise_mapping.recoverable? From e868462dbf8ce248e8f7adedc923da75f1c27e4b Mon Sep 17 00:00:00 2001 From: f Date: Tue, 11 Feb 2020 13:56:29 -0300 Subject: [PATCH 55/66] mensaje de bienvenida --- app/views/devise/registrations/new.haml | 5 ++--- config/locales/devise.views.en.yml | 3 ++- config/locales/devise.views.es.yml | 8 ++++---- config/locales/es.yml | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/views/devise/registrations/new.haml b/app/views/devise/registrations/new.haml index 41d2fbfa..92a44aec 100644 --- a/app/views/devise/registrations/new.haml +++ b/app/views/devise/registrations/new.haml @@ -5,9 +5,8 @@ .row.align-items-center.justify-content-center.full-height .col-md-5.align-self-center - .sr-only - %h2= t('.sign_up') - %p= t('.help') + %h2= t('.sign_up') + %p= t('.help') = form_for(resource, as: resource_name, diff --git a/config/locales/devise.views.en.yml b/config/locales/devise.views.en.yml index d4c60db0..fd041b33 100644 --- a/config/locales/devise.views.en.yml +++ b/config/locales/devise.views.en.yml @@ -44,7 +44,7 @@ en: locked: Your account is locked. not_found_in_database: Invalid %{authentication_keys} or password. timeout: Your session expired. Please sign in again to continue. - unauthenticated: You need to sign in or sign up before continuing. + unauthenticated: Hi! You need to sign in or sign up before managing your sites. unconfirmed: You have to confirm your email address before continuing. mailer: confirmation_instructions: @@ -103,6 +103,7 @@ en: we_need_your_current_password_to_confirm_your_changes: We need your current password to confirm your changes new: sign_up: Sign up + help: We only ask for an e-mail address and a password. The password is safely stored, no one else besides you knows it! You'll also receive an e-mail to confirm your account. signed_up: Welcome! You have signed up successfully. signed_up_but_inactive: You have signed up successfully. However, we could not sign you in because your account is not yet activated. signed_up_but_locked: You have signed up successfully. However, we could not sign you in because your account is locked. diff --git a/config/locales/devise.views.es.yml b/config/locales/devise.views.es.yml index 508930c1..d0f57934 100644 --- a/config/locales/devise.views.es.yml +++ b/config/locales/devise.views.es.yml @@ -16,7 +16,7 @@ es: last_sign_in_ip: IP del último inicio locked_at: Fecha de bloqueo password: Contraseña - password_confirmation: Confirmación de la contraseña + password_confirmation: Confirma tu contraseña remember_created_at: Fecha de 'Recordarme' remember_me: Recordarme reset_password_sent_at: Fecha de envío de código para contraseña @@ -44,7 +44,7 @@ es: locked: Tu cuenta está bloqueada. not_found_in_database: "%{authentication_keys} o contraseña inválidos." timeout: Tu sesión expiró. Por favor, inicia sesión nuevamente para continuar. - unauthenticated: Tienes que iniciar sesión o registrarte para poder continuar. + unauthenticated: "¡Hola! Tienes que iniciar sesión o registrarte para poder gestionar tus sitios." unconfirmed: Te enviamos un correo electrónico para confirmar tu cuenta, por favor acéptalo para poder continuar. mailer: confirmation_instructions: @@ -80,7 +80,7 @@ es: edit: change_my_password: Cambiar mi contraseña change_your_password: Cambia tu contraseña - confirm_new_password: Confirme la nueva contraseña + confirm_new_password: Confirma la nueva contraseña new_password: Nueva contraseña new: forgot_your_password: "¿Has olvidado tu contraseña?" @@ -103,7 +103,7 @@ es: we_need_your_current_password_to_confirm_your_changes: Necesitamos tu contraseña actual para confirmar los cambios. new: sign_up: Registrarme por primera vez - email: O simplemente continuar con tu dirección de correo y contraseña + help: Para registrarte solo pedimos una dirección de correo y una contraseña. La contraseña se almacena de forma segura, ¡nadie más que vos la sabe! Recibirás un correo de confirmación de cuenta. signed_up: Bienvenide. Tu cuenta fue creada. signed_up_but_inactive: Tu cuenta ha sido creada correctamente. Sin embargo, no hemos podido iniciar la sesión porque tu cuenta aún no está activada. signed_up_but_locked: Tu cuenta ha sido creada correctamente. Sin embargo, no hemos podido iniciar la sesión porque que tu cuenta está bloqueada. diff --git a/config/locales/es.yml b/config/locales/es.yml index 3a11551a..fffb3378 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -71,7 +71,7 @@ es: usuarie: email: 'Correo electrónico' password: 'Contraseña' - password_confirmation: 'Confirmación de contraseña' + password_confirmation: 'Confirma tu contraseña' current_password: 'Contraseña actual' lang: Idioma principal remember_me: Recordarme From b28ca182a77f4be245b211db0526d710abf50267 Mon Sep 17 00:00:00 2001 From: f Date: Tue, 11 Feb 2020 14:08:48 -0300 Subject: [PATCH 56/66] permitir ingresar sin confirmar la cuenta #80 --- config/initializers/devise.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index ea927a67..4980a93b 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -197,7 +197,7 @@ Devise.setup do |config| # website without confirming their account. # Default is 0.days, meaning the user cannot access the website # without confirming their account. - # config.allow_unconfirmed_access_for = 2.days + config.allow_unconfirmed_access_for = 2.days # A period that the user is allowed to confirm their account before # their token becomes invalid. For example, if set to 3.days, the user From 96fc65a94fe9cb16c4ea7b486816e85153652b7c Mon Sep 17 00:00:00 2001 From: f Date: Tue, 11 Feb 2020 14:23:38 -0300 Subject: [PATCH 57/66] mensaje de bienvenida #80 --- app/views/sites/index.haml | 3 +++ config/locales/en.yml | 17 ++++++++++++++++- config/locales/es.yml | 12 ++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/app/views/sites/index.haml b/app/views/sites/index.haml index 0cd3562c..759e9e38 100644 --- a/app/views/sites/index.haml +++ b/app/views/sites/index.haml @@ -9,6 +9,9 @@ class: 'btn' %section.col + - if @sites.empty? + :markdown + #{t('.welcome')} %table.table.table-condensed %tbody - @sites.each do |site| diff --git a/config/locales/en.yml b/config/locales/en.yml index 4e0d1c8d..1a452b5a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -251,7 +251,22 @@ en: title: 'Sites' pull: 'Upgrade' help: 'This is the list of sites you can edit' - visit: 'Visitar el sitio' + visit: 'Visit the site' + welcome: | + # Welcome! + + You have no sites yet. You can generate all the sites you want + with the **Create site** button. + + Para ver los cambios, usa el botón **Publicar cambios** en cada + sitio y espera unos segundos. También recibirás un correo de + notificación. + + To see your changes, use the **Publish changes** button on each + site and wait a few seconds. You'll also receive an e-mail + notification. + + [Create my first site](/sites/new) repository: config: 'Changes in config' actions: 'Actions' diff --git a/config/locales/es.yml b/config/locales/es.yml index fffb3378..fd15d75b 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -257,6 +257,18 @@ es: pull: 'Actualizar' help: 'Este es el listado de sitios que puedes editar' visit: 'Visitar el sitio' + welcome: | + # ¡Bienvenide! + + Todavía no tienes ningún sitio. Puedes crear todos los sitios + que quieras usando el botón **Crear sitio**. + + Para ver los cambios, usa el botón **Publicar cambios** en cada + sitio y espera unos segundos. También recibirás un correo de + notificación. + + [Crear mi primer sitio](/sites/new) + repository: config: 'Cambios en la configuración' actions: 'Acciones' From cc4d49b3984b262287398abd8841cc3e591e03f0 Mon Sep 17 00:00:00 2001 From: f Date: Tue, 11 Feb 2020 14:25:42 -0300 Subject: [PATCH 58/66] =?UTF-8?q?quitar=20el=20bot=C3=B3n=20de=20ayuda=20m?= =?UTF-8?q?utua=20temporalmente=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit hasta que resolvamos la usabilidad del chat --- app/views/layouts/_breadcrumb.haml | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/views/layouts/_breadcrumb.haml b/app/views/layouts/_breadcrumb.haml index 8d9939eb..3551153a 100644 --- a/app/views/layouts/_breadcrumb.haml +++ b/app/views/layouts/_breadcrumb.haml @@ -21,9 +21,6 @@ - if current_usuarie %ul.navbar-nav - %li.nav-item - = link_to t('.mutual_aid'), mutual_aid_url(local_channel), - class: 'btn' %li.nav-item = link_to t('.logout'), destroy_usuarie_session_path, method: :delete, role: 'button', class: 'btn' From 8667215a2ada4172845e5ec9fb6f7fb888b58e2d Mon Sep 17 00:00:00 2001 From: f Date: Tue, 11 Feb 2020 14:41:57 -0300 Subject: [PATCH 59/66] dar menos opciones al crear el sitio #80 --- app/views/sites/_form.haml | 20 +++++++++++++------- app/views/sites/edit.haml | 4 ++-- app/views/sites/new.haml | 5 +++-- config/locales/es.yml | 1 + 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/app/views/sites/_form.haml b/app/views/sites/_form.haml index 60e5a8de..18814dca 100644 --- a/app/views/sites/_form.haml +++ b/app/views/sites/_form.haml @@ -86,14 +86,20 @@ %hr/ - .form-group - %h2= t('.deploys.title') - %p.lead= t('.help.deploys') - + - unless site.persisted? = f.fields_for :deploys do |deploy| - = render "deploys/#{deploy.object.type.underscore}", - deploy: deploy, site: site - %hr/ + - next unless deploy.object.kind_of? DeployLocal + = deploy.hidden_field :type + + - else + .form-group + %h2= t('.deploys.title') + %p.lead= t('.help.deploys') + + = f.fields_for :deploys do |deploy| + = render "deploys/#{deploy.object.type.underscore}", + deploy: deploy, site: site + %hr/ .form-group = f.submit submit, class: 'btn btn-lg btn-block' diff --git a/app/views/sites/edit.haml b/app/views/sites/edit.haml index 7edbb057..cc5977cf 100644 --- a/app/views/sites/edit.haml +++ b/app/views/sites/edit.haml @@ -1,8 +1,8 @@ = render 'layouts/breadcrumb', crumbs: [link_to(t('sites.index.title'), sites_path), t('.title', site: @site.name)] -.row - .col +.row.justify-content-center + .col-md-8 %h1= t('.title', site: @site.name) = render 'form', site: @site, submit: t('.submit') diff --git a/app/views/sites/new.haml b/app/views/sites/new.haml index f4efbea0..fa724421 100644 --- a/app/views/sites/new.haml +++ b/app/views/sites/new.haml @@ -1,8 +1,9 @@ = render 'layouts/breadcrumb', crumbs: [link_to(t('sites.index.title'), sites_path), t('.title')] -.row - .col +.row.justify-content-center + .col-md-8 %h1= t('.title') + %p.lead= t('.help') = render 'form', site: @site, submit: t('.submit') diff --git a/config/locales/es.yml b/config/locales/es.yml index fd15d75b..163f3f33 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -284,6 +284,7 @@ es: new: title: 'Crear un sitio' submit: 'Crear sitio' + help: 'Podrás editar estas opciones más adelante en la configuración del sitio.' edit: title: 'Editar %{site}' submit: 'Guardar cambios' From 53bb1ccb32a890c3a129ca3ca86986d8184bcb3d Mon Sep 17 00:00:00 2001 From: f Date: Tue, 11 Feb 2020 14:43:02 -0300 Subject: [PATCH 60/66] =?UTF-8?q?acomodar=20el=20bot=C3=B3n=20de=20publica?= =?UTF-8?q?ci=C3=B3n=20de=20cambios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/sites/_build.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/sites/_build.haml b/app/views/sites/_build.haml index d85e83cf..ca68765c 100644 --- a/app/views/sites/_build.haml +++ b/app/views/sites/_build.haml @@ -7,7 +7,7 @@ link: nil - else = form_tag site_enqueue_path(site), - method: :post, class: 'form-inline' do + method: :post, class: 'form-inline inline' do = button_tag type: 'submit', class: 'btn no-border-radius', title: t('help.sites.enqueue'), From 7623ce6297094d6b5521a3f41c8ff51af7458185 Mon Sep 17 00:00:00 2001 From: f Date: Tue, 11 Feb 2020 14:45:00 -0300 Subject: [PATCH 61/66] margen entre botones #80 --- app/assets/stylesheets/application.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 5894e684..f6db8fef 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -185,6 +185,7 @@ svg { color: var(--background); border: none; border-radius: 0; + margin-right: 0.3rem; &:hover { color: var(--background); From 89b4cce04cfe0ce546a085d2417023c909f3650e Mon Sep 17 00:00:00 2001 From: f Date: Fri, 14 Feb 2020 12:11:55 -0300 Subject: [PATCH 62/66] no fallar si el post no se encuentra --- app/services/post_service.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/services/post_service.rb b/app/services/post_service.rb index 1745290f..85a40ee8 100644 --- a/app/services/post_service.rb +++ b/app/services/post_service.rb @@ -53,6 +53,7 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do post = posts.find(uuid, uuid: true) order = reorder[uuid].to_i + next unless post next unless post.attributes.include? :order next if post.order.value == order From b8ae047db235a80fe60c4b628a3411468ba85e08 Mon Sep 17 00:00:00 2001 From: f Date: Sun, 16 Feb 2020 19:51:43 -0300 Subject: [PATCH 63/66] metadata geo --- app/models/metadata_geo.rb | 23 +++++++++++++++++++++++ app/views/posts/attribute_ro/_geo.haml | 9 +++++++++ app/views/posts/attributes/_geo.haml | 19 +++++++++++++++++++ config/locales/en.yml | 3 +++ config/locales/es.yml | 3 +++ 5 files changed, 57 insertions(+) create mode 100644 app/models/metadata_geo.rb create mode 100644 app/views/posts/attribute_ro/_geo.haml create mode 100644 app/views/posts/attributes/_geo.haml diff --git a/app/models/metadata_geo.rb b/app/models/metadata_geo.rb new file mode 100644 index 00000000..3b7c31bd --- /dev/null +++ b/app/models/metadata_geo.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +# Define un campo de coordenadas geográficas +class MetadataGeo < MetadataTemplate + def default_value + { 'lat' => nil, 'lng' => nil } + end + + def empty? + value == default_value + end + + def to_param + { name => %i[lat lng] } + end + + def save + self[:value] = { + 'lat' => self[:value]['lat'].to_f, + 'lng' => self[:value]['lng'].to_f + } + end +end diff --git a/app/views/posts/attribute_ro/_geo.haml b/app/views/posts/attribute_ro/_geo.haml new file mode 100644 index 00000000..feeacf25 --- /dev/null +++ b/app/views/posts/attribute_ro/_geo.haml @@ -0,0 +1,9 @@ +- lat = metadata.value['lat'] +- lng = metadata.value['lng'] +%tr{ id: attribute } + %th= post_label_t(attribute, post: post) + %td + = link_to t('posts.attributes.geo.uri'), "geo:#{lat},#{lng}" + %br/ + = link_to t('posts.attributes.geo.osm'), + "https://www.openstreetmap.org/?mlat=#{lat}&mlon=#{lng}#map=9/#{lat}/#{lng}" diff --git a/app/views/posts/attributes/_geo.haml b/app/views/posts/attributes/_geo.haml new file mode 100644 index 00000000..839393d8 --- /dev/null +++ b/app/views/posts/attributes/_geo.haml @@ -0,0 +1,19 @@ +.row + .col + .form-group + = label_tag "post_#{attribute}_lat", + post_label_t(attribute, :lat, post: post) + = text_field(*field_name_for('post', attribute, :lat), + value: metadata.value['lat'], + **field_options(attribute, metadata)) + = render 'posts/attribute_feedback', + post: post, attribute: [attribute, :lat], metadata: metadata + .col + .form-group + = label_tag "post_#{attribute}_lng", + post_label_t(attribute, :lng, post: post) + = text_field(*field_name_for('post', attribute, :lng), + value: metadata.value['lng'], + **field_options(attribute, metadata)) + = render 'posts/attribute_feedback', + post: post, attribute: [attribute, :lat], metadata: metadata diff --git a/config/locales/en.yml b/config/locales/en.yml index 1a452b5a..a6a63709 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -365,6 +365,9 @@ en: feedback: 'This field cannot be empty!' uuid: label: 'Unique identifier' + geo: + uri: 'Open in app' + osm: 'Open in web map' reorder: 'Reorder posts' sort: by: 'Sort by' diff --git a/config/locales/es.yml b/config/locales/es.yml index 163f3f33..832d8fa3 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -373,6 +373,9 @@ es: feedback: '¡Este campo no puede estar vacío!' uuid: label: 'Identificador único' + geo: + uri: 'Abrir en aplicación' + osm: 'Abrir en mapa web' reorder: 'Reordenar artículos' sort: by: 'Ordenar por' From 6e17a9271134b0778168e18b5f2ac9169b6f8d3f Mon Sep 17 00:00:00 2001 From: f Date: Wed, 19 Feb 2020 18:48:22 -0300 Subject: [PATCH 64/66] arreglos varios --- app/assets/stylesheets/application.scss | 3 ++- app/views/sites/_form.haml | 12 ++++++------ config/locales/en.yml | 2 +- config/locales/es.yml | 2 +- db/seeds/designs.yml | 12 ++++++------ 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index f6db8fef..90e5290a 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -160,7 +160,7 @@ ol.breadcrumb { &[type=text] { @extend .form-control; display: inline-block; - width: calc(100% - 90px); + width: calc(100% - 93px); } &[type=checkbox] { @@ -186,6 +186,7 @@ svg { border: none; border-radius: 0; margin-right: 0.3rem; + margin-bottom: 0.3rem; &:hover { color: var(--background); diff --git a/app/views/sites/_form.haml b/app/views/sites/_form.haml index 18814dca..30e72bcf 100644 --- a/app/views/sites/_form.haml +++ b/app/views/sites/_form.haml @@ -86,12 +86,7 @@ %hr/ - - unless site.persisted? - = f.fields_for :deploys do |deploy| - - next unless deploy.object.kind_of? DeployLocal - = deploy.hidden_field :type - - - else + - if site.persisted? .form-group %h2= t('.deploys.title') %p.lead= t('.help.deploys') @@ -100,6 +95,11 @@ = render "deploys/#{deploy.object.type.underscore}", deploy: deploy, site: site %hr/ + - else + = f.fields_for :deploys do |deploy| + - next unless deploy.object.is_a? DeployLocal + + = deploy.hidden_field :type .form-group = f.submit submit, class: 'btn btn-lg btn-block' diff --git a/config/locales/en.yml b/config/locales/en.yml index a6a63709..cacb9238 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -148,7 +148,6 @@ en: anexo: 'Appendix' simple: 'Simple' sites: - static_file_migration: 'File migration' index: 'This is the list of sites you can edit.' edit_translations: "You can edit texts from your site other than posts', and you can also translate them to other languages." @@ -247,6 +246,7 @@ en: average: 'Average building time' maximum: 'Maximum building time' sites: + static_file_migration: 'File migration' index: title: 'Sites' pull: 'Upgrade' diff --git a/config/locales/es.yml b/config/locales/es.yml index 832d8fa3..de3ad2aa 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -149,7 +149,6 @@ es: anexo: 'Anexo' simple: 'Simple' sites: - static_file_migration: 'Migración de archivos' index: 'Este es el listado de sitios que puedes editar.' edit_translations: 'Puedes editar los textos que salen en tu sitio que no corresponden a artículos aquí, además de traducirlos a @@ -252,6 +251,7 @@ es: average: 'Tiempo promedio de generación' maximum: 'Tiempo máximo de generación' sites: + static_file_migration: 'Migración de archivos' index: title: 'Sitios' pull: 'Actualizar' diff --git a/db/seeds/designs.yml b/db/seeds/designs.yml index 873ceb4c..328265fe 100644 --- a/db/seeds/designs.yml +++ b/db/seeds/designs.yml @@ -4,15 +4,15 @@ gem: 'sutty-theme-none' url: 'https://sutty.nl' disabled: true - description_en: "Upload your own theme. [This feature is in development, help us!](https://sutty.neocities.org/en/#contact)" - description_es: "Subir tu propio diseño. [Esta posibilidad está en desarrollo, ¡ayudanos!](https://sutty.neocities.org/es/#contacto)" + description_en: "Upload your own theme. [This feature is in development, help us!](https://sutty.nl/en/#contact)" + description_es: "Subir tu propio diseño. [Esta posibilidad está en desarrollo, ¡ayudanos!](https://sutty.nl/#contacto)" - name_en: 'I want you to create a site for me' name_es: 'Quiero que desarrollen mi sitio' gem: 'sutty-theme-custom' url: 'https://sutty.nl' disabled: true - description_en: "If you want us to create your site, you're welcome to [contact us!](https://sutty.neocities.org/en/#contact) :)" - description_es: "Si querés que desarrollemos tu sitio, [escribinos](https://sutty.neocities.org/es/#contacto) :)" + description_en: "If you want us to create your site, you're welcome to [contact us!](https://sutty.nl/en/#contact) :)" + description_es: "Si querés que desarrollemos tu sitio, [escribinos](https://sutty.nl/#contacto) :)" - name_en: 'Minima' name_es: 'Mínima' gem: 'minima' @@ -25,5 +25,5 @@ gem: 'sutty-theme-own' url: 'https://jekyllthemes.org' disabled: true - description_en: "We're working to add more themes for you to use. [Contact us!](https://sutty.neocities.org/en/#contact)" - description_es: "Estamos trabajando para que puedas tener más diseños. [¡Escribinos!](https://sutty.neocities.org/es/#contacto)" + description_en: "We're working to add more themes for you to use. [Contact us!](https://sutty.nl/en/#contact)" + description_es: "Estamos trabajando para que puedas tener más diseños. [¡Escribinos!](https://sutty.nl/#contacto)" From 5392f9a942f1d876aa3e60700a3ed4fe2b0b9c82 Mon Sep 17 00:00:00 2001 From: f Date: Wed, 19 Feb 2020 19:29:06 -0300 Subject: [PATCH 65/66] permitir dominios alternativos #122 --- app/controllers/api/v1/sites_controller.rb | 3 ++- app/models/deploy_alternative_domain.rb | 23 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 app/models/deploy_alternative_domain.rb diff --git a/app/controllers/api/v1/sites_controller.rb b/app/controllers/api/v1/sites_controller.rb index 18550feb..fcf694e0 100644 --- a/app/controllers/api/v1/sites_controller.rb +++ b/app/controllers/api/v1/sites_controller.rb @@ -8,7 +8,8 @@ module Api password: ENV['HTTP_BASIC_PASSWORD'] def index - render json: Site.all.order(:name).pluck(:name) + render json: Site.all.order(:name).pluck(:name) + + DeployAlternativeDomain.all.map(&:hostname) end # Detecta si se puede generar un certificado diff --git a/app/models/deploy_alternative_domain.rb b/app/models/deploy_alternative_domain.rb new file mode 100644 index 00000000..e4960e65 --- /dev/null +++ b/app/models/deploy_alternative_domain.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +# Soportar dominios alternativos +class DeployAlternativeDomain < Deploy + store :values, accessors: %i[hostname], coder: JSON + + # Generar un link simbólico del sitio principal al alternativo + def deploy + File.symlink?(destination) || + File.symlink(site.hostname, destination).zero? + end + + # No hay límite para los dominios alternativos + def limit; end + + def size + File.size destination + end + + def destination + File.join(Rails.root, '_deploy', hostname.gsub(/\.\z/, '')) + end +end From a43080a368e2b6bdb11e2e1d2d1efc7d8d69e0cf Mon Sep 17 00:00:00 2001 From: f Date: Thu, 20 Feb 2020 13:02:34 -0300 Subject: [PATCH 66/66] descargar el archivo subido --- app/views/posts/attribute_ro/_file.haml | 3 ++- config/locales/en.yml | 3 +++ config/locales/es.yml | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/views/posts/attribute_ro/_file.haml b/app/views/posts/attribute_ro/_file.haml index a941839e..7bc7b154 100644 --- a/app/views/posts/attribute_ro/_file.haml +++ b/app/views/posts/attribute_ro/_file.haml @@ -2,4 +2,5 @@ %th= post_label_t(attribute, :path, post: post) %td - if metadata.value['path'].present? - = link_to metadata.value['description'], url_for(metadata.static_file) + = link_to t('.download'), url_for(metadata.static_file) + %p= metadata.value['description'] diff --git a/config/locales/en.yml b/config/locales/en.yml index cacb9238..18b7a441 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -347,6 +347,9 @@ en: en: 'English' ar: 'Arabic' posts: + attribute_ro: + file: + download: Download file show: front_matter: Post metadata submit: diff --git a/config/locales/es.yml b/config/locales/es.yml index de3ad2aa..f988972f 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -355,6 +355,9 @@ es: en: 'inglés' ar: 'árabe' posts: + attribute_ro: + file: + download: Descargar archivo show: front_matter: Metadatos del artículo submit: