diff --git a/lms/templates/courses_list.html b/lms/templates/courses_list.html index 7362d9e1cd..f6448050aa 100644 --- a/lms/templates/courses_list.html +++ b/lms/templates/courses_list.html @@ -17,7 +17,7 @@ diff --git a/lms/templates/courseware/courses.html b/lms/templates/courseware/courses.html index b8f7a24dbc..1e0c7e391c 100644 --- a/lms/templates/courseware/courses.html +++ b/lms/templates/courseware/courses.html @@ -66,7 +66,7 @@ diff --git a/openedx/features/journals/api.py b/openedx/features/journals/api.py index a404250f9e..7e2c4fec87 100644 --- a/openedx/features/journals/api.py +++ b/openedx/features/journals/api.py @@ -1,6 +1,7 @@ """ APIs providing support for Journals functionality. """ +from urlparse import urljoin, urlsplit, urlunsplit import logging import hashlib import six @@ -275,20 +276,67 @@ def get_journal_bundles(site, bundle_uuid=''): def get_journals_root_url(): """ - Return the base url used to display Journals + Return the base url for the journals service """ if journals_enabled(): - if configuration_helpers.is_site_configuration_enabled(): - return configuration_helpers.get_configuration_value( - 'JOURNALS_URL_ROOT', - settings.JOURNALS_URL_ROOT - ) - else: - return settings.JOURNALS_URL_ROOT + return configuration_helpers.get_value( + 'JOURNALS_URL_ROOT', + settings.JOURNALS_URL_ROOT + ) else: return None +def get_journals_frontend_url(): + """ + Return the frontend url used to display Journals + """ + if journals_enabled(): + return configuration_helpers.get_value( + 'JOURNALS_FRONTEND_URL', + settings.JOURNALS_FRONTEND_URL + ) + else: + return None + + +def get_journal_about_page_url(about_page_id=0, auth=True): + """ + Return url to journal about page. + If auth=True, the url will redirect through the journals service log in page + which will prevent the "purchase now" button being shown. + If auth=False, the url will point to Journal About Page with purchase button shown + + Arguments: + about_page_id (int): id of Journal About Page as found in Discovery + auth (boolen): authorization flag, if true will force login to journal service + and redirect to last visited page in Journal after login. If false, this method + will return direct url to journal about page. + + Returns: + url (str): url pointing to Journals Service login, w/ a redirect to last visited journal page + or url pointing directly to journal about page. + """ + if not auth: + return urljoin(get_journals_frontend_url(), '{id}/about'.format(id=about_page_id)) + + # by providing just the about_page_id in the url, the user will be redirected + # to the last page viewed after logging in + about_page_url = urljoin(get_journals_frontend_url(), '{id}'.format(id=about_page_id)) + login_url = urljoin(get_journals_root_url(), 'require_auth') + query = 'forward={next_url}'.format(next_url=about_page_url) + + split_url = urlsplit(login_url) + url = urlunsplit(( + split_url.scheme, + split_url.netloc, + split_url.path, + query, + split_url.fragment, + )) + return url + + def get_journals_context(request): """ Return dict of Journal context information for a given request @@ -299,12 +347,10 @@ def get_journals_context(request): Returns: dict containing the following information: dict['journals'] - list of Journals available for purchase - dict['journals_root_url'] - root url for Journals service dict['journal_bundles'] - list of JournalBundles available for purchase """ journal_info = {} journal_info['journals'] = get_journals(request.site) - journal_info['journals_root_url'] = get_journals_root_url() journal_info['journal_bundles'] = get_journal_bundles(request.site) return journal_info diff --git a/openedx/features/journals/settings/aws.py b/openedx/features/journals/settings/aws.py index ccb6532c57..db5debfe37 100644 --- a/openedx/features/journals/settings/aws.py +++ b/openedx/features/journals/settings/aws.py @@ -6,6 +6,7 @@ def plugin_settings(settings): Settings for AWS/Production """ settings.JOURNALS_URL_ROOT = settings.ENV_TOKENS.get('JOURNALS_URL_ROOT', settings.JOURNALS_URL_ROOT) + settings.JOURNALS_FRONTEND_URL = settings.ENV_TOKENS.get('JOURNALS_FRONTEND_URL', settings.JOURNALS_FRONTEND_URL) settings.JOURNALS_API_URL = settings.ENV_TOKENS.get('JOURNALS_API_URL', settings.JOURNALS_API_URL) settings.COURSE_CATALOG_URL_BASE = settings.ENV_TOKENS.get( 'COURSE_CATALOG_URL_BASE', settings.COURSE_CATALOG_URL_BASE) diff --git a/openedx/features/journals/settings/common.py b/openedx/features/journals/settings/common.py index c3153eb909..63a848a7fb 100644 --- a/openedx/features/journals/settings/common.py +++ b/openedx/features/journals/settings/common.py @@ -6,6 +6,7 @@ def plugin_settings(settings): Common settings for Journals """ settings.JOURNALS_URL_ROOT = None + settings.JOURNALS_FRONTEND_URL = None settings.JOURNALS_API_URL = None settings.FEATURES['JOURNALS_ENABLED'] = False settings.COURSE_CATALOG_URL_BASE = None diff --git a/openedx/features/journals/settings/devstack.py b/openedx/features/journals/settings/devstack.py index 89d6c201fd..107140e226 100644 --- a/openedx/features/journals/settings/devstack.py +++ b/openedx/features/journals/settings/devstack.py @@ -6,6 +6,7 @@ def plugin_settings(settings): Devstack settings for Journals """ settings.JOURNALS_URL_ROOT = 'http://localhost:18606' + settings.JOURNALS_FRONTEND_URL = 'http://localhost:1991' settings.JOURNALS_API_URL = 'http://journals.app:18606/api/v1/' settings.FEATURES['JOURNALS_ENABLED'] = True settings.COURSE_CATALOG_URL_BASE = 'http://edx.devstack.discovery:18381' diff --git a/openedx/features/journals/templates/journals/bundle_about.html b/openedx/features/journals/templates/journals/bundle_about.html index 4426a289a3..5cc807c28b 100644 --- a/openedx/features/journals/templates/journals/bundle_about.html +++ b/openedx/features/journals/templates/journals/bundle_about.html @@ -12,6 +12,7 @@ from mako import exceptions from urlparse import urljoin from openedx.core.djangolib.markup import HTML, Text +from openedx.features.journals.api import get_journal_about_page_url %> <%namespace name='static' file='../static_content.html'/> @@ -128,6 +129,10 @@ from openedx.core.djangolib.markup import HTML, Text % endfor % for journal in bundle.get('journals'): + <% + about_page_id = journal['about_page_id'] + about_page_url = get_journal_about_page_url(about_page_id, False) + %>

@@ -143,7 +148,7 @@ from openedx.core.djangolib.markup import HTML, Text

- ${journal['title']} + ${journal['title']}
${journal['short_description'] or ''}
@@ -154,7 +159,7 @@ from openedx.core.djangolib.markup import HTML, Text )}
- ${_("View Journal")} + ${_("View Journal")}
diff --git a/openedx/features/journals/templates/journals/journal_card.html b/openedx/features/journals/templates/journals/journal_card.html index c6ed962701..7b65de3c56 100644 --- a/openedx/features/journals/templates/journals/journal_card.html +++ b/openedx/features/journals/templates/journals/journal_card.html @@ -4,10 +4,15 @@ from django.utils.translation import ungettext, ugettext as _ from django.core.urlresolvers import reverse from six import text_type from urlparse import urljoin +from openedx.features.journals.api import get_journal_about_page_url %> -<%page args="journal, journals_root_url" expression_filter="h"/> -
- +<%page args="journal" expression_filter="h"/> +<% + about_page_id = journal.get('about_page_id') + about_page_url = get_journal_about_page_url(about_page_id, False) +%> +
+
${journal.get('title')} diff --git a/openedx/features/journals/templates/journals/learner_dashboard/journal_dashboard.html b/openedx/features/journals/templates/journals/learner_dashboard/journal_dashboard.html index fef7c1f78e..7584bf5213 100644 --- a/openedx/features/journals/templates/journals/learner_dashboard/journal_dashboard.html +++ b/openedx/features/journals/templates/journals/learner_dashboard/journal_dashboard.html @@ -6,7 +6,8 @@ from django.core.urlresolvers import reverse from django.utils.translation import ugettext as _ from openedx.core.djangolib.js_utils import dump_js_escaped_json, js_escaped_string -from openedx.features.journals.views.learner_dashboard import get_journal_about_page_url, format_expiration_date, has_access_expired +from openedx.features.journals.views.learner_dashboard import format_expiration_date, has_access_expired +from openedx.features.journals.api import get_journal_about_page_url %> <%block name="pagetitle">${_("Journal Dashboard")} @@ -57,7 +58,7 @@ banner.showMessage(${redirect_message | n, dump_js_escaped_json})
    % for journal in journals: <% - about_page_url = get_journal_about_page_url(slug=journal['journal']['journalaboutpage']['slug']) + about_page_url = get_journal_about_page_url(about_page_id=journal['journal']['journalaboutpage']['id']) formatted_expiration_date = format_expiration_date(journal['expiration_date']) access_expired = has_access_expired(journal['expiration_date']) %> diff --git a/openedx/features/journals/tests/utils.py b/openedx/features/journals/tests/utils.py index 7a8533c05e..52a8bb5036 100644 --- a/openedx/features/journals/tests/utils.py +++ b/openedx/features/journals/tests/utils.py @@ -37,7 +37,7 @@ def get_mocked_journal_access(): "name": "dummy-name1", "organization": "edx", "journalaboutpage": { - "slug": "dummy-slug1", + "id": "5", "card_image_absolute_url": "dummy-url" } } @@ -49,7 +49,7 @@ def get_mocked_journal_access(): "name": "dummy-name2", "organization": "edx", "journalaboutpage": { - "slug": "dummy-slug2", + "id": "5", "card_image_absolute_url": "dummy-url" } } @@ -71,7 +71,7 @@ def get_mocked_journal_bundles(): "title": "dummy-title", "sku": "ASZ1GZ", "card_image_url": "dummy-url", - "slug": "dummy-title", + "about_page_id": "5", "access_length": "8 weeks", "short_description": "dummy short description" } @@ -111,14 +111,14 @@ def get_mocked_journals(): { "title": "dummy-title1", "card_image_url": "dummy-url1", - "slug": "dummy-title1", + "about_page_id": "5", "access_length": 60, "organization": "edx" }, { "title": "dummy-title2", "card_image_url": "dummy-url2", - "slug": "dummy-title2", + "about_page_id": "5", "access_length": 60, "organization": "edx" } diff --git a/openedx/features/journals/views/learner_dashboard.py b/openedx/features/journals/views/learner_dashboard.py index 3614953ef4..c0313306e7 100644 --- a/openedx/features/journals/views/learner_dashboard.py +++ b/openedx/features/journals/views/learner_dashboard.py @@ -1,14 +1,15 @@ """ Journal Tab of Learner Dashboard views """ from datetime import datetime, time import logging -from urlparse import urljoin, urlsplit, urlunsplit -from django.conf import settings from django.http import Http404 from edxmako.shortcuts import render_to_response from openedx.core.djangoapps.programs.models import ProgramsApiConfig -from openedx.features.journals.api import fetch_journal_access, journals_enabled +from openedx.features.journals.api import ( + fetch_journal_access, + journals_enabled, +) logger = logging.getLogger(__name__) @@ -37,34 +38,6 @@ def journal_listing(request): return render_to_response('journals/learner_dashboard/journal_dashboard.html', context) -def get_journal_about_page_url(slug=''): - """ - Return url to journal about page. - The url will redirect through the journals service log in page. Otherwise the user may be - sent to a page to purchase the book - and that is an awkward user experience. - - Arguments: - slug (str): unique string associated with each journal about page - - Returns: - url (str): url points to Journals Service login, w/ a redirect to journal about page - """ - login_url = urljoin(settings.JOURNALS_URL_ROOT, 'login') - - about_page_url = urljoin(settings.JOURNALS_URL_ROOT, slug) - query = 'next={next_url}'.format(next_url=about_page_url) - - split_url = urlsplit(login_url) - url = urlunsplit(( - split_url.scheme, - split_url.netloc, - split_url.path, - query, - split_url.fragment, - )) - return url - - def format_expiration_date(expiration_date): """ Formats Expiration Date diff --git a/package-lock.json b/package-lock.json index 021dc35cfa..9c0e43ace3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -214,7 +214,7 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.3", @@ -400,7 +400,7 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=" + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "are-we-there-yet": { "version": "1.1.4", @@ -468,7 +468,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-union": { "version": "3.1.0", @@ -1482,7 +1482,7 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=" + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "backbone": { "version": "1.3.3", @@ -1687,7 +1687,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=" + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, "body-parser": { "version": "1.18.2", @@ -1850,7 +1850,7 @@ "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "requires": { "pako": "1.0.6" } @@ -2141,7 +2141,7 @@ "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.1" @@ -2162,7 +2162,7 @@ "clap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "requires": { "chalk": "1.1.3" }, @@ -2360,7 +2360,7 @@ "color-convert": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "requires": { "color-name": "1.1.3" } @@ -2527,7 +2527,7 @@ "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, "convert-source-map": { @@ -2567,7 +2567,7 @@ "cosmiconfig": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz", - "integrity": "sha1-ZAqUv5hH8yGABAPNJzr2BmXHM5c=", + "integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==", "dev": true, "requires": { "is-directory": "0.3.1", @@ -2579,7 +2579,7 @@ "esprima": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, "js-yaml": { @@ -2666,7 +2666,7 @@ "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { "browserify-cipher": "1.0.0", "browserify-sign": "4.0.4", @@ -2912,7 +2912,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } @@ -3390,7 +3390,7 @@ "emoji-regex": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha1-m66pKbFVVlwR6kHGYm6qZc75ksI=", + "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", "dev": true }, "emojis-list": { @@ -3919,7 +3919,7 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", @@ -3977,7 +3977,7 @@ "eslint-config-airbnb-base": { "version": "11.3.2", "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz", - "integrity": "sha1-hwOxGr48iKx+wrdFt/31LgCuaAo=", + "integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==", "dev": true, "requires": { "eslint-restricted-globals": "0.1.1" @@ -4275,7 +4275,7 @@ "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { "md5.js": "1.3.4", "safe-buffer": "5.1.1" @@ -4482,7 +4482,7 @@ "async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "requires": { "lodash": "4.17.5" } @@ -4859,7 +4859,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { "version": "1.1.0", @@ -4947,7 +4947,7 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -4977,7 +4977,7 @@ "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=" + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" }, "globby": { "version": "7.1.1", @@ -5525,7 +5525,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -5537,7 +5537,7 @@ "ignore": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha1-YSKJv7PCIOGGpYEYYY1b6MG6sCE=", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", "dev": true }, "import-local": { @@ -5806,7 +5806,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-builtin-module": { "version": "1.0.0", @@ -6003,7 +6003,7 @@ "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { "isobject": "3.0.1" } @@ -8163,7 +8163,7 @@ "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { "safe-buffer": "5.1.1" } @@ -8308,7 +8308,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "1.1.11" } @@ -8494,7 +8494,7 @@ "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { "encoding": "0.1.12", "is-stream": "1.1.0" @@ -8536,7 +8536,7 @@ "node-libs-browser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "requires": { "assert": "1.4.1", "browserify-zlib": "0.2.0", @@ -8707,7 +8707,7 @@ "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "requires": { "hosted-git-info": "2.5.0", "is-builtin-module": "1.0.0", @@ -9135,7 +9135,7 @@ "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg=" + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" }, "parse-asn1": { "version": "5.1.0", @@ -9288,7 +9288,7 @@ "pbkdf2": { "version": "3.0.14", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha1-o14TxkeZsGzhUyD0WcIw5o5zut4=", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", "requires": { "create-hash": "1.1.3", "create-hmac": "1.1.6", @@ -9722,7 +9722,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -9810,7 +9810,7 @@ "postcss-reporter": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz", - "integrity": "sha1-oUF3/RNCgp0pFlPyeG79ZxEDMsM=", + "integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==", "dev": true, "requires": { "chalk": "2.3.1", @@ -9833,7 +9833,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -9896,7 +9896,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -10012,7 +10012,7 @@ "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=" + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" }, "process": { "version": "0.11.10", @@ -10033,7 +10033,7 @@ "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { "asap": "2.0.6" } @@ -10168,7 +10168,7 @@ "randomatic": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "requires": { "is-number": "3.0.0", "kind-of": "4.0.0" @@ -10504,7 +10504,7 @@ "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { "safe-buffer": "5.1.1" } @@ -10584,7 +10584,7 @@ "redux": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha1-BrcxIyFZAdJdBlvjQusCa8HIU3s=", + "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", "requires": { "lodash": "4.17.5", "lodash-es": "4.17.6", @@ -10620,7 +10620,7 @@ "regenerator-transform": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "requires": { "babel-runtime": "6.26.0", "babel-types": "6.26.0", @@ -10964,7 +10964,7 @@ "rtlcss": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.2.1.tgz", - "integrity": "sha1-+FN+QVUggWawXhiYAhMZNvzv0p4=", + "integrity": "sha512-JjQ5DlrmwiItAjlmhoxrJq5ihgZcE0wMFxt7S17bIrt4Lw0WwKKFk+viRhvodB/0falyG/5fiO043ZDh6/aqTw==", "requires": { "chalk": "2.3.1", "findup": "0.1.5", @@ -10986,7 +10986,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -11008,7 +11008,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "safe-regex": { "version": "1.1.0", @@ -11340,7 +11340,7 @@ "sass-loader": { "version": "6.0.6", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz", - "integrity": "sha1-6dXmwfFV+qMqSybXqbcQfCJeQPk=", + "integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==", "requires": { "async": "2.6.0", "clone-deep": "0.3.0", @@ -11352,7 +11352,7 @@ "async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "requires": { "lodash": "4.17.5" } @@ -11614,7 +11614,7 @@ "slice-ansi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha1-BE8aSdiEL/MHqta1Be0Xi9lQE00=", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0" @@ -11890,7 +11890,7 @@ "source-list-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU=" + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" }, "source-map": { "version": "0.5.7", @@ -11960,7 +11960,7 @@ "specificity": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.3.2.tgz", - "integrity": "sha1-meZRHs7vD42bV5JJN6rCyxPRPEI=", + "integrity": "sha512-Nc/QN/A425Qog7j9aHmwOrlwX2e7pNI47ciwxwy4jOlvbbMHkNNJchit+FX+UjF3IAdiaaV5BKeWuDUnws6G1A==", "dev": true }, "split-string": { @@ -12118,7 +12118,7 @@ "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { "safe-buffer": "5.1.1" } @@ -12336,7 +12336,7 @@ "style-loader": { "version": "0.18.2", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz", - "integrity": "sha1-zDFFmvvNbYC3Ig7lSykan9Zv9es=", + "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==", "requires": { "loader-utils": "1.1.0", "schema-utils": "0.3.0" @@ -12447,7 +12447,7 @@ "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { "ms": "2.0.0" @@ -12602,13 +12602,13 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", @@ -12653,7 +12653,7 @@ "stylelint-config-recommended-scss": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-2.0.0.tgz", - "integrity": "sha1-P0SzOK+zv1tr2e663UaO7ydxOSI=", + "integrity": "sha512-DUIW3daRl5EAyU4ZR6xfPa+bqV5wDccS7X1je6Enes9edpbmWUBR/5XLfDPnjMJgqOe2QwqwaE/qnG4lXID9rg==", "dev": true, "requires": { "stylelint-config-recommended": "1.0.0" @@ -12662,7 +12662,7 @@ "stylelint-config-standard": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-17.0.0.tgz", - "integrity": "sha1-QhA6CQBU7io93p7K7VXl1NnQWfw=", + "integrity": "sha512-G8jMZ0KsaVH7leur9XLZVhwOBHZ2vdbuJV8Bgy0ta7/PpBhEHo6fjVDaNchyCGXB5sRcWVq6O9rEU/MvY9cQDQ==", "dev": true, "requires": { "stylelint-config-recommended": "1.0.0" @@ -12671,7 +12671,7 @@ "stylelint-formatter-pretty": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stylelint-formatter-pretty/-/stylelint-formatter-pretty-1.0.3.tgz", - "integrity": "sha1-prQ8PzoTIGvft3fQ2ozvxsdsNsM=", + "integrity": "sha512-Jg39kL6kkjUrdKIiHwwz/fbElcF5dOS48ZhvGrEJeWijUbmY1yudclfXv9H61eBqKKu0E33nfez2r0G4EvPtFA==", "dev": true, "requires": { "ansi-escapes": "2.0.0", @@ -12730,7 +12730,7 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", @@ -12785,7 +12785,7 @@ "sugarss": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-1.0.1.tgz", - "integrity": "sha1-voJtkAPg8kdzX5I2XcP9fxuunkQ=", + "integrity": "sha512-3qgLZytikQQEVn1/FrhY7B68gPUUGY3R1Q1vTiD5xT+Ti1DP/8iZuwFet9ONs5+bmL8pZoDQ6JrQHVgrNlK6mA==", "dev": true, "requires": { "postcss": "6.0.19" @@ -12805,7 +12805,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -13276,7 +13276,7 @@ "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { "safe-buffer": "5.1.1" } @@ -13299,7 +13299,7 @@ "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { "os-tmpdir": "1.0.2" @@ -14228,7 +14228,7 @@ "webpack-merge": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.1.tgz", - "integrity": "sha1-8Rl6Cpc+acb77rbWWCGaqMDBNVU=", + "integrity": "sha512-geQsZ86YkXOVOjvPC5yv3JSNnL6/X3Kzh935AQ/gJNEYXEfJDQFu/sdFuktS9OW2JcH/SJec8TGfRdrpHshH7A==", "requires": { "lodash": "4.17.5" } @@ -14245,7 +14245,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -14310,7 +14310,7 @@ "wide-align": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha1-Vx4PGwYEY268DfwhsDObvjE0FxA=", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "requires": { "string-width": "1.0.2" } @@ -14396,7 +14396,7 @@ "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dev": true, "requires": { "sax": "1.2.4",