From 11cd449e4dda3bdd82b87e53aa3ba10bd208e6f3 Mon Sep 17 00:00:00 2001 From: Jeremy Smart Date: Thu, 16 Oct 2025 16:25:14 -0400 Subject: [PATCH] Revert @tallen42's work on the major project form --- .../blueprints/major_project_submission.py | 152 ++-- conditional/models/models.py | 8 +- .../templates/major_project_submission.html | 214 ++--- config.env.py | 4 - frontend/images/photo_video.svg | 6 - frontend/javascript/modules/dropzone.js | 19 +- .../javascript/modules/majorProjectForm.js | 95 +-- .../stylesheets/pages/_major-project.scss | 52 -- .../versions/05126dcdf40e_add_mp_fields.py | 89 --- package-lock.json | 742 +++++++++++------- package.json | 8 +- requirements.in | 4 +- requirements.txt | 11 - 13 files changed, 615 insertions(+), 789 deletions(-) delete mode 100644 frontend/images/photo_video.svg delete mode 100644 migrations/versions/05126dcdf40e_add_mp_fields.py diff --git a/conditional/blueprints/major_project_submission.py b/conditional/blueprints/major_project_submission.py index 6fb9649f..54829e7d 100644 --- a/conditional/blueprints/major_project_submission.py +++ b/conditional/blueprints/major_project_submission.py @@ -1,8 +1,5 @@ import json -import os - import requests -import boto3 from flask import Blueprint from flask import request @@ -12,7 +9,6 @@ from sqlalchemy import desc import structlog -from werkzeug.utils import secure_filename from conditional.util.context_processors import get_member_name @@ -26,162 +22,108 @@ logger = structlog.get_logger() -major_project_bp = Blueprint('major_project_bp', __name__) +major_project_bp = Blueprint("major_project_bp", __name__) -@major_project_bp.route('/major_project/') +@major_project_bp.route("/major_project/") @auth.oidc_auth("default") @get_user def display_major_project(user_dict=None): log = logger.new(request=request, auth_dict=user_dict) - log.info('Display Major Project Page') + log.info("Display Major Project Page") major_projects = [ { - 'username': p.uid, - 'name': ldap_get_member(p.uid).cn, - 'proj_name': p.name, - 'status': p.status, - 'description': p.description, - 'id': p.id, - 'is_owner': bool(user_dict['username'] == p.uid) - } for p in - MajorProject.query.filter( - MajorProject.date > start_of_year()).order_by( - desc(MajorProject.id))] + "username": p.uid, + "name": ldap_get_member(p.uid).cn, + "proj_name": p.name, + "status": p.status, + "description": p.description, + "id": p.id, + "is_owner": bool(user_dict["username"] == p.uid), + } + for p in MajorProject.query.filter( + MajorProject.date > start_of_year() + ).order_by(desc(MajorProject.id)) + ] major_projects_len = len(major_projects) # return names in 'first last (username)' format - return render_template('major_project_submission.html', - major_projects=major_projects, - major_projects_len=major_projects_len, - username=user_dict['username']) - -@major_project_bp.route('/major_project/upload', methods=['POST']) -@auth.oidc_auth("default") -@get_user -def upload_major_project_files(user_dict=None): - log = logger.new(request=request, auth_dict=user_dict) - log.info('Uploading Major Project File(s)') - + return render_template( + "major_project_submission.html", + major_projects=major_projects, + major_projects_len=major_projects_len, + username=user_dict["username"], + ) - if len(list(request.files.keys())) < 1: - return "No file", 400 - - # Temporarily save files to a place, to be uploaded on submit - - for _, file in request.files.lists(): - file = file[0] # remove it from the list because this is not the best - safe_name = secure_filename(file.filename) - filename = f"/tmp/{user_dict['username']}/{safe_name}" - - os.makedirs(os.path.dirname(filename), exist_ok=True) - file.save(filename) - - return jsonify({"success": True}), 200 - - -@major_project_bp.route('/major_project/submit', methods=['POST']) +@major_project_bp.route("/major_project/submit", methods=["POST"]) @auth.oidc_auth("default") @get_user def submit_major_project(user_dict=None): log = logger.new(request=request, auth_dict=user_dict) - log.info('Submit Major Project') + log.info("Submit Major Project") post_data = request.get_json() - print(post_data) - name = post_data['projectName'] - tldr = post_data['projectTldr'] - time_spent = post_data['projectTimeSpent'] - skills = post_data['projectSkills'] - description = post_data['projectDescription'] - - user_id = user_dict['username'] - - print(skills) + name = post_data["projectName"] + description = post_data["projectDescription"] - if name == "" or len(description.strip().split()) < 50: # check for 50 word minimum + if name == "" or description == "": return jsonify({"success": False}), 400 - project = MajorProject(user_id, name, tldr, time_spent, description) + project = MajorProject(user_dict["username"], name, description) + username = user_dict["username"] + send_slack_ping( + { + "text": f" *{get_member_name(username)}* ({username})" + f" submitted their major project, *{name}*!" + } + ) db.session.add(project) db.session.commit() - - # This allows us to get a project with a database ID - project = MajorProject.query.filter( - MajorProject.name == name and MajorProject.uid == user_id - ).first() - - if project is None: - return jsonify({"success": False}), 500 - - # Don't send slack ping until after we are sure the DB worked fine - send_slack_ping({"text":f" *{get_member_name(user_id)}* ({user_id})" - f" submitted their major project, *{name}*!"}) - - # Acquire S3 Bucket instance - s3 = boto3.resource("s3", endpoint_url="https://s3.csh.rit.edu") - bucket = s3.create_bucket(Bucket="major-project-media") - # Collect all the locally cached files and put them in the bucket - for file in os.listdir(f"/tmp/{user_id}"): - filepath = f"/tmp/{user_id}/{file}" - print(filepath) - bucket.upload_file(filepath, f"{project.id}-{file}") - os.remove(filepath) - os.rmdir(f"/tmp/{user_id}") - return jsonify({"success": True}), 200 -@major_project_bp.route('/major_project/review', methods=['POST']) +@major_project_bp.route("/major_project/review", methods=["POST"]) @auth.oidc_auth("default") @get_user def major_project_review(user_dict=None): log = logger.new(request=request, auth_dict=user_dict) - if not ldap_is_eval_director(user_dict['account']): + if not ldap_is_eval_director(user_dict["account"]): return redirect("/dashboard", code=302) post_data = request.get_json() - pid = post_data['id'] - status = post_data['status'] + pid = post_data["id"] + status = post_data["status"] - log.info(f'{status} Major Project ID: {pid}') + log.info(f"{status} Major Project ID: {pid}") print(post_data) - MajorProject.query.filter( - MajorProject.id == pid). \ - update( - { - 'status': status - }) + MajorProject.query.filter(MajorProject.id == pid).update({"status": status}) db.session.flush() db.session.commit() return jsonify({"success": True}), 200 -@major_project_bp.route('/major_project/delete/', methods=['DELETE']) +@major_project_bp.route("/major_project/delete/", methods=["DELETE"]) @auth.oidc_auth("default") @get_user def major_project_delete(pid, user_dict=None): log = logger.new(request=request, auth_dict=user_dict) - log.info(f'Delete Major Project ID: {pid}') + log.info(f"Delete Major Project ID: {pid}") - major_project = MajorProject.query.filter( - MajorProject.id == pid - ).first() + major_project = MajorProject.query.filter(MajorProject.id == pid).first() creator = major_project.uid - if creator == user_dict['username'] or ldap_is_eval_director(user_dict['account']): - MajorProject.query.filter( - MajorProject.id == pid - ).delete() + if creator == user_dict["username"] or ldap_is_eval_director(user_dict["account"]): + MajorProject.query.filter(MajorProject.id == pid).delete() db.session.flush() db.session.commit() return jsonify({"success": True}), 200 return "Must be project owner to delete!", 401 + def send_slack_ping(payload): - requests.post(app.config['WEBHOOK_URL'], json.dumps(payload), timeout=120) + requests.post(app.config["WEBHOOK_URL"], json.dumps(payload), timeout=120) diff --git a/conditional/models/models.py b/conditional/models/models.py index 423795ea..97e8875f 100644 --- a/conditional/models/models.py +++ b/conditional/models/models.py @@ -134,20 +134,16 @@ class MajorProject(db.Model): date = Column(Date, nullable=False) uid = Column(String(32), nullable=False) name = Column(String(64), nullable=False) - tldr = Column(String(128), nullable=False) - time = Column(Text, nullable=False) - description = Column(Text, nullable=False) + description = Column(Text) active = Column(Boolean, nullable=False) status = Column(Enum('Pending', 'Passed', 'Failed', name="major_project_enum"), nullable=False) - def __init__(self, uid, name, tldr, time, desc): # pylint: disable=too-many-positional-arguments,redefined-outer-name + def __init__(self, uid, name, desc): self.uid = uid self.date = datetime.now() self.name = name - self.tldr = tldr - self.time = time self.description = desc self.status = 'Pending' self.active = True diff --git a/conditional/templates/major_project_submission.html b/conditional/templates/major_project_submission.html index 256688b7..8705d2ad 100644 --- a/conditional/templates/major_project_submission.html +++ b/conditional/templates/major_project_submission.html @@ -1,162 +1,94 @@ {% extends "nav.html" %} -{% block extraHeader %} - -{% endblock %} {% block title %} - Major Project Form +Major Project Form {% endblock %} {% block body %} -
-

Major Project Form

+
+

Major Project Form

+
-

Welcome to the Major Project submission form! We're excited to read about what you've - been working on. For us (E-Board) to best evaluate your project, please give us as much detail as - possible. Don't feel pressured to write full paragraphs though, good bullet points are plenty! -
Generally, a major project is something that you make with the goal of challenging yourself, - learning new things, and doing something you would be proud of. Major projects are most likely to - pass when they meet at least 2 of the 3 - Major Project Pillars - - considerable time on your project, benefiting House, and meaningfully applying skills. And of course, - after you submit, please try to talk to E-Board members (in-person or over Slack) so we are familiar - with your project and can ask you questions!

-
-
- -
-
- +
+ - - -
-
- -
- - List what skills you meaningfully used while working on this project (at least 2!)
-
-
- - -
-
- - -
-
- - -
-
-
-
- -
Upload Media
-
Drag files here or click to upload.
-
-
-
-
+ placeholder="A clever name for your project, sometimes people will come up with an acronym.">
- - - -

All Major Projects

{% if major_projects_len - <=0 %} +
-
-

No Pending Major Projects

+
+
+ + +
- {% else %} + + +

All Major Projects

{% if major_projects_len + <=0 %}
+
+

No Pending Major Projects

+
+
+{% else %} - {% for p in major_projects %} -
-
-
-

{{ p['proj_name'] }}

- - {{ p['name'] }} ({{ p['username'] }}) -
-
+ {% for p in major_projects %} +
+
+
+

{{p['proj_name']}}

+ + {{p['name']}} ({{p['username']}}) +
+
- {% if is_eval_director %} + {% if is_eval_director %} - - {% else %} - {% if p['status'] == 'Passed' %} -
- {% elif p['status'] == 'Failed' %} -
- {% else %} -
- {% endif %} - {% if p.is_owner and p['status'] == 'Pending' %} - - {% endif %} - {% endif %} -
- -
- {{ p['description'] }} -
+ + {% else %} + {% if p['status'] == 'Passed' %} +
+ {% elif p['status'] == 'Failed' %} +
+ {% else %} +
+ {% endif %} + {% if p.is_owner and p['status'] == 'Pending' %} + + {% endif %} + {% endif %} +
+ +
+ {{p['description']}}
- {% endfor %} +
+
+ {% endfor %} - {% endif %} +{% endif %} -
+
{% endblock %} diff --git a/config.env.py b/config.env.py index 29c0689b..44e0464e 100644 --- a/config.env.py +++ b/config.env.py @@ -25,10 +25,6 @@ LDAP_BIND_DN = env.get("CONDITIONAL_LDAP_BIND_DN", "cn=conditional,ou=Apps,dc=csh,dc=rit,dc=edu") LDAP_BIND_PW = env.get("CONDITIONAL_LDAP_BIND_PW", "") -# S3 information -AWS_ACCESS_KEY_ID = env.get("AWS_ACCESS_KEY_ID", "") -AWS_SECRET_ACCESS_KEY = env.get("AWS_SECRET_ACCESS_KEY", "") - # Sentry config # Not required for local development, but if you set it, make sure the # SENTRY_ENV is 'local-development' diff --git a/frontend/images/photo_video.svg b/frontend/images/photo_video.svg deleted file mode 100644 index 2324ec73..00000000 --- a/frontend/images/photo_video.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/frontend/javascript/modules/dropzone.js b/frontend/javascript/modules/dropzone.js index 959f2b19..2b04a87e 100644 --- a/frontend/javascript/modules/dropzone.js +++ b/frontend/javascript/modules/dropzone.js @@ -1,19 +1,18 @@ import Dropzone from "dropzone"; - Dropzone.autoDiscover = false; export default class DropzoneUpload { - constructor(element) { - this.element = element; - this.render(); - } + constructor(element) { + this.element = element; + this.render(); + } - render() { - const dz = new Dropzone(this.element); // eslint-disable-line new-cap - dz.on("complete", () => window.location.reload()); - } + render() { + const dz = new Dropzone(this.element); // eslint-disable-line new-cap + dz.on("complete", () => window.location.reload()); + } } Dropzone.options.uploadUser = { - acceptedFiles: ".csv" + acceptedFiles: ".csv" }; diff --git a/frontend/javascript/modules/majorProjectForm.js b/frontend/javascript/modules/majorProjectForm.js index 89a210dd..fc9969c1 100644 --- a/frontend/javascript/modules/majorProjectForm.js +++ b/frontend/javascript/modules/majorProjectForm.js @@ -1,73 +1,30 @@ import FetchUtil from "../utils/fetchUtil"; export default class MajorProjectForm { - - - constructor(form) { - this.form = form; - this.endpoint = '/major_project/submit'; - this.tags_written = false; - this.tag_keys = ["Enter", "Comma"]; - this.render(); - } - - render() { - this.form.querySelector('input[type=submit]') - .addEventListener('click', e => this._submitForm(e)); - this.form.querySelector('input[id=skill-input]') - .addEventListener('focusout', e => this.onWriteSkill(e)); - this.form.querySelector('input[id=skill-input]') - .addEventListener('keypress', e => this.onKeyPress(e)); - } - - onKeyPress(e) { - if (this.tag_keys.includes(e.code)) { - e.preventDefault(); - this.onWriteSkill(e); - } - return false; - } - - onWriteSkill(e) { - let input = document.getElementById("skill-input") - if (!this.tags_written) { - this.tags_written = true - document.getElementsByClassName("placeholder").item(0).remove() - } - let txt = input.value.replace(/[^a-zA-Z0-9\+\-\.\# ]/g, ''); // allowed characters list - if (txt) input.insertAdjacentHTML("beforebegin", '' + txt + ''); - let skills = document.getElementsByClassName("skill-tag") - skills.item(skills.length - 1).addEventListener('click', e => this.onRemoveTag(e)); - input.value = ""; - input.focus(); - - } - - onRemoveTag(e) { - e.target.remove(); - } - - _submitForm(e) { - e.preventDefault(); - - let skills = []; - - Array.from(document.getElementsByClassName('skill-tag')).forEach(tag => skills.push(tag.firstChild.data)) - - let payload = { - projectName: this.form.querySelector('input[name=name]').value, - projectTldr: this.form.querySelector('input[name=tldr]').value, - projectTimeSpent: this.form.querySelector('textarea[name=time-commitment]').value, - projectSkills: skills, - projectDescription: this.form.querySelector('textarea[name=description]').value - }; - - console.log(payload) - - FetchUtil.postWithWarning(this.endpoint, payload, { - warningText: "You will not be able to edit your " + - "project once it has been submitted.", - successText: "Your project has been submitted." - }); - } + constructor(form) { + this.form = form; + this.endpoint = '/major_project/submit'; + this.render(); + } + + render() { + this.form.querySelector('input[type=submit]') + .addEventListener('click', e => this._submitForm(e)); + } + + _submitForm(e) { + e.preventDefault(); + + let payload = { + projectName: this.form.querySelector('input[name=name]').value, + projectDescription: + this.form.querySelector('textarea[name=description]').value + }; + + FetchUtil.postWithWarning(this.endpoint, payload, { + warningText: "You will not be able to edit your " + + "project once it has been submitted.", + successText: "Your project has been submitted." + }); + } } diff --git a/frontend/stylesheets/pages/_major-project.scss b/frontend/stylesheets/pages/_major-project.scss index ca0667ce..01438510 100644 --- a/frontend/stylesheets/pages/_major-project.scss +++ b/frontend/stylesheets/pages/_major-project.scss @@ -1,55 +1,3 @@ .major-project-desc { white-space: pre-line; } - -.form-label { - margin-bottom: 0; - margin-top: 1.25rem; - font-size: 2rem; -} - -.form-label span { - font-size: 1rem; -} - -.form-textarea { - resize: vertical; -} - -.form-skilltags { - box-shadow: inset 0 -1px 0 #ddd; - border: none; - border-radius: 0; - padding: 0 0 10px; - height: fit-content; -} - -.placeholder { - color: #bbb; - font-size: 16px; -} - -.skill-tag { - display: block; - float: left; - background: #d979e3; - padding: 4px 30px 4px 8px; - margin: 2px 3px; - color: #444; - border-radius: 5px; - transition: .5s all; -} - -.skill-tag:after { - position: absolute; - content: "×"; - border: 1px solid; - border-radius: 10px; - padding: 0 4px; - margin: 3px 0 10px 7px; - font-size: 10px; -} - -.skill-tag:hover { - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); -} \ No newline at end of file diff --git a/migrations/versions/05126dcdf40e_add_mp_fields.py b/migrations/versions/05126dcdf40e_add_mp_fields.py deleted file mode 100644 index 9eafb64f..00000000 --- a/migrations/versions/05126dcdf40e_add_mp_fields.py +++ /dev/null @@ -1,89 +0,0 @@ -"""add major project fields - -Revision ID: 05126dcdf40e -Revises: 757e18146d16 -Create Date: 2024-09-15 00:20:50.617251 - -""" - -# revision identifiers, used by Alembic. -revision = '05126dcdf40e' -down_revision = '757e18146d16' - -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('freshman_batch_pulls') - op.drop_table('batch_conditions') - op.drop_table('freshman_batch_users') - op.drop_table('batch') - op.drop_table('member_batch_users') - op.drop_table('member_batch_pulls') - op.alter_column('freshman_hm_attendance', 'attendance_status', - existing_type=postgresql.ENUM('Attended', 'Excused', 'Absent', name='attendance_enum'), - nullable=True) - op.add_column('major_projects', sa.Column('time', sa.Text(), nullable=False, server_default='N/A')) - op.add_column('major_projects', sa.Column('tldr', sa.String(length=128), nullable=False, server_default='N/A')) - op.alter_column('major_projects', 'description', - existing_type=sa.TEXT(), - nullable=False) - op.alter_column('member_hm_attendance', 'attendance_status', - existing_type=postgresql.ENUM('Attended', 'Excused', 'Absent', name='attendance_enum'), - nullable=True) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('member_hm_attendance', 'attendance_status', - existing_type=postgresql.ENUM('Attended', 'Excused', 'Absent', name='attendance_enum'), - nullable=False) - op.alter_column('major_projects', 'description', - existing_type=sa.TEXT(), - nullable=True) - op.drop_column('major_projects', 'tldr') - op.drop_column('major_projects', 'time') - op.alter_column('freshman_hm_attendance', 'attendance_status', - existing_type=postgresql.ENUM('Attended', 'Excused', 'Absent', name='attendance_enum'), - nullable=False) - op.create_table('member_batch_pulls', - sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), - sa.Column('uid', sa.VARCHAR(length=32), autoincrement=False, nullable=False), - sa.Column('approved', sa.BOOLEAN(), autoincrement=False, nullable=False), - sa.Column('reason', sa.TEXT(), autoincrement=False, nullable=False), - sa.Column('puller', sa.VARCHAR(), autoincrement=False, nullable=False) - ) - op.create_table('member_batch_users', - sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), - sa.Column('uid', sa.VARCHAR(length=32), autoincrement=False, nullable=True), - sa.Column('batch_id', sa.INTEGER(), autoincrement=False, nullable=False) - ) - op.create_table('batch', - sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), - sa.Column('name', sa.TEXT(), autoincrement=False, nullable=False), - sa.Column('uid', sa.VARCHAR(length=32), autoincrement=False, nullable=True), - sa.Column('approved', sa.BOOLEAN(), autoincrement=False, nullable=False) - ) - op.create_table('freshman_batch_users', - sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), - sa.Column('fid', sa.INTEGER(), autoincrement=False, nullable=False), - sa.Column('batch_id', sa.INTEGER(), autoincrement=False, nullable=False) - ) - op.create_table('batch_conditions', - sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), - sa.Column('value', sa.INTEGER(), autoincrement=False, nullable=False), - sa.Column('condition', postgresql.ENUM('packet', 'seminar', 'committee', 'house', name='batch_ctype_enum'), autoincrement=False, nullable=False), - sa.Column('comparison', postgresql.ENUM('less', 'equal', 'greater', name='batch_comparison'), autoincrement=False, nullable=False), - sa.Column('batch_id', sa.INTEGER(), autoincrement=False, nullable=False) - ) - op.create_table('freshman_batch_pulls', - sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), - sa.Column('fid', sa.INTEGER(), autoincrement=False, nullable=False), - sa.Column('approved', sa.BOOLEAN(), autoincrement=False, nullable=False), - sa.Column('reason', sa.TEXT(), autoincrement=False, nullable=False), - sa.Column('puller', sa.VARCHAR(), autoincrement=False, nullable=False) - ) - # ### end Alembic commands ### diff --git a/package-lock.json b/package-lock.json index 4688860d..e232319f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "conditional", - "version": "1.12.0", + "version": "1.10.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -67,12 +67,6 @@ "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=", "dev": true }, - "a-sync-waterfall": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", - "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", - "dev": true - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -190,10 +184,10 @@ "ansi-wrap": "0.1.0" } }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "ansi-html": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.5.tgz", + "integrity": "sha1-DcqloIEgaGa8JAo7dzoYTqO4i2Q=", "dev": true }, "ansi-red": { @@ -369,7 +363,7 @@ "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true }, "asn1": { @@ -430,9 +424,9 @@ "dev": true }, "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "requires": { "lodash": "^4.17.14" } @@ -1493,9 +1487,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true, "optional": true }, @@ -1539,14 +1533,40 @@ } }, "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", + "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", "dev": true, - "optional": true, "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "readable-stream": "~2.0.5" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } } }, "blob": { @@ -1834,9 +1854,9 @@ } }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz", + "integrity": "sha1-1baAoWW2IBc5rLYRVCqrwtjOsHA=", "dev": true }, "cache-base": { @@ -2361,49 +2381,48 @@ } }, "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz", + "integrity": "sha1-zOsSHsydCcUtetDDNQ6pPd1AK8M=", "dev": true, "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "accepts": "~1.3.3", + "bytes": "2.3.0", + "compressible": "~2.0.8", + "debug": "~2.2.0", + "on-headers": "~1.0.1", + "vary": "~1.1.0" }, "dependencies": { "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", "dev": true, "requires": { - "mime-db": "1.52.0" + "ms": "0.7.1" } }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true } } @@ -2755,11 +2774,11 @@ } }, "datatables.net": { - "version": "1.13.11", - "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.13.11.tgz", - "integrity": "sha512-AE6RkMXziRaqzPcu/pl3SJXeRa6fmXQG/fVjuRESujvkzqDCYEeKTTpPMuVJSGYJpPi32WGSphVNNY1G4nSN/g==", + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.11.2.tgz", + "integrity": "sha512-Dg+Yeyky+BhXoooJqTDTGssLxkAxe73CljcjYd4630XQZKqqqy0akYk2r4RSHSJLyYCOGRZEZiUF/N39+5nqvg==", "requires": { - "jquery": "1.8 - 4" + "jquery": ">=1.7" } }, "datatables.net-bs": { @@ -4042,23 +4061,14 @@ } }, "es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", "dev": true, "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "dependencies": { - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - } + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" } }, "es6-iterator": { @@ -4238,26 +4248,6 @@ "integrity": "sha1-+RZ2VDK6Z9L8enF3uLz+8/brBWQ=", "dev": true }, - "esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "dev": true - } - } - }, "espree": { "version": "3.5.4", "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", @@ -4472,18 +4462,18 @@ "dev": true }, "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { "minimist": "^1.2.0" } }, "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -4492,9 +4482,9 @@ } }, "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -4595,6 +4585,12 @@ "is-extglob": "^1.0.0" } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, "fancy-log": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", @@ -5694,9 +5690,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "semver": { @@ -6093,40 +6089,217 @@ } }, "gulp-nunjucks-render": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/gulp-nunjucks-render/-/gulp-nunjucks-render-2.2.3.tgz", - "integrity": "sha512-YHrmwiwPw2DN16WJVj8S2tgUanB1ssZE8e5rRF6rH1T41mhO7r59iAqw92Yz5WSZXYB9G+uYXDTCODgixYPIRw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-nunjucks-render/-/gulp-nunjucks-render-2.0.0.tgz", + "integrity": "sha1-z0hQasXAWtiQIyYKMPaVHyI7JZ8=", "dev": true, "requires": { - "lodash": "^4.17.11", - "nunjucks": "^3.1.2", - "plugin-error": "^1.0.1", - "replace-ext": "^1.0.0", - "through2": "^2.0.3" + "gulp-util": "~2.2.0", + "lodash": "^3.3.0", + "nunjucks": "^2.0.0", + "through2": "~0.4.0" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "ansi-regex": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", "dev": true }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "ansi-styles": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "dev": true + }, + "chalk": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", "dev": true, "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" + "ansi-styles": "^1.1.0", + "escape-string-regexp": "^1.0.0", + "has-ansi": "^0.1.0", + "strip-ansi": "^0.3.0", + "supports-color": "^0.2.0" } }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "gulp-util": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz", + "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=", + "dev": true, + "requires": { + "chalk": "^0.5.0", + "dateformat": "^1.0.7-1.2.3", + "lodash._reinterpolate": "^2.4.1", + "lodash.template": "^2.4.1", + "minimist": "^0.2.0", + "multipipe": "^0.1.0", + "through2": "^0.5.0", + "vinyl": "^0.2.1" + }, + "dependencies": { + "through2": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", + "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", + "dev": true, + "requires": { + "readable-stream": "~1.0.17", + "xtend": "~3.0.0" + } + } + } + }, + "has-ansi": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "dev": true, + "requires": { + "ansi-regex": "^0.2.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz", + "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=", + "dev": true + }, + "lodash.escape": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", + "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=", + "dev": true, + "requires": { + "lodash._escapehtmlchar": "~2.4.1", + "lodash._reunescapedhtml": "~2.4.1", + "lodash.keys": "~2.4.1" + } + }, + "lodash.keys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", + "dev": true, + "requires": { + "lodash._isnative": "~2.4.1", + "lodash._shimkeys": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "lodash.template": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", + "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=", + "dev": true, + "requires": { + "lodash._escapestringchar": "~2.4.1", + "lodash._reinterpolate": "~2.4.1", + "lodash.defaults": "~2.4.1", + "lodash.escape": "~2.4.1", + "lodash.keys": "~2.4.1", + "lodash.templatesettings": "~2.4.1", + "lodash.values": "~2.4.1" + } + }, + "lodash.templatesettings": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", + "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=", + "dev": true, + "requires": { + "lodash._reinterpolate": "~2.4.1", + "lodash.escape": "~2.4.1" + } + }, + "minimist": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.1.tgz", + "integrity": "sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg==", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-ansi": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "dev": true, + "requires": { + "ansi-regex": "^0.2.1" + } + }, + "supports-color": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "dev": true + }, + "through2": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", + "dev": true, + "requires": { + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" + }, + "dependencies": { + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "vinyl": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz", + "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=", + "dev": true, + "requires": { + "clone-stats": "~0.0.1" + } + }, + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", "dev": true } } @@ -6927,9 +7100,9 @@ "dev": true }, "html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", "dev": true }, "html-minifier": { @@ -7452,24 +7625,16 @@ "dev": true }, "is-my-json-valid": { - "version": "2.20.6", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", - "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", + "version": "2.20.5", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.5.tgz", + "integrity": "sha512-VTPuvvGQtxvCeghwspQu1rBgjYUT6FGxPlvFKbYuFtgc4ADsX3U5ihZOYN0qyU6u+d4X9xXb0IT5O6QpXKt87A==", "dev": true, "requires": { "generate-function": "^2.0.0", "generate-object-property": "^1.1.0", "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^5.0.0", + "jsonpointer": "^4.0.0", "xtend": "^4.0.0" - }, - "dependencies": { - "jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "dev": true - } } }, "is-natural-number": { @@ -7755,19 +7920,19 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { "argparse": "^1.0.7", - "esprima": "^4.0.0" + "esprima": "^2.6.0" }, "dependencies": { "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true } } @@ -7784,6 +7949,12 @@ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -7838,12 +8009,22 @@ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, + "jsonpointer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", + "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==", + "dev": true + }, "jsprim": { "version": "1.4.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" }, "dependencies": { "assert-plus": { @@ -8716,9 +8897,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -8792,9 +8973,9 @@ } }, "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -8842,9 +9023,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -9063,6 +9244,12 @@ "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", @@ -9323,9 +9510,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -9422,7 +9609,8 @@ "dev": true, "requires": { "glob": "~7.1.1", - "lodash": "~4.17.10" + "lodash": "~4.17.10", + "minimatch": "~3.0.2" } }, "har-validator": { @@ -9646,21 +9834,53 @@ "dev": true }, "nunjucks": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", - "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-2.5.2.tgz", + "integrity": "sha1-6n00bnhbikh0Zmw8yp4YxXf7oiw=", "dev": true, "requires": { - "a-sync-waterfall": "^1.0.0", "asap": "^2.0.3", - "commander": "^5.1.0" + "chokidar": "^1.6.0", + "yargs": "^3.32.0" }, "dependencies": { - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", "dev": true + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } + }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "dev": true, + "requires": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } } } }, @@ -9704,6 +9924,12 @@ } } }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, "object-path": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", @@ -10800,9 +11026,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true, "optional": true } @@ -11350,46 +11576,11 @@ "tunnel-agent": "~0.4.1" }, "dependencies": { - "bl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", - "integrity": "sha512-phbvN+yOk05EGoFcV/0S8N8ShnJqf6VCWRAw5he2gvRwBubFt/OzmcTNGqBt5b7Y4RK3YCgf6jrgGSR0Cwtsgw==", - "dev": true, - "requires": { - "readable-stream": "~2.0.5" - } - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==", - "dev": true - }, "qs": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz", "integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=", "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true } } }, @@ -11611,7 +11802,8 @@ "dependencies": { "ansi-regex": { "version": "4.1.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { @@ -11837,17 +12029,6 @@ "glob": "~7.1.1", "lodash": "~4.17.10", "minimatch": "~3.0.2" - }, - "dependencies": { - "minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } } }, "gonzales-pe-sl": { @@ -11949,9 +12130,9 @@ "integrity": "sha1-myE4zYi8JQSdi7SnCcMzHxg+XJ4=" }, "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "semver-regex": { @@ -12932,9 +13113,9 @@ "optional": true }, "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true, "optional": true } @@ -13102,24 +13283,6 @@ "mkdirp": "~0.5.1", "sax": "~1.2.1", "whet.extend": "~0.9.9" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true - }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha512-eIlkGty7HGmntbV6P/ZlAsoncFLGsNoM27lkTzS+oneY/EiNhj+geqD9ezg/ip+SW6Var0BJU2JtV0vEUZpWVQ==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" - } - } } }, "svgpath": { @@ -13678,9 +13841,9 @@ "dev": true }, "underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", "dev": true }, "union-value": { @@ -13969,7 +14132,7 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, "vendors": { @@ -13978,6 +14141,31 @@ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", "dev": true }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + } + } + }, "vinyl": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", @@ -14307,31 +14495,15 @@ } }, "webpack-hot-middleware": { - "version": "2.26.1", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz", - "integrity": "sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.12.1.tgz", + "integrity": "sha1-Qlf5ZeaKa4HaW93b1h+J+pB170w=", "dev": true, "requires": { - "ansi-html-community": "0.0.8", - "html-entities": "^2.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } + "ansi-html": "0.0.5", + "html-entities": "^1.2.0", + "querystring": "^0.2.0", + "strip-ansi": "^3.0.0" } }, "weinre": { @@ -14343,14 +14515,6 @@ "express": "2.5.x", "nopt": "3.0.x", "underscore": "1.7.x" - }, - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha512-cp0oQQyZhUM1kpJDLdGO1jPZHgS/MpzoWYfe9+CM2h/QGDZlqwT2T3YGukuBdaNJ/CAPoeyAZRRHz8JFo176vA==", - "dev": true - } } }, "whatwg-fetch": { @@ -14395,9 +14559,9 @@ "dev": true }, "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wordwrap": { diff --git a/package.json b/package.json index 970e23b1..efcb531e 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "bootstrap-sass": "^3.4.1", "bootstrap-sweetalert": "^1.0.1", "csh-material-bootstrap": "1.0.0", - "datatables.net": "^1.13.11", + "datatables.net": "^1.10.12", "datatables.net-bs": "^1.10.12", "dropzone": "^4.3.0", "enumify": "^1.0.4", @@ -51,7 +51,7 @@ "babel-preset-stage-1": "6.5.0", "browser-sync": "2.13.0", "chai": "3.5.0", - "compression": "^1.7.4", + "compression": "1.6.2", "del": "2.2.1", "eslint-config-google": "^0.6.0", "exports-loader": "^0.6.3", @@ -69,7 +69,7 @@ "gulp-if": "2.0.1", "gulp-imagemin": "3.0.1", "gulp-notify": "2.2.0", - "gulp-nunjucks-render": "^2.2.3", + "gulp-nunjucks-render": "2.0.0", "gulp-rename": "1.2.2", "gulp-rev": "7.1.0", "gulp-rev-napkin": "0.1.0", @@ -95,6 +95,6 @@ "sinon-chai": "2.8.0", "webpack": "1.13.1", "webpack-dev-middleware": "1.6.1", - "webpack-hot-middleware": "^2.26.1" + "webpack-hot-middleware": "2.12.1" } } diff --git a/requirements.in b/requirements.in index 49cd221c..0d554b9a 100644 --- a/requirements.in +++ b/requirements.in @@ -1,9 +1,7 @@ alembic~=1.15.1 astroid~=3.3.9 blinker~=1.4 -boto3==1.35.13 -botocore==1.35.13 -click~=8.1.8 +click~=7.1 csh_ldap>=2.3.1 ddtrace~=3.2.1 Flask~=3.1.0 diff --git a/requirements.txt b/requirements.txt index 44225432..dd17e05d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,17 +19,6 @@ blinker==1.9.0 # -r requirements.in # flask # sentry-sdk -boto3==1.35.13 - # via -r requirements.in -botocore==1.35.13 - # via - # -r requirements.in - # boto3 - # s3transfer -build==1.2.2.post1 - # via pip-tools -bytecode==0.16.1 - # via ddtrace certifi==2022.5.18.1 # via # requests