From a358a20061f6b956f0a6094954180c008170d2fe Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Sat, 10 Aug 2019 00:08:24 -0400 Subject: [PATCH 01/32] Send an email when the packet is generated --- config.env.py | 7 +++++++ packet/commands.py | 3 +++ packet/mail.py | 19 +++++++++++++++++++ packet/templates/extend/email.html | 13 +++++++++++++ packet/templates/mail/packet_start.html | 15 +++++++++++++++ packet/templates/mail/packet_start.txt | 14 ++++++++++++++ requirements.txt | 1 + 7 files changed, 72 insertions(+) create mode 100644 packet/mail.py create mode 100644 packet/templates/extend/email.html create mode 100644 packet/templates/mail/packet_start.html create mode 100644 packet/templates/mail/packet_start.txt diff --git a/config.env.py b/config.env.py index 02caccb1..0bd46f7e 100644 --- a/config.env.py +++ b/config.env.py @@ -31,5 +31,12 @@ LDAP_BIND_DN = environ.get("PACKET_LDAP_BIND_DN", None) LDAP_BIND_PASS = environ.get("PACKET_LDAP_BIND_PASS", None) +# Mail Config +MAIL_PROD = environ.get("PACKET_MAIL_PROD", False) +MAIL_SERVER = environ.get("PACKET_MAIL_SERVER", "thoth.csh.rit.edu") +MAIL_USERNAME = environ.get("PACKET_MAIL_USERNAME", "packet@csh.rit.edu") +MAIL_PASSWORD = environ.get("PACKET_MAIL_PASSWORD", None) +MAIL_USE_TLS = environ.get("PACKET_MAIL_PASSWORD", True) + # Slack URL for pushing to #general SLACK_WEBHOOK_URL = environ.get("PACKET_SLACK_URL", None) diff --git a/packet/commands.py b/packet/commands.py index 9a310d98..d1b29e49 100644 --- a/packet/commands.py +++ b/packet/commands.py @@ -7,6 +7,7 @@ import csv import click +from packet.mail import send_mail from . import app, db from .models import Freshman, Packet, FreshSignature, UpperSignature, MiscSignature from .ldap import ldap_get_eboard_role, ldap_get_active_rtps, ldap_get_3das, ldap_get_webmasters, \ @@ -130,6 +131,8 @@ def create_packets(freshmen_csv): for freshman in Freshman.query.filter(Freshman.rit_username.in_(freshmen_in_csv)).all(): packet = Packet(freshman=freshman, start=start, end=end) db.session.add(packet) + print("Sending Email...") + send_mail(packet) for member in all_upper: sig = UpperSignature(packet=packet, member=member.uid) diff --git a/packet/mail.py b/packet/mail.py new file mode 100644 index 00000000..8f6d141f --- /dev/null +++ b/packet/mail.py @@ -0,0 +1,19 @@ +from flask import render_template +from flask_mail import Mail, Message + +from packet import app + +mail = Mail(app) + + +def send_mail(packet): + if app.config['MAIL_PROD']: + recipients = ["<" + packet.freshman.rit_username + "@rit.edu>"] + msg = Message(subject="CSH Packet Starts " + packet.start.strftime('%D'), + sender=app.config.get("MAIL_USERNAME"), + recipients=recipients) + + template = 'mail/packet_start' + msg.body = render_template(template + '.txt', packet=packet) + msg.html = render_template(template + '.html', packet=packet) + mail.send(msg) diff --git a/packet/templates/extend/email.html b/packet/templates/extend/email.html new file mode 100644 index 00000000..ce3c67a5 --- /dev/null +++ b/packet/templates/extend/email.html @@ -0,0 +1,13 @@ + + + +{% block head %} + +{% endblock %} + + +{% block body %} +{% endblock %} + + + \ No newline at end of file diff --git a/packet/templates/mail/packet_start.html b/packet/templates/mail/packet_start.html new file mode 100644 index 00000000..de20ed55 --- /dev/null +++ b/packet/templates/mail/packet_start.html @@ -0,0 +1,15 @@ +{% extends "extend/email.html" %} + +{% block body %} +
+

Hello {{ packet.freshman.name }},

+

Welcome to Computer Science House!

+

Soon you'll starting the introductory process for CSH, and the first part of that is Packet.

+

Your packet will start on {{ packet.start.strftime('%D') }} at {{ packet.start.strftime('%I:%M %p') }}

+

You can view your packet at freshmen-packet.csh.rit.edu with + the credentials you should have been sent.

+

If you don't know your credentials, reach out to an RTP

+

If you have any questions about Packet or the introductory process, email evals@csh.rit.edu

+

If you have any questions about login credentials or any technical issues, email rtp@csh.rit.edu

+
+{% endblock %} diff --git a/packet/templates/mail/packet_start.txt b/packet/templates/mail/packet_start.txt new file mode 100644 index 00000000..1ece8d54 --- /dev/null +++ b/packet/templates/mail/packet_start.txt @@ -0,0 +1,14 @@ +Hello {{ packet.freshman.name }}, + +Welcome to Computer Science House! + +Soon you'll starting the introductory process for CSH, and the first part of that is Packet. + +Your packet will start on {{ packet.start.strftime('%D') }} at {{ packet.start.strftime('%I:%M %p') }} + +You can view your packet at freshmen-packet.csh.rit.edu with the credentials you should have been sent. +If you don't know your credentials, reach out to an RTP + +If you have any questions about Packet or the introductory process, email evals@csh.rit.edu + +If you have any questions about login credentials or any technical issues, email rtp@csh.rit.edu diff --git a/requirements.txt b/requirements.txt index 8bd1149f..edbceb52 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ Flask~=1.1.0 Flask-pyoidc~=2.2.0 +Flask-Mail flask_sqlalchemy==2.3.2 psycopg2-binary==2.8.3 Flask-Migrate==2.2.1 From 4a7d8cf4034f6abc0ee62787af1cc731fcefb2cc Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Sat, 10 Aug 2019 00:16:37 -0400 Subject: [PATCH 02/32] Fixing package versions --- requirements.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/requirements.txt b/requirements.txt index edbceb52..a8e325fd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,9 @@ Flask~=1.1.0 Flask-pyoidc~=2.2.0 -Flask-Mail -flask_sqlalchemy==2.3.2 -psycopg2-binary==2.8.3 -Flask-Migrate==2.2.1 -pylint==2.3.1 -gunicorn==19.7.1 -csh_ldap>=2.1.0 +Flask-Mail~=0.9.1 +flask_sqlalchemy~=2.3.2 +psycopg2-binary~=2.8.3 +Flask-Migrate~=2.2.1 +pylint~=2.3.1 +gunicorn~=19.7.1 +csh_ldap~=2.1.0 From 0076d388a2b32627c7da9c1555d3c6ccf45716f8 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Sat, 10 Aug 2019 19:06:13 -0400 Subject: [PATCH 03/32] Fixing email formatting and variables --- config.env.py | 2 +- packet/commands.py | 3 +-- packet/mail.py | 2 +- packet/templates/extend/email.html | 9 +++++++-- packet/templates/mail/packet_start.html | 2 +- packet/templates/mail/packet_start.txt | 2 +- 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/config.env.py b/config.env.py index 0bd46f7e..09c89e3d 100644 --- a/config.env.py +++ b/config.env.py @@ -36,7 +36,7 @@ MAIL_SERVER = environ.get("PACKET_MAIL_SERVER", "thoth.csh.rit.edu") MAIL_USERNAME = environ.get("PACKET_MAIL_USERNAME", "packet@csh.rit.edu") MAIL_PASSWORD = environ.get("PACKET_MAIL_PASSWORD", None) -MAIL_USE_TLS = environ.get("PACKET_MAIL_PASSWORD", True) +MAIL_USE_TLS = environ.get("PACKET_MAIL_TLS", True) # Slack URL for pushing to #general SLACK_WEBHOOK_URL = environ.get("PACKET_SLACK_URL", None) diff --git a/packet/commands.py b/packet/commands.py index d1b29e49..10d9bb98 100644 --- a/packet/commands.py +++ b/packet/commands.py @@ -127,11 +127,10 @@ def create_packets(freshmen_csv): # Create the new packets and the signatures for each freshman in the given CSV freshmen_in_csv = parse_csv(freshmen_csv) - print("Creating DB entries...") + print("Creating DB entries and sending emails...") for freshman in Freshman.query.filter(Freshman.rit_username.in_(freshmen_in_csv)).all(): packet = Packet(freshman=freshman, start=start, end=end) db.session.add(packet) - print("Sending Email...") send_mail(packet) for member in all_upper: diff --git a/packet/mail.py b/packet/mail.py index 8f6d141f..077c6793 100644 --- a/packet/mail.py +++ b/packet/mail.py @@ -9,7 +9,7 @@ def send_mail(packet): if app.config['MAIL_PROD']: recipients = ["<" + packet.freshman.rit_username + "@rit.edu>"] - msg = Message(subject="CSH Packet Starts " + packet.start.strftime('%D'), + msg = Message(subject="CSH Packet Starts " + packet.start.strftime('%A, %B %-d'), sender=app.config.get("MAIL_USERNAME"), recipients=recipients) diff --git a/packet/templates/extend/email.html b/packet/templates/extend/email.html index ce3c67a5..d9bc5b41 100644 --- a/packet/templates/extend/email.html +++ b/packet/templates/extend/email.html @@ -2,7 +2,12 @@ {% block head %} - + + CSH Packet + + {% endblock %} @@ -10,4 +15,4 @@ {% endblock %} - \ No newline at end of file + diff --git a/packet/templates/mail/packet_start.html b/packet/templates/mail/packet_start.html index de20ed55..36e2a300 100644 --- a/packet/templates/mail/packet_start.html +++ b/packet/templates/mail/packet_start.html @@ -5,7 +5,7 @@

Hello {{ packet.freshman.name }},

Welcome to Computer Science House!

Soon you'll starting the introductory process for CSH, and the first part of that is Packet.

-

Your packet will start on {{ packet.start.strftime('%D') }} at {{ packet.start.strftime('%I:%M %p') }}

+

Your packet will start on {{ packet.start.strftime('%A, %B %-d') }} at {{ packet.start.strftime('%-I:%M %p') }}

You can view your packet at freshmen-packet.csh.rit.edu with the credentials you should have been sent.

If you don't know your credentials, reach out to an RTP

diff --git a/packet/templates/mail/packet_start.txt b/packet/templates/mail/packet_start.txt index 1ece8d54..012423dc 100644 --- a/packet/templates/mail/packet_start.txt +++ b/packet/templates/mail/packet_start.txt @@ -4,7 +4,7 @@ Welcome to Computer Science House! Soon you'll starting the introductory process for CSH, and the first part of that is Packet. -Your packet will start on {{ packet.start.strftime('%D') }} at {{ packet.start.strftime('%I:%M %p') }} +Your packet will start on {{ packet.start.strftime('%A, %B %-d') }} at {{ packet.start.strftime('%-I:%M %p') }} You can view your packet at freshmen-packet.csh.rit.edu with the credentials you should have been sent. If you don't know your credentials, reach out to an RTP From 2a55a592c72d8a9fb6acfd2922fdb9e943445ae5 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Sat, 10 Aug 2019 19:30:54 -0400 Subject: [PATCH 04/32] Fixing bool parse --- config.env.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config.env.py b/config.env.py index 09c89e3d..e403b052 100644 --- a/config.env.py +++ b/config.env.py @@ -2,7 +2,7 @@ Default configuration settings and environment variable based configuration logic See the readme for more information """ - +from distutils.util import strtobool from os import environ # Flask config @@ -32,11 +32,11 @@ LDAP_BIND_PASS = environ.get("PACKET_LDAP_BIND_PASS", None) # Mail Config -MAIL_PROD = environ.get("PACKET_MAIL_PROD", False) +MAIL_PROD = strtobool(environ.get("PACKET_MAIL_PROD", 'False')) MAIL_SERVER = environ.get("PACKET_MAIL_SERVER", "thoth.csh.rit.edu") MAIL_USERNAME = environ.get("PACKET_MAIL_USERNAME", "packet@csh.rit.edu") MAIL_PASSWORD = environ.get("PACKET_MAIL_PASSWORD", None) -MAIL_USE_TLS = environ.get("PACKET_MAIL_TLS", True) +MAIL_USE_TLS = strtobool(environ.get("PACKET_MAIL_TLS", 'True')) # Slack URL for pushing to #general SLACK_WEBHOOK_URL = environ.get("PACKET_SLACK_URL", None) From 5a7cbdc9b9256d164ab5a6beff585108ee8695b2 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Sat, 10 Aug 2019 20:48:17 -0400 Subject: [PATCH 05/32] Updating Gulp and npm --- .nvmrc | 2 +- Dockerfile | 2 +- gulpfile.js/index.js | 11 +- gulpfile.js/tasks/favicon.js | 132 +-- gulpfile.js/tasks/minify.js | 16 - gulpfile.js/tasks/pylint.js | 8 +- gulpfile.js/tasks/sass.js | 11 - gulpfile.js/tasks/stylesheets.js | 29 + package.json | 12 +- yarn.lock | 1471 ++++++++++++++++++++---------- 10 files changed, 1077 insertions(+), 617 deletions(-) delete mode 100644 gulpfile.js/tasks/minify.js delete mode 100644 gulpfile.js/tasks/sass.js create mode 100644 gulpfile.js/tasks/stylesheets.js diff --git a/.nvmrc b/.nvmrc index 1e8b3149..f599e28b 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -6 +10 diff --git a/Dockerfile b/Dockerfile index 82509db6..d6d22609 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ RUN apt-get -yq update && \ ADD . /opt/packet -RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - && \ +RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && \ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt-get -yq update && \ diff --git a/gulpfile.js/index.js b/gulpfile.js/index.js index c3850adc..2f29346a 100644 --- a/gulpfile.js/index.js +++ b/gulpfile.js/index.js @@ -11,15 +11,12 @@ when you run `gulp`. */ -var requireDir = require('require-dir'); -var gulp = require('gulp'); +const requireDir = require('require-dir'); +const gulp = require('gulp'); // Require all tasks in gulpfile.js/tasks, including subfolders requireDir('./tasks', {recurse: true}); -// CSS -gulp.task('css', ['sass:compile', 'css:minify']); - // Default task -gulp.task('default', ['css']); -gulp.task('production', ['css', 'generate-favicon', 'pylint']); +gulp.task('default', gulp.parallel('css')); +gulp.task('production', gulp.parallel('css', 'generate-favicon', 'pylint')); diff --git a/gulpfile.js/tasks/favicon.js b/gulpfile.js/tasks/favicon.js index 852e13b7..0df01bec 100644 --- a/gulpfile.js/tasks/favicon.js +++ b/gulpfile.js/tasks/favicon.js @@ -1,74 +1,74 @@ -var gulp = require('gulp'); -var realFavicon = require ('gulp-real-favicon'); -var fs = require('fs'); +const gulp = require('gulp'); +const realFavicon = require('gulp-real-favicon'); +const fs = require('fs'); // File where the favicon markups are stored -var FAVICON_DATA_FILE = 'faviconData.json'; +const FAVICON_DATA_FILE = 'faviconData.json'; // Generate the icons. This task takes a few seconds to complete. // You should run it at least once to create the icons. Then, // you should run it whenever RealFaviconGenerator updates its // package (see the check-for-favicon-update task below). -gulp.task('generate-favicon', function(done) { - realFavicon.generateFavicon({ - masterPicture: 'packet/static/assets/logo.svg', - dest: 'packet/static', - iconsPath: '/', - design: { - ios: { - pictureAspect: 'backgroundAndMargin', - backgroundColor: '#ffffff', - margin: '35%', - assets: { - ios6AndPriorIcons: false, - ios7AndLaterIcons: false, - precomposedIcons: false, - declareOnlyDefaultIcon: true - } - }, - desktopBrowser: {}, - windows: { - pictureAspect: 'whiteSilhouette', - backgroundColor: '#b0197e', - onConflict: 'override', - assets: { - windows80Ie10Tile: true, - windows10Ie11EdgeTiles: { - small: true, - medium: true, - big: true, - rectangle: true - } - } - }, - androidChrome: { - pictureAspect: 'noChange', - themeColor: '#b0197e', - manifest: { - display: 'standalone', - orientation: 'notSet', - onConflict: 'override', - declared: true - }, - assets: { - legacyIcon: false, - lowResolutionIcons: false - } - }, - safariPinnedTab: { - pictureAspect: 'silhouette', - themeColor: '#b0197e' - } - }, - settings: { - scalingAlgorithm: 'Mitchell', - errorOnImageTooSmall: false, - readmeFile: false, - htmlCodeFile: false, - usePathAsIs: false - }, - markupFile: FAVICON_DATA_FILE - }, function() { - done(); - }); +gulp.task('generate-favicon', function (done) { + realFavicon.generateFavicon({ + masterPicture: 'packet/static/assets/logo.svg', + dest: 'packet/static', + iconsPath: '/', + design: { + ios: { + pictureAspect: 'backgroundAndMargin', + backgroundColor: '#ffffff', + margin: '35%', + assets: { + ios6AndPriorIcons: false, + ios7AndLaterIcons: false, + precomposedIcons: false, + declareOnlyDefaultIcon: true + } + }, + desktopBrowser: {}, + windows: { + pictureAspect: 'whiteSilhouette', + backgroundColor: '#b0197e', + onConflict: 'override', + assets: { + windows80Ie10Tile: true, + windows10Ie11EdgeTiles: { + small: true, + medium: true, + big: true, + rectangle: true + } + } + }, + androidChrome: { + pictureAspect: 'noChange', + themeColor: '#b0197e', + manifest: { + display: 'standalone', + orientation: 'notSet', + onConflict: 'override', + declared: true + }, + assets: { + legacyIcon: false, + lowResolutionIcons: false + } + }, + safariPinnedTab: { + pictureAspect: 'silhouette', + themeColor: '#b0197e' + } + }, + settings: { + scalingAlgorithm: 'Mitchell', + errorOnImageTooSmall: false, + readmeFile: false, + htmlCodeFile: false, + usePathAsIs: false + }, + markupFile: FAVICON_DATA_FILE + }, function () { + done(); + }); }); diff --git a/gulpfile.js/tasks/minify.js b/gulpfile.js/tasks/minify.js deleted file mode 100644 index 597802d2..00000000 --- a/gulpfile.js/tasks/minify.js +++ /dev/null @@ -1,16 +0,0 @@ -var gulp = require('gulp'); -var cleanCSS = require('gulp-clean-css'); -var rename = require("gulp-rename"); - -// Minify CSS -gulp.task('css:minify', ['sass:compile'], function() { - return gulp.src([ - 'packet/static/css/*.css', - '!packet/static/css/*.min.css' - ]) - .pipe(cleanCSS()) - .pipe(rename({ - suffix: '.min' - })) - .pipe(gulp.dest('packet/static/css')); -}); diff --git a/gulpfile.js/tasks/pylint.js b/gulpfile.js/tasks/pylint.js index fed53564..950e7865 100644 --- a/gulpfile.js/tasks/pylint.js +++ b/gulpfile.js/tasks/pylint.js @@ -1,12 +1,12 @@ -var gulp = require('gulp'); -var exec = require('child_process').exec; +const gulp = require('gulp'); +const exec = require('child_process').exec; -var pylintTask = function (cb) { +let pylintTask = function (cb) { exec('pylint packet', function (err, stdout, stderr) { console.log(stdout); console.log(stderr); cb(err); }); -} +}; gulp.task('pylint', pylintTask); diff --git a/gulpfile.js/tasks/sass.js b/gulpfile.js/tasks/sass.js deleted file mode 100644 index 4ae066b5..00000000 --- a/gulpfile.js/tasks/sass.js +++ /dev/null @@ -1,11 +0,0 @@ -var gulp = require('gulp'); -var sass = require('gulp-sass'); - -// Compile SCSS -gulp.task('sass:compile', function() { - return gulp.src('frontend/scss/**/*.scss') - .pipe(sass.sync({ - outputStyle: 'expanded' - }).on('error', sass.logError)) - .pipe(gulp.dest('packet/static/css')) -}); diff --git a/gulpfile.js/tasks/stylesheets.js b/gulpfile.js/tasks/stylesheets.js new file mode 100644 index 00000000..fe324220 --- /dev/null +++ b/gulpfile.js/tasks/stylesheets.js @@ -0,0 +1,29 @@ +const gulp = require('gulp'); +const sass = require('gulp-sass'); +const cleanCSS = require('gulp-clean-css'); +const rename = require("gulp-rename"); + +// Compile SCSS +gulp.task('sass:compile', function () { + return gulp.src('frontend/scss/**/*.scss') + .pipe(sass.sync({ + outputStyle: 'expanded' + }).on('error', sass.logError)) + .pipe(gulp.dest('packet/static/css')) +}); + +// Minify CSS +gulp.task('css:minify', gulp.series('sass:compile'), function () { + return gulp.src([ + 'packet/static/css/*.css', + '!packet/static/css/*.min.css' + ]) + .pipe(cleanCSS()) + .pipe(rename({ + suffix: '.min' + })) + .pipe(gulp.dest('packet/static/css')); +}); + +// CSS +gulp.task('css', gulp.series('sass:compile', 'css:minify')); diff --git a/package.json b/package.json index 3a6ff113..f48c9712 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,11 @@ "url": "https://github.com/ComputerScienceHouse/packet.git" }, "devDependencies": { - "gulp": "^3.9.1", - "gulp-clean-css": "^3.9.2", - "gulp-real-favicon": "^0.2.2", - "gulp-rename": "^1.2.2", - "gulp-sass": "^3.1.0", - "require-dir": "^1.0.0" + "gulp": "^4.0.2", + "gulp-clean-css": "^4.2.0", + "gulp-real-favicon": "^0.3.2", + "gulp-rename": "^1.4.0", + "gulp-sass": "^4.0.2", + "require-dir": "^1.2.0" } } diff --git a/yarn.lock b/yarn.lock index 19152c62..653e6307 100644 --- a/yarn.lock +++ b/yarn.lock @@ -51,11 +51,33 @@ ansi-styles@^2.2.1: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +append-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= + dependencies: + buffer-equal "^1.0.0" + aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -79,22 +101,31 @@ arr-diff@^4.0.0: resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -arr-flatten@^1.1.0: +arr-filter@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" + integrity sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4= + dependencies: + make-iterator "^1.0.0" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== +arr-map@^2.0.0, arr-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" + integrity sha1-Onc0X/wc814qkYJWAfnljy4kysQ= + dependencies: + make-iterator "^1.0.0" + arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= - -array-each@^1.0.1: +array-each@^1.0.0, array-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= @@ -104,15 +135,34 @@ array-find-index@^1.0.1: resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= +array-initial@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" + integrity sha1-L6dLJnOTccOUe9enrcc74zSz15U= + dependencies: + array-slice "^1.0.0" + is-number "^4.0.0" + +array-last@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" + integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== + dependencies: + is-number "^4.0.0" + array-slice@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== -array-uniq@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= +array-sort@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" + integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== + dependencies: + default-compare "^1.0.0" + get-value "^2.0.6" + kind-of "^5.0.2" array-unique@^0.3.2: version "0.3.2" @@ -136,11 +186,33 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +async-done@^1.2.0, async-done@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2" + integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.2" + process-nextick-args "^2.0.0" + stream-exhaust "^1.0.1" + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + async-foreach@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= +async-settle@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" + integrity sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs= + dependencies: + async-done "^1.2.2" + async@*: version "3.1.0" resolved "https://registry.yarnpkg.com/async/-/async-3.1.0.tgz#42b3b12ae1b74927b5217d8c0016baaf62463772" @@ -174,6 +246,21 @@ axios@^0.18.0: follow-redirects "1.5.10" is-buffer "^2.0.2" +bach@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" + integrity sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA= + dependencies: + arr-filter "^1.1.1" + arr-flatten "^1.0.1" + arr-map "^2.0.0" + array-each "^1.0.0" + array-initial "^1.0.0" + array-last "^1.1.1" + async-done "^1.2.2" + async-settle "^1.0.0" + now-and-later "^2.0.0" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -199,10 +286,10 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -beeper@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" - integrity sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak= +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== binary@~0.3.0: version "0.3.0" @@ -224,7 +311,7 @@ boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -brace-expansion@^1.0.0, brace-expansion@^1.1.7: +brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== @@ -232,7 +319,7 @@ brace-expansion@^1.0.0, brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1: +braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -248,6 +335,16 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +buffer-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" @@ -298,7 +395,7 @@ chainsaw@~0.1.0: dependencies: traverse ">=0.3.0 <0.4" -chalk@^1.0.0, chalk@^1.1.1: +chalk@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -309,6 +406,15 @@ chalk@^1.0.0, chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + cheerio@*: version "0.22.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" @@ -331,6 +437,30 @@ cheerio@*: lodash.reject "^4.4.0" lodash.some "^4.4.0" +chokidar@^2.0.0: + version "2.1.6" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" + integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" + integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -357,26 +487,44 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" -clone-stats@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" - integrity sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE= +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= -clone@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" - integrity sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8= +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= -clone@^1.0.0, clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +cloneable-readable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" + integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +collection-map@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" + integrity sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw= + dependencies: + arr-map "^2.0.2" + for-own "^1.0.0" + make-iterator "^1.0.0" + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -385,6 +533,18 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" @@ -407,16 +567,41 @@ 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.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= +convert-source-map@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +copy-props@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.4.tgz#93bb1cadfafd31da5bb8a9d4b41f471ec3a72dfe" + integrity sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A== + dependencies: + each-props "^1.3.0" + is-plain-object "^2.0.1" + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -452,6 +637,14 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" +d@1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -459,11 +652,6 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -dateformat@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" - integrity sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI= - debug@=3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" @@ -478,6 +666,13 @@ debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" +debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -488,12 +683,29 @@ 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= -defaults@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +default-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" + integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== dependencies: - clone "^1.0.2" + kind-of "^5.0.2" + +default-resolution@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" + integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" @@ -527,16 +739,16 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -deprecated@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" - integrity sha1-+cmvVGSvoeepcUWKi97yqpTVuxk= - detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + dom-serializer@0: version "0.2.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb" @@ -586,12 +798,23 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" -duplexer2@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" - integrity sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds= +duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +each-props@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" + integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== dependencies: - readable-stream "~1.1.9" + is-plain-object "^2.0.1" + object.defaults "^1.1.0" ecc-jsbn@~0.1.1: version "0.1.2" @@ -601,12 +824,12 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -end-of-stream@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" - integrity sha1-jhdyBsPICDfYVjLouTWd/osvbq8= +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== dependencies: - once "~1.3.0" + once "^1.4.0" entities@^1.1.1, entities@~1.1.1: version "1.1.2" @@ -625,7 +848,43 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" -escape-string-regexp@^1.0.2: +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: + version "0.10.50" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.50.tgz#6d0e23a0abdb27018e5ac4fd09b412bc5517a778" + integrity sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + next-tick "^1.0.0" + +es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -694,7 +953,7 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fancy-log@^1.1.0, fancy-log@^1.3.2: +fancy-log@^1.3.2: version "1.3.3" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== @@ -724,11 +983,6 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -find-index@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" - integrity sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ= - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -747,6 +1001,16 @@ findup-sync@^2.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" +findup-sync@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + fined@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" @@ -758,16 +1022,19 @@ fined@^1.0.1: object.pick "^1.2.0" parse-filepath "^1.0.1" -first-chunk-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" - integrity sha1-Wb+1DNkF9g18OUzT2ayqtOatk04= - flagged-respawn@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== +flush-write-stream@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + follow-redirects@1.5.10: version "1.5.10" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" @@ -808,11 +1075,34 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fs-minipass@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== + dependencies: + minipass "^2.2.1" + +fs-mkdirp-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= + dependencies: + graceful-fs "^4.1.11" + through2 "^2.0.3" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.12.0" + fstream@^1.0.0, fstream@^1.0.12, fstream@^1.0.2, fstream@~1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" @@ -823,6 +1113,11 @@ fstream@^1.0.0, fstream@^1.0.12, fstream@^1.0.2, fstream@~1.0.12: mkdirp ">=0.5 0" rimraf "2" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -837,13 +1132,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -gaze@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" - integrity sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8= - dependencies: - globule "~0.1.0" - gaze@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" @@ -873,43 +1161,43 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-stream@^3.1.5: - version "3.1.18" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" - integrity sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs= - dependencies: - glob "^4.3.1" - glob2base "^0.0.12" - minimatch "^2.0.1" - ordered-read-streams "^0.1.0" - through2 "^0.6.1" - unique-stream "^1.0.0" - -glob-watcher@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" - integrity sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs= - dependencies: - gaze "^0.5.1" - -glob2base@^0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" - integrity sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY= +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: - find-index "^0.1.1" + is-glob "^3.1.0" + path-dirname "^1.0.0" -glob@^4.3.1: - version "4.5.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" - integrity sha1-xstz0yJsHv7wTePFbQEvAzd+4V8= +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "^2.0.1" - once "^1.3.0" + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + +glob-watcher@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.3.tgz#88a8abf1c4d131eb93928994bc4a593c2e5dd626" + integrity sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg== + dependencies: + anymatch "^2.0.0" + async-done "^1.2.0" + chokidar "^2.0.0" + is-negated-glob "^1.0.0" + just-debounce "^1.0.0" + object.defaults "^1.1.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -921,15 +1209,6 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@~3.1.21: - version "3.1.21" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" - integrity sha1-0p4KBV3qUTj00H7UDomC6DwgZs0= - dependencies: - graceful-fs "~1.2.0" - inherits "1" - minimatch "~0.2.11" - global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -959,15 +1238,6 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" -globule@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" - integrity sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU= - dependencies: - glob "~3.1.21" - lodash "~1.0.1" - minimatch "~0.2.11" - glogg@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" @@ -975,33 +1245,45 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" -graceful-fs@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - integrity sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg= - dependencies: - natives "^1.1.0" - -graceful-fs@^4.1.2: +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.2.1" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== -graceful-fs@~1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" - integrity sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q= - -gulp-clean-css@^3.9.2: - version "3.10.0" - resolved "https://registry.yarnpkg.com/gulp-clean-css/-/gulp-clean-css-3.10.0.tgz#bccd4605eff104bfa4980014cc4b3c24c571736d" - integrity sha512-7Isf9Y690o/Q5MVjEylH1H7L8WeZ89woW7DnhD5unTintOdZb67KdOayRgp9trUFo+f9UyJtuatV42e/+kghPg== +gulp-clean-css@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/gulp-clean-css/-/gulp-clean-css-4.2.0.tgz#915ec258dc6d3e6a50043f610066d5c2eac4f54e" + integrity sha512-r4zQsSOAK2UYUL/ipkAVCTRg/2CLZ2A+oPVORopBximRksJ6qy3EX1KGrIWT4ZrHxz3Hlobb1yyJtqiut7DNjA== dependencies: clean-css "4.2.1" plugin-error "1.0.1" - through2 "2.0.3" + through2 "3.0.1" vinyl-sourcemaps-apply "0.2.1" +gulp-cli@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.2.0.tgz#5533126eeb7fe415a7e3e84a297d334d5cf70ebc" + integrity sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA== + dependencies: + ansi-colors "^1.0.1" + archy "^1.0.0" + array-sort "^1.0.0" + color-support "^1.1.3" + concat-stream "^1.6.0" + copy-props "^2.0.1" + fancy-log "^1.3.2" + gulplog "^1.0.0" + interpret "^1.1.0" + isobject "^3.0.1" + liftoff "^3.1.0" + matchdep "^2.0.0" + mute-stdout "^1.0.0" + pretty-hrtime "^1.0.0" + replace-homedir "^1.0.0" + semver-greatest-satisfied-range "^1.1.0" + v8flags "^3.0.1" + yargs "^7.1.0" + gulp-real-favicon@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/gulp-real-favicon/-/gulp-real-favicon-0.3.2.tgz#c59cae2cba91df96189716f6f8ce07f430d15a4f" @@ -1013,64 +1295,34 @@ gulp-real-favicon@^0.3.2: rfg-api "^0.5.0" through2 "^2.0.0" -gulp-rename@^1.2.2: +gulp-rename@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.4.0.tgz#de1c718e7c4095ae861f7296ef4f3248648240bd" integrity sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg== -gulp-sass@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/gulp-sass/-/gulp-sass-3.2.1.tgz#2e3688a96fd8be1c0c01340750c191b2e79fab94" - integrity sha512-UATbRpSDsyXCnpYSPBUEvdvtSEzksJs7/oQ0CujIpzKqKrO6vlnYwhX2UTsGrf4rNLwqlSSaM271It0uHYvJ3Q== +gulp-sass@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gulp-sass/-/gulp-sass-4.0.2.tgz#cfb1e3eff2bd9852431c7ce87f43880807d8d505" + integrity sha512-q8psj4+aDrblJMMtRxihNBdovfzGrXJp1l4JU0Sz4b/Mhsi2DPrKFYCGDwjIWRENs04ELVHxdOJQ7Vs98OFohg== dependencies: - gulp-util "^3.0" + chalk "^2.3.0" lodash.clonedeep "^4.3.2" node-sass "^4.8.3" + plugin-error "^1.0.1" + replace-ext "^1.0.0" + strip-ansi "^4.0.0" through2 "^2.0.0" vinyl-sourcemaps-apply "^0.2.0" -gulp-util@^3.0, gulp-util@^3.0.0: - version "3.0.8" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" - integrity sha1-AFTh50RQLifATBh8PsxQXdVLu08= - dependencies: - array-differ "^1.0.0" - array-uniq "^1.0.2" - beeper "^1.0.0" - chalk "^1.0.0" - dateformat "^2.0.0" - fancy-log "^1.1.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - lodash._reescape "^3.0.0" - lodash._reevaluate "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.template "^3.0.0" - minimist "^1.1.0" - multipipe "^0.1.2" - object-assign "^3.0.0" - replace-ext "0.0.1" - through2 "^2.0.0" - vinyl "^0.5.0" - -gulp@^3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" - integrity sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ= +gulp@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" + integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== dependencies: - archy "^1.0.0" - chalk "^1.0.0" - deprecated "^0.0.1" - gulp-util "^3.0.0" - interpret "^1.0.0" - liftoff "^2.1.0" - minimist "^1.1.0" - orchestrator "^0.3.0" - pretty-hrtime "^1.0.0" - semver "^4.1.0" - tildify "^1.0.0" - v8flags "^2.0.2" - vinyl-fs "^0.3.0" + glob-watcher "^5.0.3" + gulp-cli "^2.2.0" + undertaker "^1.2.1" + vinyl-fs "^3.0.0" gulplog@^1.0.0: version "1.0.0" @@ -1099,12 +1351,15 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-gulplog@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" - integrity sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4= - dependencies: - sparkles "^1.0.0" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +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-unicode@^2.0.0: version "2.0.1" @@ -1177,6 +1432,20 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + dependencies: + minimatch "^3.0.4" + in-publish@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" @@ -1197,22 +1466,17 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" - integrity sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js= - inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.4: +ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -interpret@^1.0.0: +interpret@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== @@ -1249,6 +1513,13 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -1303,7 +1574,7 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^2.1.0: +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -1334,6 +1605,18 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -1341,7 +1624,12 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -1367,11 +1655,16 @@ is-unc-path@^1.0.0: dependencies: unc-path-regex "^0.1.2" -is-utf8@^0.2.0: +is-utf8@^0.2.0, is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -1429,6 +1722,11 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -1444,6 +1742,11 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +just-debounce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" + integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -1458,7 +1761,7 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" -kind-of@^5.0.0: +kind-of@^5.0.0, kind-of@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== @@ -1468,6 +1771,21 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== +last-run@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" + integrity sha1-RblpQsF7HHnHchmCWbqUO+v4yls= + dependencies: + default-resolution "^2.0.0" + es6-weak-map "^2.0.1" + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -1475,13 +1793,20 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -liftoff@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" - integrity sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew= +lead@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= + dependencies: + flush-write-stream "^1.0.2" + +liftoff@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" + integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== dependencies: extend "^3.0.0" - findup-sync "^2.0.0" + findup-sync "^3.0.0" fined "^1.0.1" flagged-respawn "^1.0.0" is-plain-object "^2.0.4" @@ -1500,51 +1825,6 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= - -lodash._basetostring@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" - integrity sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U= - -lodash._basevalues@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" - integrity sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc= - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= - -lodash._reescape@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" - integrity sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo= - -lodash._reevaluate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" - integrity sha1-WLx0xAZklTrgsSTYBpltrKQx4u0= - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= - lodash.assignin@^4.0.9: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" @@ -1565,13 +1845,6 @@ lodash.defaults@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= -lodash.escape@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" - integrity sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg= - dependencies: - lodash._root "^3.0.0" - lodash.filter@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" @@ -1587,25 +1860,6 @@ lodash.foreach@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - lodash.map@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" @@ -1631,49 +1885,16 @@ lodash.reject@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= - lodash.some@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= -lodash.template@^3.0.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" - integrity sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8= - dependencies: - lodash._basecopy "^3.0.0" - lodash._basetostring "^3.0.0" - lodash._basevalues "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash.keys "^3.0.0" - lodash.restparam "^3.0.0" - lodash.templatesettings "^3.0.0" - -lodash.templatesettings@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" - integrity sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU= - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash@^4.0.0, lodash@^4.17.11, 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== -lodash@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" - integrity sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE= - loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" @@ -1682,11 +1903,6 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= - lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -1734,6 +1950,16 @@ match-stream@~0.0.2: buffers "~0.1.1" readable-stream "~1.0.0" +matchdep@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" + integrity sha1-xvNINKDY28OzfCfui7yyfHd1WC4= + dependencies: + findup-sync "^2.0.0" + micromatch "^3.0.4" + resolve "^1.4.0" + stack-trace "0.0.10" + meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -1760,7 +1986,7 @@ metaparser@^1.0.7: mkdirp "*" underscore "*" -micromatch@^3.0.4: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -1791,13 +2017,6 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.40.0" -minimatch@^2.0.1: - version "2.0.10" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" - integrity sha1-jQh8OcazjAAbl/ynzm0OHoCvusc= - dependencies: - brace-expansion "^1.0.0" - minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -1805,24 +2024,31 @@ minimatch@^3.0.4, minimatch@~3.0.2: dependencies: brace-expansion "^1.1.7" -minimatch@~0.2.11: - version "0.2.14" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" - integrity sha1-x054BXT2PG+aCQ6Q775u9TpqdWo= - dependencies: - lru-cache "2" - sigmund "~1.0.0" - minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.0, minimist@^1.1.3: +minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minipass@^2.2.1, minipass@^2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" + mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -1843,14 +2069,17 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -multipipe@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" - integrity sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s= - dependencies: - duplexer2 "0.0.2" +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -nan@^2.13.2: +mute-stdout@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" + integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== + +nan@^2.12.1, nan@^2.13.2: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== @@ -1872,10 +2101,19 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -natives@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" - integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA== +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +next-tick@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= node-gyp@^3.8.0: version "3.8.0" @@ -1895,6 +2133,22 @@ node-gyp@^3.8.0: tar "^2.0.0" which "1" +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + node-sass@^4.8.3: version "4.12.0" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" @@ -1937,6 +2191,14 @@ node-unzip-2@^0.2.7: dependencies: abbrev "1" +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -1947,7 +2209,39 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +now-and-later@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" + integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== + dependencies: + once "^1.3.2" + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" + integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -1974,11 +2268,6 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" - integrity sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I= - object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -1993,6 +2282,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -2000,7 +2294,17 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.defaults@^1.1.0: +object.assign@^4.0.4: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.defaults@^1.0.0, object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= @@ -2025,33 +2329,27 @@ object.pick@^1.2.0, object.pick@^1.3.0: dependencies: isobject "^3.0.1" -once@^1.3.0: +object.reduce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" + integrity sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + +once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -once@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA= - dependencies: - wrappy "1" - -orchestrator@^0.3.0: - version "0.3.8" - resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" - integrity sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4= +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= dependencies: - end-of-stream "~0.1.5" - sequencify "~0.0.7" - stream-consume "~0.1.0" - -ordered-read-streams@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" - integrity sha1-/VZamvjrRHO6abbtijQ1LLVS8SY= + readable-stream "^2.0.1" os-homedir@^1.0.0: version "1.0.2" @@ -2070,7 +2368,7 @@ os-tmpdir@^1.0.0: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@0: +osenv@0, osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -2114,6 +2412,11 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -2194,7 +2497,7 @@ pretty-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= -process-nextick-args@~2.0.0: +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== @@ -2219,6 +2522,23 @@ pullstream@~0.4.0: setimmediate ">= 1.0.2 < 2" slice-stream ">= 1.0.0 < 2" +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -2234,6 +2554,16 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -2251,17 +2581,16 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.0, readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= +"readable-stream@2 || 3", readable-stream@^3.1.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" -readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@~2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, 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" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -2274,25 +2603,25 @@ readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.5, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= +readable-stream@~1.0.0, readable-stream@~1.0.31: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + 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" @@ -2316,6 +2645,28 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== + dependencies: + is-buffer "^1.1.5" + is-utf8 "^0.2.1" + +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= + dependencies: + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" + +remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" @@ -2333,10 +2684,19 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -replace-ext@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" - integrity sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= +replace-ext@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + +replace-homedir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" + integrity sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw= + dependencies: + homedir-polyfill "^1.0.1" + is-absolute "^1.0.0" + remove-trailing-separator "^1.1.0" request@^2.87.0, request@^2.88.0: version "2.88.0" @@ -2364,7 +2724,7 @@ request@^2.87.0, request@^2.88.0: tunnel-agent "^0.6.0" uuid "^3.3.2" -require-dir@^1.0.0: +require-dir@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/require-dir/-/require-dir-1.2.0.tgz#0d443b75e96012d3ca749cf19f529a789ae74817" integrity sha512-LY85DTSu+heYgDqq/mK+7zFHWkttVNRXC9NKcKGyuGLdlsfbjEPrIEYdCVrx6hqnJb+xSu3Lzaoo8VnmOhhjNA== @@ -2387,12 +2747,19 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" +resolve-options@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= + dependencies: + value-or-function "^3.0.0" + resolve-url@^0.2.1: version "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, resolve@^1.1.7, resolve@^1.10.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.4.0: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== @@ -2415,14 +2782,14 @@ rfg-api@^0.5.0: mkdirp "^0.5.0" node-unzip-2 "^0.2.7" -rimraf@2: +rimraf@2, rimraf@^2.6.1: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" -safe-buffer@^5.0.1, safe-buffer@^5.1.2: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -2439,7 +2806,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -2454,6 +2821,11 @@ sass-graph@^2.2.4: scss-tokenizer "^0.2.3" yargs "^7.0.0" +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + scss-tokenizer@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" @@ -2462,26 +2834,23 @@ scss-tokenizer@^0.2.3: js-base64 "^2.1.8" source-map "^0.4.2" -"semver@2 || 3 || 4 || 5": +semver-greatest-satisfied-range@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" + integrity sha1-E+jCZYq5aRywzXEJMkAoDTb3els= + dependencies: + sver-compat "^1.5.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -semver@^4.1.0: - version "4.3.6" - resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" - integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto= - semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= -sequencify@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" - integrity sha1-kM/xnQLgcCf9dn9erT57ldHnOAw= - set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -2502,11 +2871,6 @@ set-value@^2.0.0, set-value@^2.0.1: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -sigmund@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= - signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -2635,6 +2999,11 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +stack-trace@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -2650,10 +3019,15 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" -stream-consume@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48" - integrity sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg== +stream-exhaust@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" + integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" @@ -2673,11 +3047,11 @@ string-width@^1.0.1, string-width@^1.0.2: strip-ansi "^4.0.0" string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - safe-buffer "~5.1.0" + safe-buffer "~5.2.0" string_decoder@~0.10.x: version "0.10.31" @@ -2705,14 +3079,6 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-bom@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" - integrity sha1-hbiGLzhEtabV7IRnqTWYFzo295Q= - dependencies: - first-chunk-stream "^1.0.0" - is-utf8 "^0.2.0" - strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -2727,11 +3093,31 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" +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= + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +sver-compat@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" + integrity sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= + dependencies: + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + tar@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" @@ -2741,23 +3127,35 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" -through2@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - integrity sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= +tar@^4: + version "4.4.10" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" + integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.5" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" -through2@^0.6.1: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" + through2 "~2.0.0" + xtend "~4.0.0" -through2@^2.0.0: +through2@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" + integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== + dependencies: + readable-stream "2 || 3" + +through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -2765,18 +3163,19 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -tildify@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" - integrity sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo= - dependencies: - os-homedir "^1.0.0" - time-stamp@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= + dependencies: + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -2802,6 +3201,13 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= + dependencies: + through2 "^2.0.3" + tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -2839,6 +3245,16 @@ 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@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/type/-/type-1.0.3.tgz#16f5d39f27a2d28d86e48f8981859e9d3296c179" + integrity sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg== + +typedarray@^0.0.6: + version "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" @@ -2849,6 +3265,26 @@ underscore@*: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== +undertaker-registry@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" + integrity sha1-XkvaMI5KiirlhPm5pDWaSZglzFA= + +undertaker@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.2.1.tgz#701662ff8ce358715324dfd492a4f036055dfe4b" + integrity sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA== + dependencies: + arr-flatten "^1.0.1" + arr-map "^2.0.0" + bach "^1.0.0" + collection-map "^1.0.0" + es6-weak-map "^2.0.1" + last-run "^1.1.0" + object.defaults "^1.0.0" + object.reduce "^1.0.0" + undertaker-registry "^1.0.0" + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -2859,10 +3295,13 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -unique-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" - integrity sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs= +unique-stream@^2.0.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" + integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== + dependencies: + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" unset-value@^1.0.0: version "1.0.0" @@ -2872,6 +3311,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +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== + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -2889,11 +3333,6 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA= - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -2904,12 +3343,12 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -v8flags@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" - integrity sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ= +v8flags@^3.0.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8" + integrity sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w== dependencies: - user-home "^1.1.1" + homedir-polyfill "^1.0.1" validate-npm-package-license@^3.0.1: version "3.0.4" @@ -2919,6 +3358,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -2928,19 +3372,41 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vinyl-fs@^0.3.0: - version "0.3.14" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" - integrity sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY= +vinyl-fs@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== + dependencies: + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" + graceful-fs "^4.0.0" + is-valid-glob "^1.0.0" + lazystream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" + through2 "^2.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" + +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= dependencies: - defaults "^1.0.0" - glob-stream "^3.1.5" - glob-watcher "^0.0.6" - graceful-fs "^3.0.0" - mkdirp "^0.5.0" - strip-bom "^1.0.0" - through2 "^0.6.1" - vinyl "^0.4.0" + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" vinyl-sourcemaps-apply@0.2.1, vinyl-sourcemaps-apply@^0.2.0: version "0.2.1" @@ -2949,22 +3415,17 @@ vinyl-sourcemaps-apply@0.2.1, vinyl-sourcemaps-apply@^0.2.0: dependencies: source-map "^0.5.1" -vinyl@^0.4.0: - version "0.4.6" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" - integrity sha1-LzVsh6VQolVGHza76ypbqL94SEc= - dependencies: - clone "^0.2.0" - clone-stats "^0.0.1" - -vinyl@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" - integrity sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4= +vinyl@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" + integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" which-module@^1.0.0: version "1.0.0" @@ -2998,7 +3459,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -"xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1: +xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -3013,7 +3474,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== @@ -3025,7 +3486,7 @@ yargs-parser@^5.0.0: dependencies: camelcase "^3.0.0" -yargs@^7.0.0: +yargs@^7.0.0, yargs@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= From 1d6241d0e4da7b5caf7b5ed8362b1f3b8d81d30f Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Sun, 11 Aug 2019 20:15:44 -0400 Subject: [PATCH 06/32] Fixing css minify --- gulpfile.js/tasks/favicon.js | 2 +- gulpfile.js/tasks/pylint.js | 2 +- gulpfile.js/tasks/stylesheets.js | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gulpfile.js/tasks/favicon.js b/gulpfile.js/tasks/favicon.js index 0df01bec..5fb16970 100644 --- a/gulpfile.js/tasks/favicon.js +++ b/gulpfile.js/tasks/favicon.js @@ -9,7 +9,7 @@ const FAVICON_DATA_FILE = 'faviconData.json'; // You should run it at least once to create the icons. Then, // you should run it whenever RealFaviconGenerator updates its // package (see the check-for-favicon-update task below). -gulp.task('generate-favicon', function (done) { +gulp.task('generate-favicon', (done) => { realFavicon.generateFavicon({ masterPicture: 'packet/static/assets/logo.svg', dest: 'packet/static', diff --git a/gulpfile.js/tasks/pylint.js b/gulpfile.js/tasks/pylint.js index 950e7865..6a82ab5d 100644 --- a/gulpfile.js/tasks/pylint.js +++ b/gulpfile.js/tasks/pylint.js @@ -1,7 +1,7 @@ const gulp = require('gulp'); const exec = require('child_process').exec; -let pylintTask = function (cb) { +let pylintTask = (cb) => { exec('pylint packet', function (err, stdout, stderr) { console.log(stdout); console.log(stderr); diff --git a/gulpfile.js/tasks/stylesheets.js b/gulpfile.js/tasks/stylesheets.js index fe324220..251ecc47 100644 --- a/gulpfile.js/tasks/stylesheets.js +++ b/gulpfile.js/tasks/stylesheets.js @@ -4,7 +4,7 @@ const cleanCSS = require('gulp-clean-css'); const rename = require("gulp-rename"); // Compile SCSS -gulp.task('sass:compile', function () { +gulp.task('sass:compile', () => { return gulp.src('frontend/scss/**/*.scss') .pipe(sass.sync({ outputStyle: 'expanded' @@ -13,7 +13,7 @@ gulp.task('sass:compile', function () { }); // Minify CSS -gulp.task('css:minify', gulp.series('sass:compile'), function () { +gulp.task('css:minify', () => { return gulp.src([ 'packet/static/css/*.css', '!packet/static/css/*.min.css' From 99911e649a090bbf3ac80f0792ca2bcc7b1aa8b9 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Sun, 11 Aug 2019 20:55:34 -0400 Subject: [PATCH 07/32] Minifying JS --- .gitignore | 4 +- gulpfile.js/index.js | 4 +- gulpfile.js/tasks/javascript.js | 21 ++++++ package.json | 1 + packet/templates/active_packets.html | 2 +- packet/templates/include/scripts.html | 2 +- yarn.lock | 95 ++++++++++++++++++++++++++- 7 files changed, 120 insertions(+), 9 deletions(-) create mode 100644 gulpfile.js/tasks/javascript.js diff --git a/.gitignore b/.gitignore index 55484af2..2dde3669 100644 --- a/.gitignore +++ b/.gitignore @@ -110,8 +110,8 @@ config.py node_modules # Generated Assets -packet/static/css/packet.css -*.min.css +packet/static/css/**/*.css +packet/static/js/*.min.js packet/static/android-chrome-192x192.png packet/static/android-chrome-512x512.png packet/static/apple-touch-icon.png diff --git a/gulpfile.js/index.js b/gulpfile.js/index.js index 2f29346a..81238034 100644 --- a/gulpfile.js/index.js +++ b/gulpfile.js/index.js @@ -18,5 +18,5 @@ const gulp = require('gulp'); requireDir('./tasks', {recurse: true}); // Default task -gulp.task('default', gulp.parallel('css')); -gulp.task('production', gulp.parallel('css', 'generate-favicon', 'pylint')); +gulp.task('default', gulp.parallel('css', 'js')); +gulp.task('production', gulp.parallel('css', 'js', 'generate-favicon', 'pylint')); diff --git a/gulpfile.js/tasks/javascript.js b/gulpfile.js/tasks/javascript.js new file mode 100644 index 00000000..7841b8fa --- /dev/null +++ b/gulpfile.js/tasks/javascript.js @@ -0,0 +1,21 @@ +const gulp = require('gulp'); +const minify = require('gulp-minify'); + +gulp.task('js:minify', (done) => { + gulp.src([ + 'packet/static/js/*.js', + '!packet/static/js/*.min.js' + ]) + .pipe(minify({ + ext: { + src: '.js', + min: '.min.js' + }, + ignoreFiles: ['.min.js'] + })) + .pipe(gulp.dest('packet/static/js')); + done(); +}); + +// JS +gulp.task('js', gulp.series('js:minify')); diff --git a/package.json b/package.json index f48c9712..6472f440 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "gulp-real-favicon": "^0.3.2", "gulp-rename": "^1.4.0", "gulp-sass": "^4.0.2", + "gulp-minify": "^3.1.0", "require-dir": "^1.2.0" } } diff --git a/packet/templates/active_packets.html b/packet/templates/active_packets.html index 06e6b99a..1856c46f 100644 --- a/packet/templates/active_packets.html +++ b/packet/templates/active_packets.html @@ -108,5 +108,5 @@

Active Packets

{% block scripts %} {{ super() }} - + {% endblock %} diff --git a/packet/templates/include/scripts.html b/packet/templates/include/scripts.html index 8216d7bd..fbc0fd05 100644 --- a/packet/templates/include/scripts.html +++ b/packet/templates/include/scripts.html @@ -9,4 +9,4 @@ - + diff --git a/yarn.lock b/yarn.lock index 653e6307..07cf433e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,6 +29,13 @@ ansi-colors@^1.0.1, ansi-colors@^1.1.0: dependencies: ansi-wrap "^0.1.0" +ansi-cyan@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" + integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= + dependencies: + ansi-wrap "0.1.0" + ansi-gray@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" @@ -36,6 +43,13 @@ ansi-gray@^0.1.1: dependencies: ansi-wrap "0.1.0" +ansi-red@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" + integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= + dependencies: + ansi-wrap "0.1.0" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -96,6 +110,14 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" +arr-diff@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" + integrity sha1-aHwydYFjWI/vfeezb6vklesaOZo= + dependencies: + arr-flatten "^1.0.1" + array-slice "^0.2.3" + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -120,6 +142,11 @@ arr-map@^2.0.0, arr-map@^2.0.2: dependencies: make-iterator "^1.0.0" +arr-union@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" + integrity sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= + arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" @@ -150,6 +177,11 @@ array-last@^1.1.1: dependencies: is-number "^4.0.0" +array-slice@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" + integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU= + array-slice@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" @@ -557,6 +589,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@^2.19.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -909,6 +946,13 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +extend-shallow@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" + integrity sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= + dependencies: + kind-of "^1.1.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -1284,6 +1328,18 @@ gulp-cli@^2.2.0: v8flags "^3.0.1" yargs "^7.1.0" +gulp-minify@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/gulp-minify/-/gulp-minify-3.1.0.tgz#9ed9e09f6bfca64e99cd0427bc8e90d44e736770" + integrity sha512-ixF41aYg+NQikI8hpoHdEclYcQkbGdXQu1CBdHaU7Epg8H6e8d2jWXw1+rBPgYwl/XpKgjHj7NI6gkhoSNSSAg== + dependencies: + ansi-colors "^1.0.1" + minimatch "^3.0.2" + plugin-error "^0.1.2" + terser "^3.7.6" + through2 "^2.0.3" + vinyl "^2.1.0" + gulp-real-favicon@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/gulp-real-favicon/-/gulp-real-favicon-0.3.2.tgz#c59cae2cba91df96189716f6f8ce07f430d15a4f" @@ -1747,6 +1803,11 @@ just-debounce@^1.0.0: resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= +kind-of@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" + integrity sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2017,7 +2078,7 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.40.0" -minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -2487,6 +2548,17 @@ plugin-error@1.0.1, plugin-error@^1.0.1: arr-union "^3.1.0" extend-shallow "^3.0.2" +plugin-error@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" + integrity sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= + dependencies: + ansi-cyan "^0.1.1" + ansi-red "^0.1.1" + arr-diff "^1.0.1" + arr-union "^2.0.1" + extend-shallow "^1.1.2" + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -2924,6 +2996,14 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@~0.5.10: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -2941,7 +3021,7 @@ source-map@^0.5.1, source-map@^0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@~0.6.0: +source-map@^0.6.0, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -3140,6 +3220,15 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" +terser@^3.7.6: + version "3.17.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" + integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== + dependencies: + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" + through2-filter@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" @@ -3415,7 +3504,7 @@ vinyl-sourcemaps-apply@0.2.1, vinyl-sourcemaps-apply@^0.2.0: dependencies: source-map "^0.5.1" -vinyl@^2.0.0: +vinyl@^2.0.0, vinyl@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== From 11401cdc82a638fdd0dbdf0feda492d6680fa51a Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Sun, 11 Aug 2019 21:59:15 -0400 Subject: [PATCH 08/32] Gzip and compressing --- packet/__init__.py | 2 ++ packet/templates/extend/base.html | 1 - packet/templates/extend/email.html | 1 - packet/templates/include/head.html | 1 - requirements.txt | 1 + 5 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packet/__init__.py b/packet/__init__.py index 4e55681a..f68c9184 100644 --- a/packet/__init__.py +++ b/packet/__init__.py @@ -8,12 +8,14 @@ import csh_ldap from flask import Flask +from flask_gzip import Gzip from flask_migrate import Migrate from flask_pyoidc.flask_pyoidc import OIDCAuthentication from flask_pyoidc.provider_configuration import ProviderConfiguration, ClientMetadata from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) +gzip = Gzip(app) # Load default configuration and any environment variable overrides _root_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) diff --git a/packet/templates/extend/base.html b/packet/templates/extend/base.html index 0ffb763e..b2410b6e 100644 --- a/packet/templates/extend/base.html +++ b/packet/templates/extend/base.html @@ -19,7 +19,6 @@ {% endblock %} {% block includes %} - {% endblock %} {% block scripts %} diff --git a/packet/templates/extend/email.html b/packet/templates/extend/email.html index d9bc5b41..20fb7de7 100644 --- a/packet/templates/extend/email.html +++ b/packet/templates/extend/email.html @@ -13,6 +13,5 @@ {% block body %} {% endblock %} - diff --git a/packet/templates/include/head.html b/packet/templates/include/head.html index ab13f959..677e611f 100644 --- a/packet/templates/include/head.html +++ b/packet/templates/include/head.html @@ -1,5 +1,4 @@ - diff --git a/requirements.txt b/requirements.txt index a8e325fd..782ac6e1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ Flask~=1.1.0 Flask-pyoidc~=2.2.0 Flask-Mail~=0.9.1 +Flask-Gzip~=0.2 flask_sqlalchemy~=2.3.2 psycopg2-binary~=2.8.3 Flask-Migrate~=2.2.1 From fc121454987555c02f05fa92d6e9fef435e61e12 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Mon, 12 Aug 2019 22:55:42 -0400 Subject: [PATCH 09/32] Report an issue to Evals --- frontend/scss/components/buttons.scss | 6 ++++ packet/commands.py | 4 +-- packet/mail.py | 18 +++++++++- packet/routes/api.py | 13 +++++++ packet/static/js/report.js | 50 +++++++++++++++++++++++++++ packet/templates/active_packets.html | 6 ++-- packet/templates/include/nav.html | 4 +++ packet/templates/include/scripts.html | 3 ++ packet/templates/mail/report.html | 10 ++++++ packet/templates/mail/report.txt | 7 ++++ 10 files changed, 114 insertions(+), 7 deletions(-) create mode 100644 packet/static/js/report.js create mode 100644 packet/templates/mail/report.html create mode 100644 packet/templates/mail/report.txt diff --git a/frontend/scss/components/buttons.scss b/frontend/scss/components/buttons.scss index 7147bb87..bec420ce 100644 --- a/frontend/scss/components/buttons.scss +++ b/frontend/scss/components/buttons.scss @@ -11,4 +11,10 @@ button { &.signed-button { float: right; } + + @media screen and (min-width: 992px) { + &.report-button { + margin-top: 0.5rem !important; + } + } } diff --git a/packet/commands.py b/packet/commands.py index 10d9bb98..4237c61f 100644 --- a/packet/commands.py +++ b/packet/commands.py @@ -7,7 +7,7 @@ import csv import click -from packet.mail import send_mail +from packet.mail import send_start_packet_mail from . import app, db from .models import Freshman, Packet, FreshSignature, UpperSignature, MiscSignature from .ldap import ldap_get_eboard_role, ldap_get_active_rtps, ldap_get_3das, ldap_get_webmasters, \ @@ -131,7 +131,7 @@ def create_packets(freshmen_csv): for freshman in Freshman.query.filter(Freshman.rit_username.in_(freshmen_in_csv)).all(): packet = Packet(freshman=freshman, start=start, end=end) db.session.add(packet) - send_mail(packet) + send_start_packet_mail(packet) for member in all_upper: sig = UpperSignature(packet=packet, member=member.uid) diff --git a/packet/mail.py b/packet/mail.py index 077c6793..c7a653e1 100644 --- a/packet/mail.py +++ b/packet/mail.py @@ -6,7 +6,7 @@ mail = Mail(app) -def send_mail(packet): +def send_start_packet_mail(packet): if app.config['MAIL_PROD']: recipients = ["<" + packet.freshman.rit_username + "@rit.edu>"] msg = Message(subject="CSH Packet Starts " + packet.start.strftime('%A, %B %-d'), @@ -17,3 +17,19 @@ def send_mail(packet): msg.body = render_template(template + '.txt', packet=packet) msg.html = render_template(template + '.html', packet=packet) mail.send(msg) + + +def send_report_mail(form_results, reporter): + if app.config['MAIL_PROD']: + recipients = [""] + msg = Message(subject="Packet Report", + sender=app.config.get("MAIL_USERNAME"), + recipients=recipients) + + person = form_results['person'] + report = form_results['report'] + + template = 'mail/report' + msg.body = render_template(template + '.txt', person=person, report=report, reporter=reporter) + msg.html = render_template(template + '.html', person=person, report=report, reporter=reporter) + mail.send(msg) diff --git a/packet/routes/api.py b/packet/routes/api.py index 8866855e..abae590c 100644 --- a/packet/routes/api.py +++ b/packet/routes/api.py @@ -1,8 +1,11 @@ """ Shared API endpoints """ +from flask import request from packet import app, db +from packet.context_processors import get_rit_name +from packet.mail import send_report_mail from packet.utils import before_request, packet_auth, notify_slack from packet.models import Packet, MiscSignature @@ -36,6 +39,16 @@ def sign(packet_id, info): app.logger.warn("Failed to add {}'s signature to packet {}".format(info["uid"], packet_id)) return "Error: Signature not valid. Reason: Unknown" + +@app.route("/api/v1/report/", methods=["POST"]) +@packet_auth +@before_request +def report(info): + form_results = request.form + send_report_mail(form_results, get_rit_name(info['uid'])) + return "Success: " + get_rit_name(info['uid']) + " sent a report" + + def commit_sig(packet, was_100): db.session.commit() if not was_100 and packet.is_100(): diff --git a/packet/static/js/report.js b/packet/static/js/report.js new file mode 100644 index 00000000..0bc3a497 --- /dev/null +++ b/packet/static/js/report.js @@ -0,0 +1,50 @@ +const dialogs = Swal.mixin({ + customClass: { + confirmButton: 'btn m-1 btn-primary', + cancelButton: 'btn btn-light', + input: 'form-control' + }, + buttonsStyling: false, + confirmButtonText: 'Next →', + showCancelButton: true, +}); + +$("#freshman-report").click(function () { + dialogs.queue([ + { + title: 'Who are you reporting?', + input: 'text', + text: 'Please give a full name to report' + }, + { + title: 'What happened?', + input: 'textarea', + text: 'What would you like to report?' + } + ]).then((result) => { + if (result.value) { + dialogs.fire({ + title: 'Thank you for reaching out!', + html: + 'Person:
' +
+                    result.value[0] +
+                    '
' + + 'Report:
' +
+                    result.value[1] +
+                    '
', + confirmButtonText: 'All Done', + showCancelButton: false, + preConfirm: () => { + $.ajax({ + url: "/api/v1/report/", + method: "POST", + data: { + "person": result.value[0], + "report": result.value[1] + } + }); + } + }) + } + }) +}); \ No newline at end of file diff --git a/packet/templates/active_packets.html b/packet/templates/active_packets.html index 1856c46f..fd5fdf20 100644 --- a/packet/templates/active_packets.html +++ b/packet/templates/active_packets.html @@ -27,10 +27,8 @@

Active Packets

Name - {% if info.realm == "csh" %} - Signatures - Signatures - {% endif %} + Signatures + Signatures Signatures {% if can_sign %} Sign diff --git a/packet/templates/include/nav.html b/packet/templates/include/nav.html index 3eefda82..fb8f2a62 100644 --- a/packet/templates/include/nav.html +++ b/packet/templates/include/nav.html @@ -18,6 +18,10 @@ + {% else %} + {% endif %} diff --git a/packet/templates/include/scripts.html b/packet/templates/include/scripts.html index fbc0fd05..5cf303f2 100644 --- a/packet/templates/include/scripts.html +++ b/packet/templates/include/scripts.html @@ -10,3 +10,6 @@ +{% if info.realm == "intro" %} + +{% endif %} \ No newline at end of file diff --git a/packet/templates/mail/report.html b/packet/templates/mail/report.html new file mode 100644 index 00000000..dbfedcbc --- /dev/null +++ b/packet/templates/mail/report.html @@ -0,0 +1,10 @@ +{% extends "extend/email.html" %} + +{% block body %} +
+

Hello,

+

{{ reporter }} just made a report against {{ person }}

+

The report reads:

+
{{ report }}
+
+{% endblock %} diff --git a/packet/templates/mail/report.txt b/packet/templates/mail/report.txt new file mode 100644 index 00000000..7a5576c7 --- /dev/null +++ b/packet/templates/mail/report.txt @@ -0,0 +1,7 @@ +Hello, + +{{ reporter }} just made a report against {{ person }} + +The report reads: + +{{ report }} From 3ccb94aff89c151f175142eab29151d77e365253 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Mon, 12 Aug 2019 23:14:40 -0400 Subject: [PATCH 10/32] Fixing newlines --- packet/static/js/report.js | 2 +- packet/templates/extend/base.html | 2 +- packet/templates/include/scripts.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packet/static/js/report.js b/packet/static/js/report.js index 0bc3a497..2154bd84 100644 --- a/packet/static/js/report.js +++ b/packet/static/js/report.js @@ -47,4 +47,4 @@ $("#freshman-report").click(function () { }) } }) -}); \ No newline at end of file +}); diff --git a/packet/templates/extend/base.html b/packet/templates/extend/base.html index b2410b6e..418e93d6 100644 --- a/packet/templates/extend/base.html +++ b/packet/templates/extend/base.html @@ -26,4 +26,4 @@ {% endblock %} - \ No newline at end of file + diff --git a/packet/templates/include/scripts.html b/packet/templates/include/scripts.html index 5cf303f2..af0b7632 100644 --- a/packet/templates/include/scripts.html +++ b/packet/templates/include/scripts.html @@ -12,4 +12,4 @@ {% if info.realm == "intro" %} -{% endif %} \ No newline at end of file +{% endif %} From 23e7c209b6bc8c5a07208abbbf28465ea6930ef0 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Thu, 15 Aug 2019 11:13:22 -0400 Subject: [PATCH 11/32] Push Notifications Phase 1 --- config.env.py | 5 +++++ packet/routes/shared.py | 13 +++++++++++++ packet/static/js/sw.js | 2 ++ packet/static/js/update-sw.js | 2 ++ packet/static/manifest.json | 3 ++- packet/templates/include/head.html | 21 +++++++++++++++++++++ requirements.txt | 1 + 7 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 packet/static/js/sw.js create mode 100644 packet/static/js/update-sw.js diff --git a/config.env.py b/config.env.py index e403b052..0eb3f4e6 100644 --- a/config.env.py +++ b/config.env.py @@ -38,5 +38,10 @@ MAIL_PASSWORD = environ.get("PACKET_MAIL_PASSWORD", None) MAIL_USE_TLS = strtobool(environ.get("PACKET_MAIL_TLS", 'True')) +# OneSignal Config +ONESIGNAL_USER_AUTH_KEY = environ.get("PACKET_ONESIGNAL_USER_AUTH_KEY", None) +ONESIGNAL_APP_AUTH_KEY = environ.get("PACKET_ONESIGNAL_APP_AUTH_KEY", None) +ONESIGNAL_APP_ID = environ.get("PACKET_ONESIGNAL_APP_ID", "6eff123a-0852-4027-804e-723044756f00") + # Slack URL for pushing to #general SLACK_WEBHOOK_URL = environ.get("PACKET_SLACK_URL", None) diff --git a/packet/routes/shared.py b/packet/routes/shared.py index 3d894baa..c4a04c6e 100644 --- a/packet/routes/shared.py +++ b/packet/routes/shared.py @@ -68,3 +68,16 @@ def packets(info=None): open_packets.sort(key=packet_sort_key, reverse=True) return render_template("active_packets.html", info=info, packets=open_packets) + + +@app.route('/sw.js', methods=['GET']) +@app.route('/OneSignalSDKWorker.js', methods=['GET']) +def service_worker(): + return app.send_static_file('js/sw.js') + + +@app.route('/update-sw.js', methods=['GET']) +@app.route('/OneSignalSDKUpdaterWorker.js', methods=['GET']) +def update_service_worker(): + return app.send_static_file('js/update-sw.js') + diff --git a/packet/static/js/sw.js b/packet/static/js/sw.js new file mode 100644 index 00000000..81157226 --- /dev/null +++ b/packet/static/js/sw.js @@ -0,0 +1,2 @@ +importScripts('https://cdn.onesignal.com/sdks/OneSignalSDKWorker.js'); + diff --git a/packet/static/js/update-sw.js b/packet/static/js/update-sw.js new file mode 100644 index 00000000..81157226 --- /dev/null +++ b/packet/static/js/update-sw.js @@ -0,0 +1,2 @@ +importScripts('https://cdn.onesignal.com/sdks/OneSignalSDKWorker.js'); + diff --git a/packet/static/manifest.json b/packet/static/manifest.json index 1425b006..d7916ac9 100644 --- a/packet/static/manifest.json +++ b/packet/static/manifest.json @@ -20,5 +20,6 @@ "sizes": "512x512", "type": "image/png" } - ] + ], + "gcm_sender_id": "482941778795" } diff --git a/packet/templates/include/head.html b/packet/templates/include/head.html index 677e611f..902889a5 100644 --- a/packet/templates/include/head.html +++ b/packet/templates/include/head.html @@ -34,6 +34,27 @@ + + + + + From 6cdf8be435373e4263c6dd980101c6f67dce9d2d Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Thu, 15 Aug 2019 22:14:14 -0400 Subject: [PATCH 16/32] Send 100% notification --- packet/routes/api.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packet/routes/api.py b/packet/routes/api.py index db9fae7c..2e772df0 100644 --- a/packet/routes/api.py +++ b/packet/routes/api.py @@ -8,7 +8,7 @@ from packet.mail import send_report_mail from packet.utils import before_request, packet_auth, notify_slack from packet.models import Packet, MiscSignature, NotificationSubscription -from packet.notifications import packet_signed_notification +from packet.notifications import packet_signed_notification, packet_100_percent_notification @app.route("/api/v1/sign//", methods=["POST"]) @@ -70,6 +70,7 @@ def report(info): def commit_sig(packet, was_100): db.session.commit() if not was_100 and packet.is_100(): + packet_100_percent_notification(packet) notify_slack(packet.freshman.name) return "Success: Signed Packet: " + packet.freshman_username From ebb19c6006597baf03bc8243b49099a81d67f853 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Thu, 15 Aug 2019 22:42:34 -0400 Subject: [PATCH 17/32] Removing prints --- packet/notifications.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packet/notifications.py b/packet/notifications.py index 69436690..51ae12a9 100644 --- a/packet/notifications.py +++ b/packet/notifications.py @@ -25,8 +25,6 @@ def packet_signed_notification(packet, signer): notification.post_body["include_player_ids"] = tokens onesignal_response = onesignal_client.send_notification(notification) - print(onesignal_response.status_code) - print(onesignal_response.json()) if onesignal_response.status_code == 200: app.logger.info("The notification ({}) sent out successfully".format(notification.post_body)) @@ -44,7 +42,5 @@ def packet_100_percent_notification(packet): notification.post_body["include_player_ids"] = tokens onesignal_response = onesignal_client.send_notification(notification) - print(onesignal_response.status_code) - print(onesignal_response.json()) if onesignal_response.status_code == 200: app.logger.info("The notification ({}) sent out successfully".format(notification.post_body)) From 5e0a5ddac3938d30272620bcae8ebf1956f38e64 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Thu, 15 Aug 2019 23:52:14 -0400 Subject: [PATCH 18/32] Fixing filter to map to allow signing --- packet/notifications.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packet/notifications.py b/packet/notifications.py index 51ae12a9..e427c5df 100644 --- a/packet/notifications.py +++ b/packet/notifications.py @@ -16,7 +16,7 @@ def packet_signed_notification(packet, signer): subscriptions = NotificationSubscription.query.filter_by(freshman_username=packet.freshman_username) if subscriptions: - tokens = list(filter(lambda subscription: subscription.token, subscriptions)) + tokens = list(map(lambda subscription: subscription.token, subscriptions)) notification = onesignal.Notification(post_body=post_body) notification.post_body["content"]["en"] = signer + ' signed your packet! Congrats or I\'m Sorry' @@ -32,7 +32,7 @@ def packet_signed_notification(packet, signer): def packet_100_percent_notification(packet): subscriptions = NotificationSubscription.query.all() if subscriptions: - tokens = list(filter(lambda subscription: subscription.token, subscriptions)) + tokens = list(map(lambda subscription: subscription.token, subscriptions)) notification = onesignal.Notification(post_body=post_body) notification.post_body["content"]["en"] = packet.freshman.name + ' got 💯 on packet!' From ec16f11489d12e6cb01f3b52dc31dc5f33135fdc Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Fri, 16 Aug 2019 00:24:21 -0400 Subject: [PATCH 19/32] Fixing Notifications and adding logging --- packet/mail.py | 2 ++ packet/notifications.py | 7 +++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packet/mail.py b/packet/mail.py index c7a653e1..a03e7901 100644 --- a/packet/mail.py +++ b/packet/mail.py @@ -16,6 +16,7 @@ def send_start_packet_mail(packet): template = 'mail/packet_start' msg.body = render_template(template + '.txt', packet=packet) msg.html = render_template(template + '.html', packet=packet) + app.logger.info("Sending mail to " + recipients[0]) mail.send(msg) @@ -32,4 +33,5 @@ def send_report_mail(form_results, reporter): template = 'mail/report' msg.body = render_template(template + '.txt', person=person, report=report, reporter=reporter) msg.html = render_template(template + '.html', person=person, report=report, reporter=reporter) + app.logger.info("Sending mail to " + recipients[0]) mail.send(msg) diff --git a/packet/notifications.py b/packet/notifications.py index e427c5df..50f7e582 100644 --- a/packet/notifications.py +++ b/packet/notifications.py @@ -4,9 +4,8 @@ from packet.models import NotificationSubscription post_body = { - "content": {"en": "Default message"}, + "contents": {"en": "Default message"}, "headings": {"en": "Default Title"}, - "included_segments": ["Active Users", "Inactive Users"], "chrome_web_icon": app.config["PROTOCOL"] + app.config["SERVER_NAME"] + "/static/android-chrome-512x512.png", "chrome_web_badge": app.config["PROTOCOL"] + app.config["SERVER_NAME"] + "/static/android-chrome-512x512.png", "url": app.config["PROTOCOL"] + app.config["SERVER_NAME"] @@ -19,7 +18,7 @@ def packet_signed_notification(packet, signer): tokens = list(map(lambda subscription: subscription.token, subscriptions)) notification = onesignal.Notification(post_body=post_body) - notification.post_body["content"]["en"] = signer + ' signed your packet! Congrats or I\'m Sorry' + notification.post_body["contents"]["en"] = signer + ' signed your packet! Congrats or I\'m Sorry' notification.post_body["headings"]["en"] = 'New Packet Signature!' notification.post_body["chrome_web_icon"] = 'https://profiles.csh.rit.edu/image/' + signer notification.post_body["include_player_ids"] = tokens @@ -35,7 +34,7 @@ def packet_100_percent_notification(packet): tokens = list(map(lambda subscription: subscription.token, subscriptions)) notification = onesignal.Notification(post_body=post_body) - notification.post_body["content"]["en"] = packet.freshman.name + ' got 💯 on packet!' + notification.post_body["contents"]["en"] = packet.freshman.name + ' got 💯 on packet!' notification.post_body["headings"]["en"] = 'New 100% on Packet!' # TODO: Issue #156 notification.post_body["chrome_web_icon"] = 'https://profiles.csh.rit.edu/image/' + packet.freshman_username From 65109f890f41767b21608498eb619135bdb27875 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Sat, 17 Aug 2019 20:37:03 -0400 Subject: [PATCH 20/32] Splitting into two onesignal clients --- config.env.py | 6 ++++-- packet/__init__.py | 11 ++++++++--- packet/notifications.py | 5 +++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/config.env.py b/config.env.py index 786fe437..5bb0d6c4 100644 --- a/config.env.py +++ b/config.env.py @@ -41,8 +41,10 @@ # OneSignal Config ONESIGNAL_USER_AUTH_KEY = environ.get("PACKET_ONESIGNAL_USER_AUTH_KEY", None) -ONESIGNAL_APP_AUTH_KEY = environ.get("PACKET_ONESIGNAL_APP_AUTH_KEY", None) -ONESIGNAL_APP_ID = environ.get("PACKET_ONESIGNAL_APP_ID", "6eff123a-0852-4027-804e-723044756f00") +ONESIGNAL_CSH_APP_AUTH_KEY = environ.get("PACKET_ONESIGNAL_CSH_APP_AUTH_KEY", None) +ONESIGNAL_CSH_APP_ID = environ.get("PACKET_ONESIGNAL_CSH_APP_ID", "6eff123a-0852-4027-804e-723044756f00") +ONESIGNAL_INTRO_APP_AUTH_KEY = environ.get("PACKET_ONESIGNAL_INTRO_APP_AUTH_KEY", None) +ONESIGNAL_INTRO_APP_ID = environ.get("PACKET_ONESIGNAL_INTRO_APP_ID", "6eff123a-0852-4027-804e-723044756f00") # Slack URL for pushing to #general SLACK_WEBHOOK_URL = environ.get("PACKET_SLACK_URL", None) diff --git a/packet/__init__.py b/packet/__init__.py index 93610e24..2fe64b94 100644 --- a/packet/__init__.py +++ b/packet/__init__.py @@ -46,10 +46,15 @@ app.config["OIDC_CLIENT_SECRET"])) # Initialize Onesignal Notification apps -onesignal_client = onesignal.Client(user_auth_key=app.config["ONESIGNAL_USER_AUTH_KEY"], - app_auth_key=app.config["ONESIGNAL_APP_AUTH_KEY"], - app_id=app.config["ONESIGNAL_APP_ID"]) +csh_onesignal_client = onesignal.Client(user_auth_key=app.config["ONESIGNAL_USER_AUTH_KEY"], + app_auth_key=app.config["ONESIGNAL_CSH_APP_AUTH_KEY"], + app_id=app.config["ONESIGNAL_CSH_APP_ID"]) +intro_onesignal_client = onesignal.Client(user_auth_key=app.config["ONESIGNAL_USER_AUTH_KEY"], + app_auth_key=app.config["ONESIGNAL_INTRO_APP_AUTH_KEY"], + app_id=app.config["ONESIGNAL_INTRO_APP_ID"]) + +# OIDC Auth auth = OIDCAuthentication({'app': APP_CONFIG}, app) # LDAP diff --git a/packet/notifications.py b/packet/notifications.py index 50f7e582..70933509 100644 --- a/packet/notifications.py +++ b/packet/notifications.py @@ -1,6 +1,6 @@ import onesignal -from packet import app, onesignal_client +from packet import app, intro_onesignal_client from packet.models import NotificationSubscription post_body = { @@ -23,12 +23,13 @@ def packet_signed_notification(packet, signer): notification.post_body["chrome_web_icon"] = 'https://profiles.csh.rit.edu/image/' + signer notification.post_body["include_player_ids"] = tokens - onesignal_response = onesignal_client.send_notification(notification) + onesignal_response = intro_onesignal_client.send_notification(notification) if onesignal_response.status_code == 200: app.logger.info("The notification ({}) sent out successfully".format(notification.post_body)) def packet_100_percent_notification(packet): + # TODO: Split into csh and intro subscriptions subscriptions = NotificationSubscription.query.all() if subscriptions: tokens = list(map(lambda subscription: subscription.token, subscriptions)) From b30322e6de578b0202ad8efc728bb5d72947d00b Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Mon, 19 Aug 2019 17:16:02 -0400 Subject: [PATCH 21/32] Dual Client setup --- config.env.py | 4 ++++ packet/notifications.py | 36 +++++++++++++++++++++++------------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/config.env.py b/config.env.py index 5bb0d6c4..33fc530a 100644 --- a/config.env.py +++ b/config.env.py @@ -48,3 +48,7 @@ # Slack URL for pushing to #general SLACK_WEBHOOK_URL = environ.get("PACKET_SLACK_URL", None) + +# Packet Config +PACKET_UPPER = environ.get("PACKET_UPPER", "packet.csh.rit.edu") +PACKET_INTRO = environ.get("PACKET_INTRO", "freshmen-packet.csh.rit.edu") diff --git a/packet/notifications.py b/packet/notifications.py index 70933509..590b7dfe 100644 --- a/packet/notifications.py +++ b/packet/notifications.py @@ -1,6 +1,6 @@ import onesignal -from packet import app, intro_onesignal_client +from packet import app, intro_onesignal_client, csh_onesignal_client from packet.models import NotificationSubscription post_body = { @@ -12,6 +12,18 @@ } +def send_notification(notification_body, subscriptions, client): + tokens = list(map(lambda subscription: subscription.token, subscriptions)) + if tokens: + notification = onesignal.Notification(post_body=notification_body) + notification.post_body["include_player_ids"] = tokens + onesignal_response = client.send_notification(notification) + if onesignal_response.status_code == 200: + app.logger.info("The notification ({}) sent out successfully".format(notification.post_body)) + else: + app.logger.warn("The notification ({}) was unsuccessful".format(notification.post_body)) + + def packet_signed_notification(packet, signer): subscriptions = NotificationSubscription.query.filter_by(freshman_username=packet.freshman_username) if subscriptions: @@ -22,6 +34,7 @@ def packet_signed_notification(packet, signer): notification.post_body["headings"]["en"] = 'New Packet Signature!' notification.post_body["chrome_web_icon"] = 'https://profiles.csh.rit.edu/image/' + signer notification.post_body["include_player_ids"] = tokens + notification.post_body["url"] = app.config["PROTOCOL"] + app.config["PACKET_INTRO"] onesignal_response = intro_onesignal_client.send_notification(notification) if onesignal_response.status_code == 200: @@ -29,18 +42,15 @@ def packet_signed_notification(packet, signer): def packet_100_percent_notification(packet): - # TODO: Split into csh and intro subscriptions - subscriptions = NotificationSubscription.query.all() - if subscriptions: - tokens = list(map(lambda subscription: subscription.token, subscriptions)) + member_subscriptions = NotificationSubscription.query.filter(NotificationSubscription.member.isnot(None)) + intro_subscriptions = NotificationSubscription.query.filter(NotificationSubscription.freshman_username.isnot(None)) - notification = onesignal.Notification(post_body=post_body) - notification.post_body["contents"]["en"] = packet.freshman.name + ' got 💯 on packet!' - notification.post_body["headings"]["en"] = 'New 100% on Packet!' + if member_subscriptions or intro_subscriptions: + notification_body = post_body + notification_body["contents"]["en"] = packet.freshman.name + ' got 💯 on packet!' + notification_body["headings"]["en"] = 'New 100% on Packet!' # TODO: Issue #156 - notification.post_body["chrome_web_icon"] = 'https://profiles.csh.rit.edu/image/' + packet.freshman_username - notification.post_body["include_player_ids"] = tokens + notification_body["chrome_web_icon"] = 'https://profiles.csh.rit.edu/image/' + packet.freshman_username - onesignal_response = onesignal_client.send_notification(notification) - if onesignal_response.status_code == 200: - app.logger.info("The notification ({}) sent out successfully".format(notification.post_body)) + send_notification(notification_body, member_subscriptions, csh_onesignal_client) + send_notification(notification_body, intro_subscriptions, intro_onesignal_client) From 7147d85ead446d395e39557322ff757b6cb09ec1 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Mon, 19 Aug 2019 20:00:47 -0400 Subject: [PATCH 22/32] Using send_notification in both --- packet/notifications.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/packet/notifications.py b/packet/notifications.py index 590b7dfe..8d11449b 100644 --- a/packet/notifications.py +++ b/packet/notifications.py @@ -27,18 +27,13 @@ def send_notification(notification_body, subscriptions, client): def packet_signed_notification(packet, signer): subscriptions = NotificationSubscription.query.filter_by(freshman_username=packet.freshman_username) if subscriptions: - tokens = list(map(lambda subscription: subscription.token, subscriptions)) - - notification = onesignal.Notification(post_body=post_body) - notification.post_body["contents"]["en"] = signer + ' signed your packet! Congrats or I\'m Sorry' - notification.post_body["headings"]["en"] = 'New Packet Signature!' - notification.post_body["chrome_web_icon"] = 'https://profiles.csh.rit.edu/image/' + signer - notification.post_body["include_player_ids"] = tokens - notification.post_body["url"] = app.config["PROTOCOL"] + app.config["PACKET_INTRO"] + notification_body = post_body + notification_body["contents"]["en"] = signer + ' signed your packet! Congrats or I\'m Sorry' + notification_body["headings"]["en"] = 'New Packet Signature!' + notification_body["chrome_web_icon"] = 'https://profiles.csh.rit.edu/image/' + signer + notification_body["url"] = app.config["PROTOCOL"] + app.config["PACKET_INTRO"] - onesignal_response = intro_onesignal_client.send_notification(notification) - if onesignal_response.status_code == 200: - app.logger.info("The notification ({}) sent out successfully".format(notification.post_body)) + send_notification(notification_body, subscriptions, intro_onesignal_client) def packet_100_percent_notification(packet): From 5f2361fe7aac87df0d3bb7b32b32b28077340443 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Tue, 20 Aug 2019 23:18:41 -0400 Subject: [PATCH 23/32] Starting notifications --- packet/commands.py | 3 +++ packet/notifications.py | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/packet/commands.py b/packet/commands.py index 4237c61f..434850a1 100644 --- a/packet/commands.py +++ b/packet/commands.py @@ -8,6 +8,7 @@ import click from packet.mail import send_start_packet_mail +from packet.notifications import packet_starting_notification, packets_starting_notification from . import app, db from .models import Freshman, Packet, FreshSignature, UpperSignature, MiscSignature from .ldap import ldap_get_eboard_role, ldap_get_active_rtps, ldap_get_3das, ldap_get_webmasters, \ @@ -132,6 +133,8 @@ def create_packets(freshmen_csv): packet = Packet(freshman=freshman, start=start, end=end) db.session.add(packet) send_start_packet_mail(packet) + packet_starting_notification(packet) + packets_starting_notification(start) for member in all_upper: sig = UpperSignature(packet=packet, member=member.uid) diff --git a/packet/notifications.py b/packet/notifications.py index 8d11449b..907dc9c5 100644 --- a/packet/notifications.py +++ b/packet/notifications.py @@ -39,7 +39,6 @@ def packet_signed_notification(packet, signer): def packet_100_percent_notification(packet): member_subscriptions = NotificationSubscription.query.filter(NotificationSubscription.member.isnot(None)) intro_subscriptions = NotificationSubscription.query.filter(NotificationSubscription.freshman_username.isnot(None)) - if member_subscriptions or intro_subscriptions: notification_body = post_body notification_body["contents"]["en"] = packet.freshman.name + ' got 💯 on packet!' @@ -49,3 +48,26 @@ def packet_100_percent_notification(packet): send_notification(notification_body, member_subscriptions, csh_onesignal_client) send_notification(notification_body, intro_subscriptions, intro_onesignal_client) + + +def packet_starting_notification(packet): + subscriptions = NotificationSubscription.query.filter_by(freshman_username=packet.freshman_username) + if subscriptions: + notification_body = post_body + notification_body["contents"]["en"] = 'Log into your packet, and get started meeting people!' + notification_body["headings"]["en"] = 'Your packet has begun!' + notification_body["url"] = app.config["PROTOCOL"] + app.config["PACKET_INTRO"] + notification_body["send_after"] = packet.start + + send_notification(notification_body, subscriptions, intro_onesignal_client) + + +def packets_starting_notification(start_date): + member_subscriptions = NotificationSubscription.query.filter(NotificationSubscription.member.isnot(None)) + if member_subscriptions: + notification_body = post_body + notification_body["contents"]["en"] = 'New packets have started, visit packet to see them!' + notification_body["headings"]["en"] = 'Packets Start Today!' + notification_body["send_after"] = start_date.strftime("%Y-%m-%d %H:%M:%S") + + send_notification(notification_body, member_subscriptions, csh_onesignal_client) From 22da9ac2b52691d55b004ef7ee02113f242fda76 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Tue, 20 Aug 2019 23:20:06 -0400 Subject: [PATCH 24/32] Fixing datetime formating --- packet/notifications.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packet/notifications.py b/packet/notifications.py index 907dc9c5..5eea9d73 100644 --- a/packet/notifications.py +++ b/packet/notifications.py @@ -57,7 +57,7 @@ def packet_starting_notification(packet): notification_body["contents"]["en"] = 'Log into your packet, and get started meeting people!' notification_body["headings"]["en"] = 'Your packet has begun!' notification_body["url"] = app.config["PROTOCOL"] + app.config["PACKET_INTRO"] - notification_body["send_after"] = packet.start + notification_body["send_after"] = packet.start.strftime("%Y-%m-%d %H:%M:%S") send_notification(notification_body, subscriptions, intro_onesignal_client) From eed9e79c1bce75a7fb6b530c48fdf6b09fea2628 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Tue, 20 Aug 2019 23:49:48 -0400 Subject: [PATCH 25/32] Single notification for starting --- packet/commands.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packet/commands.py b/packet/commands.py index 434850a1..ccfc8e3a 100644 --- a/packet/commands.py +++ b/packet/commands.py @@ -126,6 +126,9 @@ def create_packets(freshmen_csv): c_m = ldap_get_constitutional_maintainers() drink = ldap_get_drink_admins() + # Packet starting notifications + packets_starting_notification(start) + # Create the new packets and the signatures for each freshman in the given CSV freshmen_in_csv = parse_csv(freshmen_csv) print("Creating DB entries and sending emails...") @@ -134,7 +137,6 @@ def create_packets(freshmen_csv): db.session.add(packet) send_start_packet_mail(packet) packet_starting_notification(packet) - packets_starting_notification(start) for member in all_upper: sig = UpperSignature(packet=packet, member=member.uid) From 97d29322954b89287dc7811b2eda89241c52ae31 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Tue, 20 Aug 2019 23:59:11 -0400 Subject: [PATCH 26/32] Fixing hardcoded references to instances --- packet/templates/mail/packet_start.html | 2 +- packet/templates/mail/packet_start.txt | 2 +- packet/utils.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packet/templates/mail/packet_start.html b/packet/templates/mail/packet_start.html index 36e2a300..722e5768 100644 --- a/packet/templates/mail/packet_start.html +++ b/packet/templates/mail/packet_start.html @@ -6,7 +6,7 @@

Hello {{ packet.freshman.name }},

Welcome to Computer Science House!

Soon you'll starting the introductory process for CSH, and the first part of that is Packet.

Your packet will start on {{ packet.start.strftime('%A, %B %-d') }} at {{ packet.start.strftime('%-I:%M %p') }}

-

You can view your packet at freshmen-packet.csh.rit.edu with +

You can view your packet at {{ config["PACKET_INTRO"] }} with the credentials you should have been sent.

If you don't know your credentials, reach out to an RTP

If you have any questions about Packet or the introductory process, email evals@csh.rit.edu

diff --git a/packet/templates/mail/packet_start.txt b/packet/templates/mail/packet_start.txt index 012423dc..162ec147 100644 --- a/packet/templates/mail/packet_start.txt +++ b/packet/templates/mail/packet_start.txt @@ -6,7 +6,7 @@ Soon you'll starting the introductory process for CSH, and the first part of tha Your packet will start on {{ packet.start.strftime('%A, %B %-d') }} at {{ packet.start.strftime('%-I:%M %p') }} -You can view your packet at freshmen-packet.csh.rit.edu with the credentials you should have been sent. +You can view your packet at {{ config["PROTOCOL"] + config["PACKET_INTRO"] }} with the credentials you should have been sent. If you don't know your credentials, reach out to an RTP If you have any questions about Packet or the introductory process, email evals@csh.rit.edu diff --git a/packet/utils.py b/packet/utils.py index 5c7481b4..cc412066 100644 --- a/packet/utils.py +++ b/packet/utils.py @@ -63,7 +63,7 @@ def wrapped_function(*args, **kwargs): username = str(session["userinfo"].get("preferred_username", "")) if ldap_is_intromember(ldap_get_member(username)): app.logger.warn("Stopped intro member {} from accessing upperclassmen packet".format(username)) - return redirect("https://freshmen-packet.csh.rit.edu", code=301) + return redirect(app.config["PROTOCOL"] + app.config["PACKET_INTRO"], code=301) return func(*args, **kwargs) From e0d3fae408a539d65fcf711afb3f24fd9ba76ecd Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Fri, 23 Aug 2019 13:22:43 -0400 Subject: [PATCH 27/32] Version Bump to 3.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6472f440..ec881a39 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "title": "CSH Packet", "name": "csh-packet", - "version": "3.2", + "version": "3.3.0", "description": "A web app implementation of the CSH introductory packet.", "bugs": { "url": "https://github.com/ComputerScienceHouse/packet/issues", From 7b7374ccee0d6eb1c68cf53f421c7991e2857216 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Fri, 23 Aug 2019 13:42:11 -0400 Subject: [PATCH 28/32] Using the correct APP_ID --- packet/templates/include/head.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packet/templates/include/head.html b/packet/templates/include/head.html index acdd27b8..12ff14c1 100644 --- a/packet/templates/include/head.html +++ b/packet/templates/include/head.html @@ -38,9 +38,14 @@