@@ -58,8 +66,12 @@ class AutomaticEmailEvent extends React.PureComponent {
}
}
+AutomaticEmailEvent.defaultProps = {
+ premium: false,
+};
+
AutomaticEmailEvent.propTypes = {
- premium: PropTypes.bool.isRequired,
+ premium: PropTypes.bool,
eventsConfigurator: PropTypes.func.isRequired,
event: PropTypes.shape({
slug: PropTypes.string.isRequired,
diff --git a/assets/js/src/newsletters/types/automatic_emails/events_list.jsx b/assets/js/src/newsletters/types/automatic_emails/events_list.jsx
index 6093359875..03c45e49c4 100644
--- a/assets/js/src/newsletters/types/automatic_emails/events_list.jsx
+++ b/assets/js/src/newsletters/types/automatic_emails/events_list.jsx
@@ -25,7 +25,7 @@ class AutomaticEmailEventsList extends React.Component {
key={index}
eventsConfigurator={this.eventsConfigurator}
/>
- )
+ )
);
return (
@@ -42,7 +42,7 @@ class AutomaticEmailEventsList extends React.Component {
return (
- {heading} ({MailPoet.I18n.t('beta').toLowerCase()})
+ {heading}
@@ -54,17 +54,18 @@ class AutomaticEmailEventsList extends React.Component {
}
AutomaticEmailEventsList.propTypes = {
-
route: PropTypes.shape({
data: PropTypes.shape({
- email: PropTypes.string.isRequired,
+ email: PropTypes.shape({
+ title: PropTypes.string.isRequired,
+ slug: PropTypes.string.isRequired,
+ premium: PropTypes.bool,
+ }).isRequired,
}).isRequired,
}).isRequired,
-
router: PropTypes.shape({
push: PropTypes.func.isRequired,
}).isRequired,
-
};
module.exports = AutomaticEmailEventsList;
diff --git a/assets/js/src/newsletters/types/welcome/scheduling.jsx b/assets/js/src/newsletters/types/welcome/scheduling.jsx
index 17d9b0d4fd..764d25fcd8 100644
--- a/assets/js/src/newsletters/types/welcome/scheduling.jsx
+++ b/assets/js/src/newsletters/types/welcome/scheduling.jsx
@@ -111,9 +111,9 @@ const WelcomeScheduling = React.createClass({
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
- response.errors.map(error => error.message),
- { scroll: true }
- );
+ response.errors.map(error => error.message),
+ { scroll: true }
+ );
}
});
},
diff --git a/assets/js/src/newsletters/types/woocommerce.jsx b/assets/js/src/newsletters/types/woocommerce.jsx
deleted file mode 100644
index 8ad71f13a4..0000000000
--- a/assets/js/src/newsletters/types/woocommerce.jsx
+++ /dev/null
@@ -1,148 +0,0 @@
-import React from 'react';
-import MailPoet from 'mailpoet';
-import Breadcrumb from 'newsletters/breadcrumb.jsx';
-
-const WooCommerceAutomaticEmail = React.createClass({
- contextTypes: {
- router: React.PropTypes.object.isRequired,
- },
- setupNewsletter: function setupNewsletter(type) {
- if (type !== undefined) {
- this.context.router.push(`/new/${type}`);
- MailPoet.trackEvent('Emails > Type selected', {
- 'MailPoet Free version': window.mailpoet_version,
- 'Email type': type,
- });
- }
- },
- createNewsletter: function createNewsletter(type) {
- MailPoet.trackEvent('Emails > Type selected', {
- 'MailPoet Free version': window.mailpoet_version,
- 'Email type': type,
- });
- MailPoet.Ajax.post({
- api_version: window.mailpoet_api_version,
- endpoint: 'newsletters',
- action: 'create',
- data: {
- type,
- subject: MailPoet.I18n.t('draftNewsletterTitle'),
- },
- }).done((response) => {
- this.context.router.push(`/template/${response.data.id}`);
- }).fail((response) => {
- if (response.errors.length > 0) {
- MailPoet.Notice.error(
- response.errors.map(error => error.message),
- { scroll: true }
- );
- }
- });
- },
- render: function render() {
- const types = [
- {
- id: 'woocommerce',
- title: MailPoet.I18n.t('wooCommerceEventAbandonedCartTitle'),
- description: MailPoet.I18n.t('wooCommerceEventAbandonedCartDescription'),
- badge: {
- text: MailPoet.I18n.t('wooCommerceEventAbandonedCartBadge'),
- style: 'red',
- },
- },
- {
- id: 'woocommerce',
- title: MailPoet.I18n.t('wooCommerceEventFirstPurchaseTitle'),
- description: MailPoet.I18n.t('wooCommerceEventFirstPurchaseDescription'),
- badge: {
- text: MailPoet.I18n.t('wooCommerceEventFirstPurchaseBadge'),
- style: 'yellow',
- },
- },
- {
- id: 'woocommerce',
- title: MailPoet.I18n.t('wooCommerceEventPurchasedProductTitle'),
- description: MailPoet.I18n.t('wooCommerceEventPurchasedProductDescription'),
- },
- {
- id: 'woocommerce',
- title: MailPoet.I18n.t('wooCommerceEventPurchasedInCategoryTitle'),
- description: MailPoet.I18n.t('wooCommerceEventPurchasedInCategoryDescription'),
- soon: true,
- },
- {
- id: 'woocommerce',
- title: MailPoet.I18n.t('wooCommerceEventBigSpenderTitle'),
- description: MailPoet.I18n.t('wooCommerceEventBigSpenderDescription'),
- soon: true,
- badge: {
- text: MailPoet.I18n.t('wooCommerceEventSmartToHaveBadge'),
- style: 'teal',
- },
- },
- ];
-
- const steps = [
- {
- name: 'type',
- label: MailPoet.I18n.t('selectType'),
- link: '/new',
- },
- {
- name: 'events',
- label: MailPoet.I18n.t('wooCommerceBreadcrumbsEvents'),
- },
- {
- name: 'conditions',
- label: MailPoet.I18n.t('wooCommerceBreadcrumbsConditions'),
- },
- {
- name: 'template',
- label: MailPoet.I18n.t('template'),
- },
- {
- name: 'editor',
- label: MailPoet.I18n.t('designer'),
- },
- {
- name: 'send',
- label: MailPoet.I18n.t('send'),
- },
- ];
-
- return (
-
-
{MailPoet.I18n.t('wooCommerceSelectEventHeading')}
-
-
-
-
- {types.map(type => (
- -
-
-
- {type.thumbnailImage ?

: null}
-
-
-
-
{type.title} {type.soon ? `(${MailPoet.I18n.t('wooCommerceEventTitleSoon')})` : ''}
- {type.badge ? {type.badge.text} : ''}
-
-
{type.description}
-
-
-
-
-
- ), this)}
-
-
- );
- },
-});
-
-module.exports = WooCommerceAutomaticEmail;
diff --git a/assets/js/src/num.js b/assets/js/src/num.js
index a26a0cfacd..ef55cf7186 100644
--- a/assets/js/src/num.js
+++ b/assets/js/src/num.js
@@ -3,7 +3,7 @@ define('num',
'mailpoet'
], function ( // eslint-disable-line func-names
mp
-) {
+ ) {
'use strict';
var MailPoet = mp;
@@ -12,10 +12,10 @@ define('num',
var precision = precisionOpts || 0;
var factor = Math.pow(10, precision);
return (Math.round(num * factor) / factor)
- .toLocaleString(
- undefined,
- { minimumFractionDigits: precision, maximumFractionDigits: precision }
- );
+ .toLocaleString(
+ undefined,
+ { minimumFractionDigits: precision, maximumFractionDigits: precision }
+ );
}
};
});
diff --git a/assets/js/src/public.js b/assets/js/src/public.js
index f82089f7c0..787da900b6 100644
--- a/assets/js/src/public.js
+++ b/assets/js/src/public.js
@@ -64,43 +64,43 @@ function ( // eslint-disable-line func-names
data: formData.data
}).fail(function (response) { // eslint-disable-line func-names
form.find('.mailpoet_validate_error').html(
- response.errors.map(function (error) { // eslint-disable-line func-names
- return error.message;
- }).join('
')
- ).show();
+ response.errors.map(function (error) { // eslint-disable-line func-names
+ return error.message;
+ }).join('
')
+ ).show();
}).done(function (response) { // eslint-disable-line func-names
if (window.grecaptcha && formData.recaptcha) {
window.grecaptcha.reset(formData.recaptcha);
}
return response;
}).done(function (response) { // eslint-disable-line func-names
- // successfully subscribed
+ // successfully subscribed
if (
- response.meta !== undefined
+ response.meta !== undefined
&& response.meta.redirect_url !== undefined
- ) {
- // go to page
+ ) {
+ // go to page
window.location.href = response.meta.redirect_url;
} else {
- // display success message
+ // display success message
form.find('.mailpoet_validate_success').show();
}
- // reset form
+ // reset form
form.trigger('reset');
- // reset validation
+ // reset validation
parsley.reset();
// reset captcha
if (window.grecaptcha && formData.recaptcha) {
window.grecaptcha.reset(formData.recaptcha);
}
- // resize iframe
+ // resize iframe
if (
- window.frameElement !== null
+ window.frameElement !== null
&& MailPoet !== undefined
&& MailPoet.Iframe
- ) {
+ ) {
MailPoet.Iframe.autoSize(window.frameElement);
}
});
diff --git a/assets/js/src/segments/list.jsx b/assets/js/src/segments/list.jsx
index 8eca51ebfe..32856d153c 100644
--- a/assets/js/src/segments/list.jsx
+++ b/assets/js/src/segments/list.jsx
@@ -118,14 +118,14 @@ const itemActions = [
},
}).done((response) => {
MailPoet.Notice.success(
- MailPoet.I18n.t('listDuplicated').replace('%$1s', response.data.name)
- );
+ MailPoet.I18n.t('listDuplicated').replace('%$1s', response.data.name)
+ );
refresh();
}).fail((response) => {
MailPoet.Notice.error(
- response.errors.map(error => error.message),
- { scroll: true }
- );
+ response.errors.map(error => error.message),
+ { scroll: true }
+ );
}),
display: function display(segment) {
return (segment.type !== 'wp_users');
diff --git a/assets/js/src/settings/tabs.js b/assets/js/src/settings/tabs.js
index efba9f17a0..c40fcbfde1 100644
--- a/assets/js/src/settings/tabs.js
+++ b/assets/js/src/settings/tabs.js
@@ -39,8 +39,8 @@ define(
// toggle SPF (hidden if the sending method is MailPoet)
jQuery('#mailpoet_mta_spf')[
(group === 'mailpoet')
- ? 'hide'
- : 'show'
+ ? 'hide'
+ : 'show'
]();
// hide sending methods
diff --git a/assets/js/src/subscribers/form.jsx b/assets/js/src/subscribers/form.jsx
index 063742b08c..0a4e2ff258 100644
--- a/assets/js/src/subscribers/form.jsx
+++ b/assets/js/src/subscribers/form.jsx
@@ -149,15 +149,15 @@ function beforeFormContent(subscriber) {
return (
{ ReactStringReplace(
- MailPoet.I18n.t('WPUserEditNotice'),
- /\[link\](.*?)\[\/link\]/g,
- (match, i) => (
- { match }
- )
+ MailPoet.I18n.t('WPUserEditNotice'),
+ /\[link\](.*?)\[\/link\]/g,
+ (match, i) => (
+ { match }
)
+ )
}
);
diff --git a/assets/js/src/subscribers/importExport/export.js b/assets/js/src/subscribers/importExport/export.js
index 1266609c2b..e1f017411c 100644
--- a/assets/js/src/subscribers/importExport/export.js
+++ b/assets/js/src/subscribers/importExport/export.js
@@ -5,149 +5,149 @@ define(
'mailpoet',
'handlebars'
],
- function exportSubscribers(
- _,
- jQuery,
- MailPoet,
- Handlebars
- ) {
- if (!jQuery('#mailpoet_subscribers_export').length) {
- return;
- }
- jQuery(document).ready(function documentReady() {
- var segmentsContainerElement;
- var subscriberFieldsContainerElement;
- var nextStepButton;
- var renderSegmentsAndFields;
- var subscribersExportTemplate;
- if (!window.exportData.segments) {
- return;
- }
- subscribersExportTemplate =
+ function exportSubscribers(
+ _,
+ jQuery,
+ MailPoet,
+ Handlebars
+ ) {
+ if (!jQuery('#mailpoet_subscribers_export').length) {
+ return;
+ }
+ jQuery(document).ready(function documentReady() {
+ var segmentsContainerElement;
+ var subscriberFieldsContainerElement;
+ var nextStepButton;
+ var renderSegmentsAndFields;
+ var subscribersExportTemplate;
+ if (!window.exportData.segments) {
+ return;
+ }
+ subscribersExportTemplate =
Handlebars.compile(jQuery('#mailpoet_subscribers_export_template').html());
- // render template
- jQuery('#mailpoet_subscribers_export > div.inside').html(subscribersExportTemplate(window.exportData));
+ // render template
+ jQuery('#mailpoet_subscribers_export > div.inside').html(subscribersExportTemplate(window.exportData));
- function toggleNextStepButton(condition) {
- var disabled = 'button-disabled';
- if (condition === 'on') {
- nextStepButton.removeClass(disabled);
- } else {
- nextStepButton.addClass(disabled);
- }
- }
+ function toggleNextStepButton(condition) {
+ var disabled = 'button-disabled';
+ if (condition === 'on') {
+ nextStepButton.removeClass(disabled);
+ } else {
+ nextStepButton.addClass(disabled);
+ }
+ }
- // define reusable variables
- segmentsContainerElement = jQuery('#export_lists');
- subscriberFieldsContainerElement = jQuery('#export_columns');
- nextStepButton = jQuery('a.mailpoet_export_process');
- renderSegmentsAndFields = function renderSegmentsFields(container, data) {
- if (container.data('select2')) {
- container
- .html('')
- .select2('destroy');
- }
- container
- .select2({
- data: data,
- width: '20em',
- templateResult: function templateResult(item) {
- return (item.subscriberCount > 0)
- ? item.name + ' (' + parseInt(item.subscriberCount, 10).toLocaleString() + ')'
- : item.name;
- },
- templateSelection: function templateSelection(item) {
- return (item.subscriberCount > 0)
- ? item.name + ' (' + parseInt(item.subscriberCount, 10).toLocaleString() + ')'
- : item.name;
- }
- })
- .on('select2:selecting', function onSelect2Selecting(selectEvent) {
- var selectElement = this;
- var selectedOptionId = selectEvent.params.args.data.id;
- var fieldsToExclude = [
- 'select',
- 'deselect'
- ];
- var allOptions;
- if (_.contains(fieldsToExclude, selectedOptionId)) {
- selectEvent.preventDefault();
- if (selectedOptionId === 'deselect') {
- jQuery(selectElement).val('').trigger('change');
- } else {
- allOptions = [];
- _.each(container.find('option'), function eachOption(field) {
- if (!_.contains(fieldsToExclude, field.value)) {
- allOptions.push(field.value);
- }
- });
- jQuery(selectElement).val(allOptions).trigger('change');
- }
- jQuery(selectElement).select2('close');
- }
- })
- .on('change', function onCHange() {
- if ((window.exportData.segments && segmentsContainerElement.select2('data').length && subscriberFieldsContainerElement.select2('data').length)
+ // define reusable variables
+ segmentsContainerElement = jQuery('#export_lists');
+ subscriberFieldsContainerElement = jQuery('#export_columns');
+ nextStepButton = jQuery('a.mailpoet_export_process');
+ renderSegmentsAndFields = function renderSegmentsFields(container, data) {
+ if (container.data('select2')) {
+ container
+ .html('')
+ .select2('destroy');
+ }
+ container
+ .select2({
+ data: data,
+ width: '20em',
+ templateResult: function templateResult(item) {
+ return (item.subscriberCount > 0)
+ ? item.name + ' (' + parseInt(item.subscriberCount, 10).toLocaleString() + ')'
+ : item.name;
+ },
+ templateSelection: function templateSelection(item) {
+ return (item.subscriberCount > 0)
+ ? item.name + ' (' + parseInt(item.subscriberCount, 10).toLocaleString() + ')'
+ : item.name;
+ }
+ })
+ .on('select2:selecting', function onSelect2Selecting(selectEvent) {
+ var selectElement = this;
+ var selectedOptionId = selectEvent.params.args.data.id;
+ var fieldsToExclude = [
+ 'select',
+ 'deselect'
+ ];
+ var allOptions;
+ if (_.contains(fieldsToExclude, selectedOptionId)) {
+ selectEvent.preventDefault();
+ if (selectedOptionId === 'deselect') {
+ jQuery(selectElement).val('').trigger('change');
+ } else {
+ allOptions = [];
+ _.each(container.find('option'), function eachOption(field) {
+ if (!_.contains(fieldsToExclude, field.value)) {
+ allOptions.push(field.value);
+ }
+ });
+ jQuery(selectElement).val(allOptions).trigger('change');
+ }
+ jQuery(selectElement).select2('close');
+ }
+ })
+ .on('change', function onCHange() {
+ if ((window.exportData.segments && segmentsContainerElement.select2('data').length && subscriberFieldsContainerElement.select2('data').length)
||
(!window.exportData.segments && subscriberFieldsContainerElement.select2('data').length)
- ) {
- toggleNextStepButton('on');
- } else {
- toggleNextStepButton('off');
- }
- });
- };
+ ) {
+ toggleNextStepButton('on');
+ } else {
+ toggleNextStepButton('off');
+ }
+ });
+ };
- renderSegmentsAndFields(subscriberFieldsContainerElement, window.subscriberFieldsSelect2);
- renderSegmentsAndFields(segmentsContainerElement, window.segments);
+ renderSegmentsAndFields(subscriberFieldsContainerElement, window.subscriberFieldsSelect2);
+ renderSegmentsAndFields(segmentsContainerElement, window.segments);
- subscriberFieldsContainerElement.val([
- 'email',
- 'first_name',
- 'last_name',
- 'list_status',
- 'global_status'
- ]).trigger('change');
+ subscriberFieldsContainerElement.val([
+ 'email',
+ 'first_name',
+ 'last_name',
+ 'list_status',
+ 'global_status'
+ ]).trigger('change');
- nextStepButton.click(function nextClick() {
- var exportFormat;
- if (jQuery(this).hasClass('button-disabled')) {
- return;
- }
- MailPoet.Modal.loading(true);
- exportFormat = jQuery(':radio[name="option_format"]:checked').val();
- MailPoet.Ajax.post({
- api_version: window.mailpoet_api_version,
- endpoint: 'ImportExport',
- action: 'processExport',
- data: JSON.stringify({
- export_format_option: exportFormat,
- segments: (window.exportData.segments) ? segmentsContainerElement.val() : false,
- subscriber_fields: subscriberFieldsContainerElement.val()
- })
- }).always(function always() {
- MailPoet.Modal.loading(false);
- }).done(function done(response) {
- var resultMessage = MailPoet.I18n.t('exportMessage')
- .replace('%1$s', '
' + parseInt(response.data.totalExported, 133).toLocaleString() + '')
- .replace('[link]', '
')
- .replace('[/link]', '');
- jQuery('#export_result_notice').html('
' + resultMessage + '
').show();
- window.location.href = response.data.exportFileURL;
- MailPoet.trackEvent('Subscribers export completed', {
- 'Total exported': response.data.totalExported,
- 'File Format': exportFormat,
- 'MailPoet Free version': window.mailpoet_version
- });
- }).fail(function fail(response) {
- if (response.errors.length > 0) {
- MailPoet.Notice.error(
+ nextStepButton.click(function nextClick() {
+ var exportFormat;
+ if (jQuery(this).hasClass('button-disabled')) {
+ return;
+ }
+ MailPoet.Modal.loading(true);
+ exportFormat = jQuery(':radio[name="option_format"]:checked').val();
+ MailPoet.Ajax.post({
+ api_version: window.mailpoet_api_version,
+ endpoint: 'ImportExport',
+ action: 'processExport',
+ data: JSON.stringify({
+ export_format_option: exportFormat,
+ segments: (window.exportData.segments) ? segmentsContainerElement.val() : false,
+ subscriber_fields: subscriberFieldsContainerElement.val()
+ })
+ }).always(function always() {
+ MailPoet.Modal.loading(false);
+ }).done(function done(response) {
+ var resultMessage = MailPoet.I18n.t('exportMessage')
+ .replace('%1$s', '
' + parseInt(response.data.totalExported, 133).toLocaleString() + '')
+ .replace('[link]', '
')
+ .replace('[/link]', '');
+ jQuery('#export_result_notice').html('
' + resultMessage + '
').show();
+ window.location.href = response.data.exportFileURL;
+ MailPoet.trackEvent('Subscribers export completed', {
+ 'Total exported': response.data.totalExported,
+ 'File Format': exportFormat,
+ 'MailPoet Free version': window.mailpoet_version
+ });
+ }).fail(function fail(response) {
+ if (response.errors.length > 0) {
+ MailPoet.Notice.error(
response.errors.map(function mapError(error) { return error.message; }),
{ scroll: true }
);
- }
- });
- });
- });
- });
+ }
+ });
+ });
+ });
+ });
diff --git a/assets/js/src/subscribers/importExport/import.js b/assets/js/src/subscribers/importExport/import.js
index 2a96f26b41..087bed22ef 100644
--- a/assets/js/src/subscribers/importExport/import.js
+++ b/assets/js/src/subscribers/importExport/import.js
@@ -10,885 +10,283 @@ define(
'asyncqueue',
'moment'
],
- function (
- Backbone,
- _,
- jQuery,
- MailPoet,
- Handlebars,
- Papa,
- AsyncQueue,
- Moment
- ) {
- if (!jQuery('#mailpoet_subscribers_import').length) {
- return;
- }
- jQuery(document).ready(function () {
- var router;
- jQuery('input[name="select_method"]').attr('checked', false);
- // configure router
- router = new (Backbone.Router.extend({
- routes: {
- '': 'home',
- step1: 'step1',
- step2: 'step2',
- step3: 'step3'
- },
- home: function () {
- this.navigate('step1', { trigger: true });
- }
- }))();
-
- function showCurrentStep() {
- MailPoet.Notice.hide();
- MailPoet.Modal.loading(false);
- jQuery('#mailpoet_subscribers_import > div[id^="step"]').hide();
- jQuery(location.hash).show();
+ function (
+ Backbone,
+ _,
+ jQuery,
+ MailPoet,
+ Handlebars,
+ Papa,
+ AsyncQueue,
+ Moment
+ ) {
+ if (!jQuery('#mailpoet_subscribers_import').length) {
+ return;
+ }
+ jQuery(document).ready(function () {
+ var router;
+ jQuery('input[name="select_method"]').attr('checked', false);
+ // configure router
+ router = new (Backbone.Router.extend({
+ routes: {
+ '': 'home',
+ step1: 'step1',
+ step2: 'step2',
+ step3: 'step3'
+ },
+ home: function () {
+ this.navigate('step1', { trigger: true });
}
+ }))();
- /*
+ function showCurrentStep() {
+ MailPoet.Notice.hide();
+ MailPoet.Modal.loading(false);
+ jQuery('#mailpoet_subscribers_import > div[id^="step"]').hide();
+ jQuery(location.hash).show();
+ }
+
+ /*
* STEP 1 (upload or copy/paste)
*/
- router.on('route:step1', function () {
- var methodProcessContainerTemplate;
- var currentStepE;
- var methodSelectionElement;
- var pasteInputElement;
- var pasteInputPlaceholderElement;
- var pasteProcessButtonElement;
- var mailChimpKeyInputElement;
- var mailChimpKeyVerifyButtonElement;
- var mailChimpListsContainerElement;
- var mailChimpProcessButtonElement;
- var uploadElement;
- var uploadProcessButtonElement;
- // set or reset temporary validation rule on all columns
- window.mailpoetColumns = jQuery.map(window.mailpoetColumns, function (column) {
- var col = column;
- col.validation_rule = false;
- return col;
- });
+ router.on('route:step1', function () {
+ var methodProcessContainerTemplate;
+ var currentStepE;
+ var methodSelectionElement;
+ var pasteInputElement;
+ var pasteInputPlaceholderElement;
+ var pasteProcessButtonElement;
+ var mailChimpKeyInputElement;
+ var mailChimpKeyVerifyButtonElement;
+ var mailChimpListsContainerElement;
+ var mailChimpProcessButtonElement;
+ var uploadElement;
+ var uploadProcessButtonElement;
+ // set or reset temporary validation rule on all columns
+ window.mailpoetColumns = jQuery.map(window.mailpoetColumns, function (column) {
+ var col = column;
+ col.validation_rule = false;
+ return col;
+ });
- if (typeof (window.importData.step1) !== 'undefined') {
- showCurrentStep();
- return;
- }
+ if (typeof (window.importData.step1) !== 'undefined') {
+ showCurrentStep();
+ return;
+ }
- // render process button for each method
- methodProcessContainerTemplate =
+ // render process button for each method
+ methodProcessContainerTemplate =
Handlebars.compile(jQuery('#method_process_template').html());
- jQuery('.mailpoet_method_process').html(methodProcessContainerTemplate());
+ jQuery('.mailpoet_method_process').html(methodProcessContainerTemplate());
- // define reusable variables
- currentStepE = jQuery(location.hash);
- methodSelectionElement = jQuery('#select_method');
- pasteInputElement = jQuery('#paste_input');
- pasteInputPlaceholderElement =
+ // define reusable variables
+ currentStepE = jQuery(location.hash);
+ methodSelectionElement = jQuery('#select_method');
+ pasteInputElement = jQuery('#paste_input');
+ pasteInputPlaceholderElement =
pasteInputElement.data('placeholder').replace(/\\n/g, '\n');
- pasteProcessButtonElement =
+ pasteProcessButtonElement =
jQuery('#method_paste > div.mailpoet_method_process')
.find('a.mailpoet_process');
- mailChimpKeyInputElement = jQuery('#mailchimp_key');
- mailChimpKeyVerifyButtonElement = jQuery('#mailchimp_key_verify');
- mailChimpListsContainerElement = jQuery('#mailchimp_lists');
- mailChimpProcessButtonElement = jQuery('#method_mailchimp > div.mailpoet_method_process')
- .find('a.mailpoet_process');
- uploadElement = jQuery('#file_local');
- uploadProcessButtonElement =
+ mailChimpKeyInputElement = jQuery('#mailchimp_key');
+ mailChimpKeyVerifyButtonElement = jQuery('#mailchimp_key_verify');
+ mailChimpListsContainerElement = jQuery('#mailchimp_lists');
+ mailChimpProcessButtonElement = jQuery('#method_mailchimp > div.mailpoet_method_process')
+ .find('a.mailpoet_process');
+ uploadElement = jQuery('#file_local');
+ uploadProcessButtonElement =
jQuery('#method_file > div.mailpoet_method_process')
.find('a.mailpoet_process');
- // define method change behavior
- methodSelectionElement.change(function () {
- var availableMethods = jQuery(':radio[name="select_method"]');
- var selectedMethod = availableMethods.index(availableMethods.filter(':checked'));
- MailPoet.Notice.hide();
- // hide all methods
- currentStepE.find('.inside')
- .children('div[id^="method_"]')
- .hide();
- // show selected method
- currentStepE.find('.inside')
- .children('div[id^="method_"]:eq(' + selectedMethod + ')')
- .show()
- .find('table')
- .show();
- });
+ // define method change behavior
+ methodSelectionElement.change(function () {
+ var availableMethods = jQuery(':radio[name="select_method"]');
+ var selectedMethod = availableMethods.index(availableMethods.filter(':checked'));
+ MailPoet.Notice.hide();
+ // hide all methods
+ currentStepE.find('.inside')
+ .children('div[id^="method_"]')
+ .hide();
+ // show selected method
+ currentStepE.find('.inside')
+ .children('div[id^="method_"]:eq(' + selectedMethod + ')')
+ .show()
+ .find('table')
+ .show();
+ });
- // start step 1
- showCurrentStep();
+ // start step 1
+ showCurrentStep();
- function toggleNextStepButton(element, condition) {
- var disabled = 'button-disabled';
- if (condition === 'on') {
- element.closest('table a').removeClass(disabled);
- return;
- }
- element.closest('table a').addClass(disabled);
+ function toggleNextStepButton(element, condition) {
+ var disabled = 'button-disabled';
+ if (condition === 'on') {
+ element.closest('table a').removeClass(disabled);
+ return;
}
+ element.closest('table a').addClass(disabled);
+ }
- function parseCSV(isFile) {
- var processedSubscribers = [];
- var parsedEmails = [];
- var duplicateEmails = [];
- var invalidEmails = [];
- var emailColumnPosition = null;
- var columnCount = null;
- var isHeaderFound = false;
- var advancedOptionHeader = true;
- var advancedOptionDelimiter = '';
- var advancedOptionNewline = '';
- var advancedOptionComments = false;
- // trim spaces, commas, periods,
- // single/double quotes and convert to lowercase
- var detectAndCleanupEmail = function (emailString) {
- var test;
- // decode HTML entities
- var email = jQuery('
').html(emailString).text();
- email = email
- .toLowerCase()
- // left/right trim spaces, punctuation (e.g., " 'email@email.com'; ")
- // right trim non-printable characters (e.g., "email@email.com�")
- .replace(/^["';.,\s]+|[^\x20-\x7E]+$|["';.,_\s]+$/g, '')
- // remove spaces (e.g., "email @ email . com")
- // remove urlencoded characters
- .replace(/\s+|%\d+|,+/g, '');
- // detect e-mails that will be otherwise rejected by email regex
- test = /<(.*?)>/.exec(email);
- if (test) {
- // is the email inside angle brackets (e.g., 'some@email.com
')?
- email = test[1].trim();
- }
- test = /mailto:(?:\s+)?(.*)/.exec(email);
- if (test) {
- // is the email in 'mailto:email' format?
- email = test[1].trim();
- }
+ function parseCSV(isFile) {
+ var processedSubscribers = [];
+ var parsedEmails = [];
+ var duplicateEmails = [];
+ var invalidEmails = [];
+ var emailColumnPosition = null;
+ var columnCount = null;
+ var isHeaderFound = false;
+ var advancedOptionHeader = true;
+ var advancedOptionDelimiter = '';
+ var advancedOptionNewline = '';
+ var advancedOptionComments = false;
+ // trim spaces, commas, periods,
+ // single/double quotes and convert to lowercase
+ var detectAndCleanupEmail = function (emailString) {
+ var test;
+ // decode HTML entities
+ var email = jQuery('').html(emailString).text();
+ email = email
+ .toLowerCase()
+ // left/right trim spaces, punctuation (e.g., " 'email@email.com'; ")
+ // right trim non-printable characters (e.g., "email@email.com�")
+ .replace(/^["';.,\s]+|[^\x20-\x7E]+$|["';.,_\s]+$/g, '')
+ // remove spaces (e.g., "email @ email . com")
+ // remove urlencoded characters
+ .replace(/\s+|%\d+|,+/g, '');
+ // detect e-mails that will be otherwise rejected by email regex
+ test = /<(.*?)>/.exec(email);
+ if (test) {
+ // is the email inside angle brackets (e.g., 'some@email.com ')?
+ email = test[1].trim();
+ }
+ test = /mailto:(?:\s+)?(.*)/.exec(email);
+ if (test) {
+ // is the email in 'mailto:email' format?
+ email = test[1].trim();
+ }
- // validate email
- if (!window.mailpoet_email_regex.test(email)) {
- return false;
- }
- return email;
- };
+ // validate email
+ if (!window.mailpoet_email_regex.test(email)) {
+ return false;
+ }
+ return email;
+ };
- return {
- skipEmptyLines: true,
- delimiter: advancedOptionDelimiter,
- newline: advancedOptionNewline,
- comments: advancedOptionComments,
- error: function () {
- MailPoet.Notice.hide();
- MailPoet.Notice.error(MailPoet.I18n.t('dataProcessingError'));
- },
- complete: function (CSV) {
- var email;
- var emailAddress;
- var rowData;
- var rowColumnCount;
- var errorNotice;
- Object.keys(CSV.data).forEach(function csvDataEach(rowCount) {
- rowData = CSV.data[rowCount].map(function (el) {
- return el.trim();
- });
- rowColumnCount = rowData.length;
- // set the number of row elements based on the first non-empty row
- if (columnCount === null) {
- columnCount = rowColumnCount;
- }
- // Process the row with the following assumptions:
- // 1. Each row should contain the same number of elements
- // 2. There should be at least 1 valid (as per HTML5 e-mail regex)
- // e-mail address on each row EXCEPT when the header option is set to true
- // 3. Duplicate addresses are skipped
- if (rowColumnCount === columnCount) {
- // determine position of email address inside an array; this is
- // done once and then email regex is run just on that element for each row
- if (emailColumnPosition === null) {
- Object.keys(rowData).forEach(function rowDataEach(column) {
- emailAddress = detectAndCleanupEmail(rowData[column]);
- if (emailColumnPosition === null
- && window.mailpoet_email_regex.test(emailAddress)) {
- emailColumnPosition = column;
- // add current e-mail to an object index
- parsedEmails[emailAddress] = true;
- rowData[column] = emailAddress;
- processedSubscribers[emailAddress] = rowData;
- }
- });
+ return {
+ skipEmptyLines: true,
+ delimiter: advancedOptionDelimiter,
+ newline: advancedOptionNewline,
+ comments: advancedOptionComments,
+ error: function () {
+ MailPoet.Notice.hide();
+ MailPoet.Notice.error(MailPoet.I18n.t('dataProcessingError'));
+ },
+ complete: function (CSV) {
+ var email;
+ var emailAddress;
+ var rowData;
+ var rowColumnCount;
+ var errorNotice;
+ Object.keys(CSV.data).forEach(function csvDataEach(rowCount) {
+ rowData = CSV.data[rowCount].map(function (el) {
+ return el.trim();
+ });
+ rowColumnCount = rowData.length;
+ // set the number of row elements based on the first non-empty row
+ if (columnCount === null) {
+ columnCount = rowColumnCount;
+ }
+ // Process the row with the following assumptions:
+ // 1. Each row should contain the same number of elements
+ // 2. There should be at least 1 valid (as per HTML5 e-mail regex)
+ // e-mail address on each row EXCEPT when the header option is set to true
+ // 3. Duplicate addresses are skipped
+ if (rowColumnCount === columnCount) {
+ // determine position of email address inside an array; this is
+ // done once and then email regex is run just on that element for each row
+ if (emailColumnPosition === null) {
+ Object.keys(rowData).forEach(function rowDataEach(column) {
+ emailAddress = detectAndCleanupEmail(rowData[column]);
if (emailColumnPosition === null
+ && window.mailpoet_email_regex.test(emailAddress)) {
+ emailColumnPosition = column;
+ // add current e-mail to an object index
+ parsedEmails[emailAddress] = true;
+ rowData[column] = emailAddress;
+ processedSubscribers[emailAddress] = rowData;
+ }
+ });
+ if (emailColumnPosition === null
&& advancedOptionHeader
&& parseInt(rowCount, 10) === 0) {
- isHeaderFound = true;
- processedSubscribers[0] = rowData;
- }
- } else if (rowData[emailColumnPosition] !== '') {
- email = detectAndCleanupEmail(rowData[emailColumnPosition]);
- if (_.has(parsedEmails, email)) {
- duplicateEmails.push(email);
- } else if (!window.mailpoet_email_regex.test(email)) {
- invalidEmails.push(rowData[emailColumnPosition]);
- } else {
- // if we haven't yet processed this e-mail and it passed
- // the regex test, then process the row
- parsedEmails[email] = true;
- rowData[emailColumnPosition] = email;
- processedSubscribers[email] = rowData;
- }
+ isHeaderFound = true;
+ processedSubscribers[0] = rowData;
+ }
+ } else if (rowData[emailColumnPosition] !== '') {
+ email = detectAndCleanupEmail(rowData[emailColumnPosition]);
+ if (_.has(parsedEmails, email)) {
+ duplicateEmails.push(email);
+ } else if (!window.mailpoet_email_regex.test(email)) {
+ invalidEmails.push(rowData[emailColumnPosition]);
+ } else {
+ // if we haven't yet processed this e-mail and it passed
+ // the regex test, then process the row
+ parsedEmails[email] = true;
+ rowData[emailColumnPosition] = email;
+ processedSubscribers[email] = rowData;
}
}
- });
- // reindex array to avoid non-numeric indices
- processedSubscribers = _.values(processedSubscribers);
- // if the header options is set, there should be at least
- // 2 data rows, otherwise at least 1 data row
- if (
- processedSubscribers &&
+ }
+ });
+ // reindex array to avoid non-numeric indices
+ processedSubscribers = _.values(processedSubscribers);
+ // if the header options is set, there should be at least
+ // 2 data rows, otherwise at least 1 data row
+ if (
+ processedSubscribers &&
(
(isHeaderFound && processedSubscribers.length >= 2)
||
(!isHeaderFound && processedSubscribers.length >= 1)
)
- ) {
- // since we assume that the header line is always present, we need
- // to detect the header by checking if it contains a valid e-mail address
- window.importData.step1 = {
- header: (!window.mailpoet_email_regex.test(
- processedSubscribers[0][emailColumnPosition])
- ) ? processedSubscribers.shift() : null,
- subscribers: processedSubscribers,
- subscribersCount: processedSubscribers.length,
- duplicate: duplicateEmails,
- invalid: invalidEmails
- };
- MailPoet.trackEvent('Subscribers import started', {
- source: isFile ? 'file upload' : 'pasted data',
- 'MailPoet Free version': window.mailpoet_version
- });
- router.navigate('step2', { trigger: true });
- } else {
- MailPoet.Modal.loading(false);
- errorNotice = MailPoet.I18n.t('noValidRecords');
- errorNotice = errorNotice.replace('[link]', MailPoet.I18n.t('csvKBLink'));
- errorNotice = errorNotice.replace('[/link]', '');
- MailPoet.Notice.error(errorNotice);
- }
- }
- };
- }
-
- function displayMailChimpLists(data) {
- var listSelectElement = mailChimpListsContainerElement.find('select');
- if (listSelectElement.data('select2')) {
- listSelectElement.select2('data', data);
- listSelectElement.trigger('change');
- } else {
- listSelectElement
- .select2({
- data: data,
- width: '20em',
- templateResult: function (item) {
- return item.name;
- },
- templateSelection: function (item) {
- return item.name;
- }
- })
- .change(function () {
- if (jQuery(this).val() !== null) {
- toggleNextStepButton(mailChimpProcessButtonElement, 'on');
- } else {
- toggleNextStepButton(mailChimpProcessButtonElement, 'off');
- }
- })
- .trigger('change');
- }
- mailChimpListsContainerElement.show();
- }
-
- /*
- * Paste
- */
- pasteInputElement
- .attr('value', pasteInputPlaceholderElement).css('color', '#999')
- .focus(function () {
- if (jQuery(this).val() === pasteInputPlaceholderElement) {
- jQuery(this).attr('value', '').css('color', '#222');
- }
- })
- .blur(function () {
- if (jQuery(this).val() === '') {
- jQuery(this).attr('value', pasteInputPlaceholderElement).css('color', '#999');
- }
- })
- .keyup(function () {
- toggleNextStepButton(
- pasteProcessButtonElement,
- (this.value.trim() !== '') ? 'on' : 'off'
- );
- });
-
- pasteProcessButtonElement.click(function () {
- var pasteSize = encodeURI(pasteInputElement.val()).split(/%..|./).length - 1;
- MailPoet.Notice.hide();
- // get an approximate size of textarea paste in bytes
- if (pasteSize > window.maxPostSizeBytes) {
- MailPoet.Notice.error(MailPoet.I18n.t('maxPostSizeNotice'));
- return;
- }
- // delay loading indicator for 10ms or else it's just too fast :)
- MailPoet.Modal.loading(true);
- setTimeout(function () {
- Papa.parse(pasteInputElement.val(), parseCSV(false));
- }, 10);
- });
-
- /*
- * CSV file
- */
- uploadElement.change(function () {
- var ext = this.value.match(/[^.]+$/);
- MailPoet.Notice.hide();
- if (ext === null || ext[0].toLowerCase() !== 'csv') {
- this.value = '';
- MailPoet.Notice.error(MailPoet.I18n.t('wrongFileFormat'));
- }
-
- toggleNextStepButton(
- uploadProcessButtonElement,
- (this.value.trim() !== '') ? 'on' : 'off'
- );
- });
-
- uploadProcessButtonElement.click(function () {
- if (uploadElement.val().trim() !== '') {
- // delay loading indicator for 10ms or else it's just too fast :)
- MailPoet.Modal.loading(true);
- setTimeout(function () {
- uploadElement.parse({
- config: parseCSV(true)
- });
- }, 10);
- }
- });
-
- /*
- * MailChimp
- */
- mailChimpKeyInputElement.keyup(function () {
- if (this.value.trim() === ''
- || !/[a-zA-Z0-9]{32}-/.exec(this.value.trim())) {
- mailChimpListsContainerElement.hide();
- jQuery('.mailpoet_mailchimp-key-status')
- .html('')
- .removeClass('mailpoet_mailchimp-ok mailpoet_mailchimp-error');
- toggleNextStepButton(mailChimpProcessButtonElement, 'off');
- }
- });
-
- mailChimpKeyVerifyButtonElement.click(function () {
- MailPoet.Modal.loading(true);
- MailPoet.Ajax.post({
- api_version: window.mailpoet_api_version,
- endpoint: 'importExport',
- action: 'getMailChimpLists',
- data: {
- api_key: mailChimpKeyInputElement.val()
- }
- }).always(function () {
- MailPoet.Modal.loading(false);
- }).done(function (response) {
- jQuery('.mailpoet_mailchimp-key-status')
- .html('')
- .removeClass()
- .addClass('mailpoet_mailchimp-key-status mailpoet_mailchimp-ok');
- if (response.data.length === 0) {
- jQuery('.mailpoet_mailchimp-key-status').html(MailPoet.I18n.t('noMailChimpLists'));
- mailChimpListsContainerElement.hide();
- toggleNextStepButton(mailChimpProcessButtonElement, 'off');
- } else {
- displayMailChimpLists(response.data);
- }
- }).fail(function (response) {
- if (response.errors.length > 0) {
- MailPoet.Notice.error(
- response.errors.map(function (error) { return error.message; }),
- { scroll: true }
- );
- }
- });
- });
-
- mailChimpProcessButtonElement.click(function () {
- if (mailChimpProcessButtonElement.closest('table a').hasClass('button-disabled')) {
- return;
- }
- MailPoet.Modal.loading(true);
- MailPoet.Ajax.post({
- api_version: window.mailpoet_api_version,
- endpoint: 'importExport',
- action: 'getMailChimpSubscribers',
- data: {
- api_key: mailChimpKeyInputElement.val(),
- lists: mailChimpListsContainerElement.find('select').val()
- }
- }).always(function () {
- MailPoet.Modal.loading(false);
- }).done(function (response) {
- window.importData.step1 = response.data;
- MailPoet.trackEvent('Subscribers import started', {
- source: 'MailChimp',
- 'MailPoet Free version': window.mailpoet_version
- });
- router.navigate('step2', { trigger: true });
- }).fail(function (response) {
- if (response.errors.length > 0) {
- MailPoet.Notice.error(
- response.errors.map(function (error) { return error.message; }),
- { scroll: true }
- );
- }
- });
- });
- });
-
- router.on('route:step2', function () {
- var nextStepButton;
- var previousStepButton;
- var subscribers;
- var subscribersDataTemplate;
- var subscribersDataTemplatePartial;
- var subscribersDataParseResultsTemplate;
- var segmentSelectElement;
- var maxRowsToShow;
- var filler;
- var fillerArray;
- var fillerPosition;
- var importResults;
- var duplicates;
- if (typeof (window.importData.step1) === 'undefined') {
- router.navigate('step1', { trigger: true });
- return;
- }
- // define reusable variables
- nextStepButton = jQuery('#step2_process');
- previousStepButton = jQuery('#return_to_step1');
- // create a copy of subscribers object for further manipulation
- subscribers = jQuery.extend(true, {}, window.importData.step1);
- subscribersDataTemplate = Handlebars.compile(jQuery('#subscribers_data_template').html());
- subscribersDataTemplatePartial = Handlebars.compile(jQuery('#subscribers_data_template_partial').html());
- subscribersDataParseResultsTemplate = Handlebars.compile(jQuery('#subscribers_data_parse_results_template').html());
- segmentSelectElement = jQuery('#mailpoet_segments_select');
- maxRowsToShow = 10;
- filler = '. . .';
- // create an array of filler data with the same number of
- // elements as in the subscribers' data row
- fillerArray = Array.apply(
- null,
- new Array(subscribers.subscribers[0].length)
- ).map(String.prototype.valueOf, filler);
-
- showCurrentStep();
-
- function toggleNextStepButton(condition) {
- var disabled = 'button-disabled';
- if (condition === 'on') {
- nextStepButton.removeClass(disabled);
- return;
- }
- nextStepButton.addClass(disabled);
- }
-
- // hide previous statistics/import results
- jQuery('#subscribers_data_parse_results:visible').html('');
- jQuery('#subscribers_data_import_results:visible').hide();
-
- // show parse statistics if any duplicate/invalid records were found
- if (subscribers.invalid.length || subscribers.duplicate.length) {
- // count repeating e-mails inside duplicate array and present them in
- // 'email (xN)' format
- duplicates = {};
- subscribers.duplicate.forEach(function (subscriberEmail) {
- duplicates[subscriberEmail] = (duplicates[subscriberEmail] || 0) + 1;
- });
- subscribers.duplicate = [];
- Object.keys(duplicates).forEach(function emailDuplicates(email) {
- if (duplicates[email] > 1) {
- subscribers.duplicate.push(email + ' (x' + duplicates[email] + ')');
- } else {
- subscribers.duplicate.push(email);
- }
- });
-
- importResults = {
- notice: MailPoet.I18n.t('importNoticeSkipped').replace(
- '%1$s',
- '' + (subscribers.invalid.length + subscribers.duplicate.length) + ''
- ),
- invalid: (subscribers.invalid.length)
- ? MailPoet.I18n.t('importNoticeInvalid')
- .replace('%1$s', '' + subscribers.invalid.length.toLocaleString() + '')
- .replace('%2$s', subscribers.invalid.join(', '))
- : null,
- duplicate: (subscribers.duplicate.length)
- ? MailPoet.I18n.t('importNoticeDuplicate')
- .replace('%1$s', '' + subscribers.duplicate.length + '')
- .replace('%2$s', subscribers.duplicate.join(', '))
- : null
- };
- jQuery('#subscribers_data_parse_results').html(
- subscribersDataParseResultsTemplate(importResults)
- );
- }
-
- jQuery('.mailpoet_subscribers_data_parse_results_details_show')
- .click(function () {
- var details = jQuery('.mailpoet_subscribers_data_parse_results_details');
- jQuery(details).toggle();
- this.text =
- (jQuery(details).is(':visible'))
- ? MailPoet.I18n.t('hideDetails')
- : MailPoet.I18n.t('showDetails');
- });
-
- // show available segments
- if (window.mailpoetSegments.length) {
- jQuery('.mailpoet_segments').show();
- } else {
- jQuery('.mailpoet_no_segments').show();
- }
-
- function enableSegmentSelection(segments) {
- if (segmentSelectElement.data('select2')) {
- segmentSelectElement
- .html('')
- .select2('destroy');
- toggleNextStepButton('off');
- }
- segmentSelectElement
- .select2({
- data: segments,
- width: '20em',
- templateResult: function (item) {
- var i = item;
- i.subscriberCount = parseInt(i.subscriberCount, 10);
- return i.name + ' (' + i.subscriberCount.toLocaleString() + ')';
- },
- templateSelection: function (item) {
- var i = item;
- i.subscriberCount = parseInt(i.subscriberCount, 10);
- return i.name + ' (' + i.subscriberCount.toLocaleString() + ')';
- }
- })
- .change(function () {
- var segmentSelectionNotice = jQuery('[data-id="notice_segmentSelection"]');
- if (!this.value) {
- if (!segmentSelectionNotice.length) {
- MailPoet.Notice.error(MailPoet.I18n.t('segmentSelectionRequired'), {
- static: true,
- scroll: true,
- id: 'notice_segmentSelection',
- hideClose: true
- });
- }
- toggleNextStepButton('off');
- } else {
- jQuery('[data-id="notice_segmentSelection"]').remove();
- if (!jQuery('.mailpoet_notice.error:visible').length) {
- toggleNextStepButton('on');
- }
- }
- });
- }
-
- jQuery('.mailpoet_create_segment').click(function () {
- MailPoet.Modal.popup({
- title: MailPoet.I18n.t('addNewList'),
- template: jQuery('#new_segment_template').html()
- });
- jQuery('#new_segment_name').keypress(function (e) {
- if (e.which === 13) {
- jQuery('#new_segment_process').click();
- }
- });
- jQuery('#new_segment_process').click(function () {
- var segmentName = jQuery('#new_segment_name').val().trim();
- var segmentDescription = jQuery('#new_segment_description').val().trim();
-
- MailPoet.Ajax.post({
- api_version: window.mailpoet_api_version,
- endpoint: 'ImportExport',
- action: 'addSegment',
- data: {
- name: segmentName,
- description: segmentDescription
- }
- }).done(function (response) {
- var selectedValues;
- window.mailpoetSegments.push({
- id: response.data.id,
- name: response.data.name,
- subscriberCount: 0
- });
-
- selectedValues = segmentSelectElement.val();
- if (selectedValues === null) {
- selectedValues = [response.data.id];
- } else {
- selectedValues.push(response.data.id);
- }
-
- enableSegmentSelection(window.mailpoetSegments);
- segmentSelectElement.val(selectedValues).trigger('change');
- jQuery('.mailpoet_segments:hidden').show();
- jQuery('.mailpoet_no_segments:visible').hide();
- MailPoet.Modal.close();
- }).fail(function (response) {
- if (response.errors.length > 0) {
- MailPoet.Notice.hide();
- MailPoet.Notice.error(
- response.errors.map(function (error) { return error.message; }),
- { positionAfter: '#new_segment_name' }
- );
- }
- });
- });
- jQuery('#new_segment_cancel').click(function () {
- MailPoet.Modal.close();
- });
- });
-
- // register partial template that will contain subscribers data
- Handlebars.registerPartial(
- 'subscribers_data_template_partial',
- subscribersDataTemplatePartial
- );
-
- // autodetect column types
- Handlebars.registerHelper(
- 'show_and_match_columns',
- function (helperSubscribers, options) {
- var displayedColumns = [];
- var displayedColumnsIds = [];
- var columnData;
- var columnId;
- var headerName;
- var headerNameMatch;
- // go through all elements of the first row in subscribers data
- Object
- .keys(helperSubscribers.subscribers[0])
- .forEach(function helperSubscribersLoop(i) {
- columnData = helperSubscribers.subscribers[0][i];
- columnId = 'ignore'; // set default column type
- // if the column is not undefined and has a valid e-mail, set type as email
- if (columnData % 1 !== 0 && window.mailpoet_email_regex.test(columnData)) {
- columnId = 'email';
- } else if (helperSubscribers.header) {
- headerName = helperSubscribers.header[i];
- headerNameMatch = window.mailpoetColumns.map(function (el) {
- return el.name;
- }).indexOf(headerName);
- // set column type using header
- if (headerNameMatch !== -1) {
- columnId = window.mailpoetColumns[headerNameMatch].id;
- } else if (headerName) { // set column type using header name
- if (/first|first name|given name/i.test(headerName)) {
- columnId = 'first_name';
- } else if (/last|last name/i.test(headerName)) {
- columnId = 'last_name';
- }
- }
- }
- // make sure the column id has not been previously selected
- // (e.g., subscriber_first_name shouldn't be autodetected twice),
- // except for "ignore"
- columnId =
- (columnId !== 'ignore'
- && displayedColumnsIds.indexOf(columnId) === -1)
- ? columnId
- : 'ignore';
- displayedColumns[i] = { column_id: columnId };
- displayedColumnsIds.push(columnId);
- });
- return options.fn(displayedColumns);
- });
-
- // sanitize unsafe data
- Handlebars.registerHelper('sanitize_data', function (data) {
- return (data instanceof Handlebars.SafeString) ?
- data :
- new Handlebars.SafeString(Handlebars.Utils.escapeExpression(data));
- });
-
- // start array index from 1
- Handlebars.registerHelper('calculate_index', function (rawIndex) {
- var index = parseInt(rawIndex, 10);
- // display filler data (e.g., ellipsis) if we've reached the maximum number of rows and
- // subscribers count is greater than the maximum number of rows we're displaying
- if (index === maxRowsToShow && subscribers.subscribersCount > (maxRowsToShow + 1)) {
- fillerPosition = index;
- return filler;
- } else if (index === (subscribers.subscribers.length - 1)) {
- // if we're on the last line, show the total count of subscribers data
- return subscribers.subscribersCount.toLocaleString();
- }
- return index + 1;
- });
-
- // reduce subscribers object if the total length is greater than the
- // maximum number of defined rows
- if (subscribers.subscribersCount > (maxRowsToShow + 1)) {
- subscribers.subscribers.splice(
- maxRowsToShow, subscribers.subscribersCount - (maxRowsToShow + 1),
- fillerArray
- );
- }
-
- // filter subscribers' data to detect dates, emails, etc.
- function filterSubscribers() {
- var subscribersClone = jQuery.extend(true, {}, subscribers);
- var preventNextStep = false;
- var displayedColumns;
- jQuery(
- '[data-id="notice_invalidEmail"], [data-id="notice_invalidDate"]')
- .remove();
- displayedColumns = jQuery.map(
- jQuery('.mailpoet_subscribers_column_data_match'), function (element, elementIndex) {
- var columnId = jQuery(element).data('column-id');
- var validationRule = jQuery(element).data('validation-rule');
- jQuery(element).val(columnId).trigger('change');
- return {
- id: columnId,
- index: elementIndex,
- validationRule: validationRule,
- element: element
+ ) {
+ // since we assume that the header line is always present, we need
+ // to detect the header by checking if it contains a valid e-mail address
+ window.importData.step1 = {
+ header: (!window.mailpoet_email_regex.test(
+ processedSubscribers[0][emailColumnPosition])
+ ) ? processedSubscribers.shift() : null,
+ subscribers: processedSubscribers,
+ subscribersCount: processedSubscribers.length,
+ duplicate: duplicateEmails,
+ invalid: invalidEmails
};
- });
- // iterate through the object of mailpoet columns
- jQuery.map(window.mailpoetColumns, function (column) {
- var firstRowData;
- var validationRule;
- var testedFormat;
- var allowedDateFormats;
- // check if the column id matches the selected id of one of the
- // subscriber's data columns
- var matchedColumn = _.find(
- displayedColumns,
- function (data) { return data.id === column.id; }
- );
- // EMAIL filter: if the first value in the column doesn't have a valid
- // email, hide the next button
- if (column.id === 'email') {
- if (!window.mailpoet_email_regex.test(
- subscribersClone.subscribers[0][matchedColumn.index])
- ) {
- preventNextStep = true;
- if (!jQuery('[data-id="notice_invalidEmail"]').length) {
- MailPoet.Notice.error(MailPoet.I18n.t('columnContainsInvalidElement'), {
- static: true,
- scroll: true,
- hideClose: true,
- id: 'invalidEmail'
- });
- }
- } else {
- MailPoet.Notice.hide('invalidEmail');
- }
- }
- // DATE filter: if column type is date, check if we can recognize it
- if (column.type === 'date' && matchedColumn) {
- allowedDateFormats = [
- Moment.ISO_8601,
- 'YYYY/MM/DD',
- 'MM/DD/YYYY',
- 'DD/MM/YYYY',
- 'YYYY/MM/DD',
- 'YYYY/DD/MM',
- 'MM/YYYY',
- 'YYYY/MM',
- 'YYYY'
- ];
- firstRowData = subscribersClone.subscribers[0][matchedColumn.index];
- validationRule = false;
- // check if date exists
- if (firstRowData.trim() === '') {
- subscribersClone.subscribers[0][matchedColumn.index] =
- ''
- + MailPoet.I18n.t('emptyFirstRowDate')
- + ' ';
- preventNextStep = true;
- } else {
- Object.keys(allowedDateFormats).forEach(function allowedDateFormatsLoop(format) {
- testedFormat = allowedDateFormats[format];
- if (Moment(firstRowData, testedFormat, true).isValid()) {
- validationRule = (typeof (testedFormat) === 'function') ?
- 'datetime' :
- testedFormat;
- // set validation on the column element
- jQuery(matchedColumn.element).data('validation-rule', validationRule);
- return;
- }
- if (validationRule === 'datetime') {
- validationRule = Moment.ISO_8601;
- }
- });
- }
- jQuery.map(subscribersClone.subscribers, function (dataSubscribers, index) {
- var data = dataSubscribers;
- var rowData = data[matchedColumn.index];
- var date = Moment(rowData, testedFormat, true);
- if (index === fillerPosition || rowData.trim() === '') return;
- // validate date
- if (date.isValid()) {
- data[matchedColumn.index] = new Handlebars.SafeString(
- Handlebars.Utils.escapeExpression(data[matchedColumn.index])
- + ''
- + MailPoet.Date.format(date)
- + ' '
- );
- } else {
- data[matchedColumn.index] = new Handlebars.SafeString(
- Handlebars.Utils.escapeExpression(data[matchedColumn.index])
- + ''
- + (new Handlebars.SafeString(MailPoet.I18n.t('dateMatchError')))
- + ' '
- );
- preventNextStep = true;
- }
+ MailPoet.trackEvent('Subscribers import started', {
+ source: isFile ? 'file upload' : 'pasted data',
+ 'MailPoet Free version': window.mailpoet_version
});
- if (preventNextStep && !jQuery('.mailpoet_invalidDate').length) {
- MailPoet.Notice.error(MailPoet.I18n.t('columnContainsInvalidDate'), {
- static: true,
- scroll: true,
- hideClose: true,
- id: 'invalidDate'
- });
- }
+ router.navigate('step2', { trigger: true });
+ } else {
+ MailPoet.Modal.loading(false);
+ errorNotice = MailPoet.I18n.t('noValidRecords');
+ errorNotice = errorNotice.replace('[link]', MailPoet.I18n.t('csvKBLink'));
+ errorNotice = errorNotice.replace('[/link]', '');
+ MailPoet.Notice.error(errorNotice);
}
- });
- // refresh table with susbcribers' data
- jQuery('#subscribers_data > table > tbody')
- .html(subscribersDataTemplatePartial(subscribersClone));
-
- if (preventNextStep) {
- toggleNextStepButton('off');
- } else if (!jQuery('.mailpoet_notice.error:visible').length
- && segmentSelectElement.val()) {
- toggleNextStepButton('on');
}
- }
+ };
+ }
- // render template
- jQuery('#subscribers_data > table').html(subscribersDataTemplate(subscribers));
-
- // filter displayed data
- jQuery('select.mailpoet_subscribers_column_data_match')
+ function displayMailChimpLists(data) {
+ var listSelectElement = mailChimpListsContainerElement.find('select');
+ if (listSelectElement.data('select2')) {
+ listSelectElement.select2('data', data);
+ listSelectElement.trigger('change');
+ } else {
+ listSelectElement
.select2({
- data: window.mailpoetColumnsSelect2,
- width: '15em',
+ data: data,
+ width: '20em',
templateResult: function (item) {
return item.name;
},
@@ -896,275 +294,877 @@ define(
return item.name;
}
})
- .on('select2:selecting', function (selectEvent) {
- var selectElement = this;
- var selectedOptionId = selectEvent.params.args.data.id;
- // CREATE CUSTOM FIELD
- if (selectedOptionId === 'create') {
- selectEvent.preventDefault();
- jQuery(selectElement).select2('close');
- MailPoet.Modal.popup({
- title: MailPoet.I18n.t('addNewField'),
- template: jQuery('#form_template_field_form').html()
- });
- jQuery('#form_field_new').parsley().on('form:submit', function () {
- // get data
- var data = jQuery(this.$element).mailpoetSerializeObject();
-
- // save custom field
- MailPoet.Ajax.post({
- api_version: window.mailpoet_api_version,
- endpoint: 'customFields',
- action: 'save',
- data: data
- }).done(function (response) {
- var newColumnData = {
- id: response.data.id,
- name: response.data.name,
- type: response.data.type,
- params: response.data.params,
- custom: true
- };
- // if this is the first custom column, create an "optgroup"
- if (window.mailpoetColumnsSelect2.length === 2) {
- window.mailpoetColumnsSelect2.push({
- name: MailPoet.I18n.t('userColumns'),
- children: []
- });
- }
- window.mailpoetColumnsSelect2[2].children.push(newColumnData);
- window.mailpoetColumns.push(newColumnData);
- jQuery('select.mailpoet_subscribers_column_data_match')
- .each(function () {
- jQuery(this)
- .html('')
- .select2('destroy')
- .select2({
- data: window.mailpoetColumnsSelect2,
- width: '15em',
- templateResult: function (item) {
- return item.name;
- },
- templateSelection: function (item) {
- return item.name;
- }
- });
- });
- jQuery(selectElement).data('column-id', newColumnData.id);
- jQuery(selectElement).data('validation-rule', false);
- filterSubscribers();
- // close popup
- MailPoet.Modal.close();
- }).fail(function (response) {
- if (response.errors.length > 0) {
- MailPoet.Notice.error(
- response.errors.map(function (error) { return error.message; }),
- { positionAfter: '#field_name' }
- );
- }
- });
- return false;
- });
+ .change(function () {
+ if (jQuery(this).val() !== null) {
+ toggleNextStepButton(mailChimpProcessButtonElement, 'on');
} else {
- // CHANGE COLUMN
- // check for duplicate values in all select options
- jQuery('select.mailpoet_subscribers_column_data_match')
- .each(function () {
- var element = this;
- var elementId = jQuery(element).val();
- // if another column has the same value and it's not an 'ignore',
- // prompt user
- if (elementId === selectedOptionId
- && elementId !== 'ignore') {
- if (confirm(MailPoet.I18n.t('selectedValueAlreadyMatched') + ' ' + MailPoet.I18n.t('confirmCorrespondingColumn'))) { // eslint-disable-line no-alert
- jQuery(element).data('column-id', 'ignore');
- } else {
- selectEvent.preventDefault();
- jQuery(selectElement).select2('close');
- }
- }
- });
+ toggleNextStepButton(mailChimpProcessButtonElement, 'off');
}
})
- .on('select2:select', function (selectEvent) {
- var selectElement = this;
- var selectedOptionId = selectEvent.params.data.id;
- jQuery(selectElement).data('column-id', selectedOptionId);
- filterSubscribers();
- });
+ .trigger('change');
+ }
+ mailChimpListsContainerElement.show();
+ }
- previousStepButton.off().on('click', function () {
- router.navigate('step1', { trigger: true });
+ /*
+ * Paste
+ */
+ pasteInputElement
+ .attr('value', pasteInputPlaceholderElement).css('color', '#999')
+ .focus(function () {
+ if (jQuery(this).val() === pasteInputPlaceholderElement) {
+ jQuery(this).attr('value', '').css('color', '#222');
+ }
+ })
+ .blur(function () {
+ if (jQuery(this).val() === '') {
+ jQuery(this).attr('value', pasteInputPlaceholderElement).css('color', '#999');
+ }
+ })
+ .keyup(function () {
+ toggleNextStepButton(
+ pasteProcessButtonElement,
+ (this.value.trim() !== '') ? 'on' : 'off'
+ );
});
- nextStepButton.off().on('click', function () {
- var columns = {};
- var queue = new jQuery.AsyncQueue();
- var batchNumber = 0;
- var batchSize = 2000;
- var timestamp = Date.now() / 1000;
- var clickImportResults = {
- created: 0,
- updated: 0,
- errors: [],
- segments: []
- };
- var clickSubscribers;
- var splitSubscribers;
+ pasteProcessButtonElement.click(function () {
+ var pasteSize = encodeURI(pasteInputElement.val()).split(/%..|./).length - 1;
+ MailPoet.Notice.hide();
+ // get an approximate size of textarea paste in bytes
+ if (pasteSize > window.maxPostSizeBytes) {
+ MailPoet.Notice.error(MailPoet.I18n.t('maxPostSizeNotice'));
+ return;
+ }
+ // delay loading indicator for 10ms or else it's just too fast :)
+ MailPoet.Modal.loading(true);
+ setTimeout(function () {
+ Papa.parse(pasteInputElement.val(), parseCSV(false));
+ }, 10);
+ });
- if (jQuery(this).hasClass('button-disabled')) {
- return;
- }
+ /*
+ * CSV file
+ */
+ uploadElement.change(function () {
+ var ext = this.value.match(/[^.]+$/);
+ MailPoet.Notice.hide();
+ if (ext === null || ext[0].toLowerCase() !== 'csv') {
+ this.value = '';
+ MailPoet.Notice.error(MailPoet.I18n.t('wrongFileFormat'));
+ }
+
+ toggleNextStepButton(
+ uploadProcessButtonElement,
+ (this.value.trim() !== '') ? 'on' : 'off'
+ );
+ });
+
+ uploadProcessButtonElement.click(function () {
+ if (uploadElement.val().trim() !== '') {
+ // delay loading indicator for 10ms or else it's just too fast :)
MailPoet.Modal.loading(true);
- splitSubscribers = function (localSubscribers, size) {
- return localSubscribers.reduce(function (res, item, index) {
- if (index % size === 0) {
- res.push([]);
- }
- res[res.length - 1].push(item);
- return res;
- }, []);
- };
- clickSubscribers = splitSubscribers(window.importData.step1.subscribers, batchSize);
-
- _.each(jQuery('select.mailpoet_subscribers_column_data_match'),
- function (column, columnIndex) {
- var columnId = jQuery(column).data('column-id');
- var validationRule = jQuery(column).data('validation-rule');
- if (columnId === 'ignore') {
- return;
- }
- columns[columnId] = { index: columnIndex, validation_rule: validationRule };
+ setTimeout(function () {
+ uploadElement.parse({
+ config: parseCSV(true)
});
+ }, 10);
+ }
+ });
- _.each(clickSubscribers, function () {
- queue.add(function (addQueue) {
- addQueue.pause();
- MailPoet.Ajax.post({
- api_version: window.mailpoet_api_version,
- endpoint: 'ImportExport',
- action: 'processImport',
- data: JSON.stringify({
- columns: columns,
- subscribers: clickSubscribers[batchNumber],
- timestamp: timestamp,
- segments: segmentSelectElement.val(),
- updateSubscribers: (jQuery(':radio[name="subscriber_update_option"]:checked').val() === 'yes')
- })
- }).done(function (response) {
- clickImportResults.created += response.data.created;
- clickImportResults.updated += response.data.updated;
- clickImportResults.segments = response.data.segments;
- clickImportResults.added_to_segment_with_welcome_notification =
- response.data.added_to_segment_with_welcome_notification;
- addQueue.run();
- }).fail(function (response) {
- MailPoet.Modal.loading(false);
- if (response.errors.length > 0) {
- MailPoet.Notice.error(
- response.errors.map(function (error) { return error.message; }),
- { scroll: true }
- );
- }
- });
- batchNumber += 1;
- });
+ /*
+ * MailChimp
+ */
+ mailChimpKeyInputElement.keyup(function () {
+ if (this.value.trim() === ''
+ || !/[a-zA-Z0-9]{32}-/.exec(this.value.trim())) {
+ mailChimpListsContainerElement.hide();
+ jQuery('.mailpoet_mailchimp-key-status')
+ .html('')
+ .removeClass('mailpoet_mailchimp-ok mailpoet_mailchimp-error');
+ toggleNextStepButton(mailChimpProcessButtonElement, 'off');
+ }
+ });
+
+ mailChimpKeyVerifyButtonElement.click(function () {
+ MailPoet.Modal.loading(true);
+ MailPoet.Ajax.post({
+ api_version: window.mailpoet_api_version,
+ endpoint: 'importExport',
+ action: 'getMailChimpLists',
+ data: {
+ api_key: mailChimpKeyInputElement.val()
+ }
+ }).always(function () {
+ MailPoet.Modal.loading(false);
+ }).done(function (response) {
+ jQuery('.mailpoet_mailchimp-key-status')
+ .html('')
+ .removeClass()
+ .addClass('mailpoet_mailchimp-key-status mailpoet_mailchimp-ok');
+ if (response.data.length === 0) {
+ jQuery('.mailpoet_mailchimp-key-status').html(MailPoet.I18n.t('noMailChimpLists'));
+ mailChimpListsContainerElement.hide();
+ toggleNextStepButton(mailChimpProcessButtonElement, 'off');
+ } else {
+ displayMailChimpLists(response.data);
+ }
+ }).fail(function (response) {
+ if (response.errors.length > 0) {
+ MailPoet.Notice.error(
+ response.errors.map(function (error) { return error.message; }),
+ { scroll: true }
+ );
+ }
+ });
+ });
+
+ mailChimpProcessButtonElement.click(function () {
+ if (mailChimpProcessButtonElement.closest('table a').hasClass('button-disabled')) {
+ return;
+ }
+ MailPoet.Modal.loading(true);
+ MailPoet.Ajax.post({
+ api_version: window.mailpoet_api_version,
+ endpoint: 'importExport',
+ action: 'getMailChimpSubscribers',
+ data: {
+ api_key: mailChimpKeyInputElement.val(),
+ lists: mailChimpListsContainerElement.find('select').val()
+ }
+ }).always(function () {
+ MailPoet.Modal.loading(false);
+ }).done(function (response) {
+ window.importData.step1 = response.data;
+ MailPoet.trackEvent('Subscribers import started', {
+ source: 'MailChimp',
+ 'MailPoet Free version': window.mailpoet_version
});
+ router.navigate('step2', { trigger: true });
+ }).fail(function (response) {
+ if (response.errors.length > 0) {
+ MailPoet.Notice.error(
+ response.errors.map(function (error) { return error.message; }),
+ { scroll: true }
+ );
+ }
+ });
+ });
+ });
- queue.run();
+ router.on('route:step2', function () {
+ var nextStepButton;
+ var previousStepButton;
+ var subscribers;
+ var subscribersDataTemplate;
+ var subscribersDataTemplatePartial;
+ var subscribersDataParseResultsTemplate;
+ var segmentSelectElement;
+ var maxRowsToShow;
+ var filler;
+ var fillerArray;
+ var fillerPosition;
+ var importResults;
+ var duplicates;
+ if (typeof (window.importData.step1) === 'undefined') {
+ router.navigate('step1', { trigger: true });
+ return;
+ }
+ // define reusable variables
+ nextStepButton = jQuery('#step2_process');
+ previousStepButton = jQuery('#return_to_step1');
+ // create a copy of subscribers object for further manipulation
+ subscribers = jQuery.extend(true, {}, window.importData.step1);
+ subscribersDataTemplate = Handlebars.compile(jQuery('#subscribers_data_template').html());
+ subscribersDataTemplatePartial = Handlebars.compile(jQuery('#subscribers_data_template_partial').html());
+ subscribersDataParseResultsTemplate = Handlebars.compile(jQuery('#subscribers_data_parse_results_template').html());
+ segmentSelectElement = jQuery('#mailpoet_segments_select');
+ maxRowsToShow = 10;
+ filler = '. . .';
+ // create an array of filler data with the same number of
+ // elements as in the subscribers' data row
+ fillerArray = Array.apply(
+ null,
+ new Array(subscribers.subscribers[0].length)
+ ).map(String.prototype.valueOf, filler);
- queue.onComplete(function () {
- MailPoet.Modal.loading(false);
- if (
- clickImportResults.errors.length > 0
- && !clickImportResults.updated
- && !clickImportResults.created
- ) {
- MailPoet.Notice.error(_.flatten(clickImportResults.errors)
- );
- } else {
- window.mailpoetSegments = clickImportResults.segments;
- clickImportResults.segments = _.map(segmentSelectElement.select2('data'),
- function (data) {
- return data.name;
+ showCurrentStep();
+
+ function toggleNextStepButton(condition) {
+ var disabled = 'button-disabled';
+ if (condition === 'on') {
+ nextStepButton.removeClass(disabled);
+ return;
+ }
+ nextStepButton.addClass(disabled);
+ }
+
+ // hide previous statistics/import results
+ jQuery('#subscribers_data_parse_results:visible').html('');
+ jQuery('#subscribers_data_import_results:visible').hide();
+
+ // show parse statistics if any duplicate/invalid records were found
+ if (subscribers.invalid.length || subscribers.duplicate.length) {
+ // count repeating e-mails inside duplicate array and present them in
+ // 'email (xN)' format
+ duplicates = {};
+ subscribers.duplicate.forEach(function (subscriberEmail) {
+ duplicates[subscriberEmail] = (duplicates[subscriberEmail] || 0) + 1;
+ });
+ subscribers.duplicate = [];
+ Object.keys(duplicates).forEach(function emailDuplicates(email) {
+ if (duplicates[email] > 1) {
+ subscribers.duplicate.push(email + ' (x' + duplicates[email] + ')');
+ } else {
+ subscribers.duplicate.push(email);
+ }
+ });
+
+ importResults = {
+ notice: MailPoet.I18n.t('importNoticeSkipped').replace(
+ '%1$s',
+ '' + (subscribers.invalid.length + subscribers.duplicate.length) + ''
+ ),
+ invalid: (subscribers.invalid.length)
+ ? MailPoet.I18n.t('importNoticeInvalid')
+ .replace('%1$s', '' + subscribers.invalid.length.toLocaleString() + '')
+ .replace('%2$s', subscribers.invalid.join(', '))
+ : null,
+ duplicate: (subscribers.duplicate.length)
+ ? MailPoet.I18n.t('importNoticeDuplicate')
+ .replace('%1$s', '' + subscribers.duplicate.length + '')
+ .replace('%2$s', subscribers.duplicate.join(', '))
+ : null
+ };
+ jQuery('#subscribers_data_parse_results').html(
+ subscribersDataParseResultsTemplate(importResults)
+ );
+ }
+
+ jQuery('.mailpoet_subscribers_data_parse_results_details_show')
+ .click(function () {
+ var details = jQuery('.mailpoet_subscribers_data_parse_results_details');
+ jQuery(details).toggle();
+ this.text =
+ (jQuery(details).is(':visible'))
+ ? MailPoet.I18n.t('hideDetails')
+ : MailPoet.I18n.t('showDetails');
+ });
+
+ // show available segments
+ if (window.mailpoetSegments.length) {
+ jQuery('.mailpoet_segments').show();
+ } else {
+ jQuery('.mailpoet_no_segments').show();
+ }
+
+ function enableSegmentSelection(segments) {
+ if (segmentSelectElement.data('select2')) {
+ segmentSelectElement
+ .html('')
+ .select2('destroy');
+ toggleNextStepButton('off');
+ }
+ segmentSelectElement
+ .select2({
+ data: segments,
+ width: '20em',
+ templateResult: function (item) {
+ var i = item;
+ i.subscriberCount = parseInt(i.subscriberCount, 10);
+ return i.name + ' (' + i.subscriberCount.toLocaleString() + ')';
+ },
+ templateSelection: function (item) {
+ var i = item;
+ i.subscriberCount = parseInt(i.subscriberCount, 10);
+ return i.name + ' (' + i.subscriberCount.toLocaleString() + ')';
+ }
+ })
+ .change(function () {
+ var segmentSelectionNotice = jQuery('[data-id="notice_segmentSelection"]');
+ if (!this.value) {
+ if (!segmentSelectionNotice.length) {
+ MailPoet.Notice.error(MailPoet.I18n.t('segmentSelectionRequired'), {
+ static: true,
+ scroll: true,
+ id: 'notice_segmentSelection',
+ hideClose: true
});
- window.importData.step2 = clickImportResults;
- enableSegmentSelection(window.mailpoetSegments);
- router.navigate('step3', { trigger: true });
+ }
+ toggleNextStepButton('off');
+ } else {
+ jQuery('[data-id="notice_segmentSelection"]').remove();
+ if (!jQuery('.mailpoet_notice.error:visible').length) {
+ toggleNextStepButton('on');
+ }
+ }
+ });
+ }
+
+ jQuery('.mailpoet_create_segment').click(function () {
+ MailPoet.Modal.popup({
+ title: MailPoet.I18n.t('addNewList'),
+ template: jQuery('#new_segment_template').html()
+ });
+ jQuery('#new_segment_name').keypress(function (e) {
+ if (e.which === 13) {
+ jQuery('#new_segment_process').click();
+ }
+ });
+ jQuery('#new_segment_process').click(function () {
+ var segmentName = jQuery('#new_segment_name').val().trim();
+ var segmentDescription = jQuery('#new_segment_description').val().trim();
+
+ MailPoet.Ajax.post({
+ api_version: window.mailpoet_api_version,
+ endpoint: 'ImportExport',
+ action: 'addSegment',
+ data: {
+ name: segmentName,
+ description: segmentDescription
+ }
+ }).done(function (response) {
+ var selectedValues;
+ window.mailpoetSegments.push({
+ id: response.data.id,
+ name: response.data.name,
+ subscriberCount: 0
+ });
+
+ selectedValues = segmentSelectElement.val();
+ if (selectedValues === null) {
+ selectedValues = [response.data.id];
+ } else {
+ selectedValues.push(response.data.id);
+ }
+
+ enableSegmentSelection(window.mailpoetSegments);
+ segmentSelectElement.val(selectedValues).trigger('change');
+ jQuery('.mailpoet_segments:hidden').show();
+ jQuery('.mailpoet_no_segments:visible').hide();
+ MailPoet.Modal.close();
+ }).fail(function (response) {
+ if (response.errors.length > 0) {
+ MailPoet.Notice.hide();
+ MailPoet.Notice.error(
+ response.errors.map(function (error) { return error.message; }),
+ { positionAfter: '#new_segment_name' }
+ );
}
});
});
-
- filterSubscribers();
- enableSegmentSelection(window.mailpoetSegments);
+ jQuery('#new_segment_cancel').click(function () {
+ MailPoet.Modal.close();
+ });
});
- router.on('route:step3', function () {
- var subscribersDataImportResultsTemplate;
- var exportMenuElement;
- var importResults;
- if (typeof (window.importData.step2) === 'undefined') {
- router.navigate('step2', { trigger: true });
+ // register partial template that will contain subscribers data
+ Handlebars.registerPartial(
+ 'subscribers_data_template_partial',
+ subscribersDataTemplatePartial
+ );
+
+ // autodetect column types
+ Handlebars.registerHelper(
+ 'show_and_match_columns',
+ function (helperSubscribers, options) {
+ var displayedColumns = [];
+ var displayedColumnsIds = [];
+ var columnData;
+ var columnId;
+ var headerName;
+ var headerNameMatch;
+ // go through all elements of the first row in subscribers data
+ Object
+ .keys(helperSubscribers.subscribers[0])
+ .forEach(function helperSubscribersLoop(i) {
+ columnData = helperSubscribers.subscribers[0][i];
+ columnId = 'ignore'; // set default column type
+ // if the column is not undefined and has a valid e-mail, set type as email
+ if (columnData % 1 !== 0 && window.mailpoet_email_regex.test(columnData)) {
+ columnId = 'email';
+ } else if (helperSubscribers.header) {
+ headerName = helperSubscribers.header[i];
+ headerNameMatch = window.mailpoetColumns.map(function (el) {
+ return el.name;
+ }).indexOf(headerName);
+ // set column type using header
+ if (headerNameMatch !== -1) {
+ columnId = window.mailpoetColumns[headerNameMatch].id;
+ } else if (headerName) { // set column type using header name
+ if (/first|first name|given name/i.test(headerName)) {
+ columnId = 'first_name';
+ } else if (/last|last name/i.test(headerName)) {
+ columnId = 'last_name';
+ }
+ }
+ }
+ // make sure the column id has not been previously selected
+ // (e.g., subscriber_first_name shouldn't be autodetected twice),
+ // except for "ignore"
+ columnId =
+ (columnId !== 'ignore'
+ && displayedColumnsIds.indexOf(columnId) === -1)
+ ? columnId
+ : 'ignore';
+ displayedColumns[i] = { column_id: columnId };
+ displayedColumnsIds.push(columnId);
+ });
+ return options.fn(displayedColumns);
+ });
+
+ // sanitize unsafe data
+ Handlebars.registerHelper('sanitize_data', function (data) {
+ return (data instanceof Handlebars.SafeString) ?
+ data :
+ new Handlebars.SafeString(Handlebars.Utils.escapeExpression(data));
+ });
+
+ // start array index from 1
+ Handlebars.registerHelper('calculate_index', function (rawIndex) {
+ var index = parseInt(rawIndex, 10);
+ // display filler data (e.g., ellipsis) if we've reached the maximum number of rows and
+ // subscribers count is greater than the maximum number of rows we're displaying
+ if (index === maxRowsToShow && subscribers.subscribersCount > (maxRowsToShow + 1)) {
+ fillerPosition = index;
+ return filler;
+ } else if (index === (subscribers.subscribers.length - 1)) {
+ // if we're on the last line, show the total count of subscribers data
+ return subscribers.subscribersCount.toLocaleString();
+ }
+ return index + 1;
+ });
+
+ // reduce subscribers object if the total length is greater than the
+ // maximum number of defined rows
+ if (subscribers.subscribersCount > (maxRowsToShow + 1)) {
+ subscribers.subscribers.splice(
+ maxRowsToShow, subscribers.subscribersCount - (maxRowsToShow + 1),
+ fillerArray
+ );
+ }
+
+ // filter subscribers' data to detect dates, emails, etc.
+ function filterSubscribers() {
+ var subscribersClone = jQuery.extend(true, {}, subscribers);
+ var preventNextStep = false;
+ var displayedColumns;
+ jQuery(
+ '[data-id="notice_invalidEmail"], [data-id="notice_invalidDate"]')
+ .remove();
+ displayedColumns = jQuery.map(
+ jQuery('.mailpoet_subscribers_column_data_match'), function (element, elementIndex) {
+ var columnId = jQuery(element).data('column-id');
+ var validationRule = jQuery(element).data('validation-rule');
+ jQuery(element).val(columnId).trigger('change');
+ return {
+ id: columnId,
+ index: elementIndex,
+ validationRule: validationRule,
+ element: element
+ };
+ });
+ // iterate through the object of mailpoet columns
+ jQuery.map(window.mailpoetColumns, function (column) {
+ var firstRowData;
+ var validationRule;
+ var testedFormat;
+ var allowedDateFormats;
+ // check if the column id matches the selected id of one of the
+ // subscriber's data columns
+ var matchedColumn = _.find(
+ displayedColumns,
+ function (data) { return data.id === column.id; }
+ );
+ // EMAIL filter: if the first value in the column doesn't have a valid
+ // email, hide the next button
+ if (column.id === 'email') {
+ if (!window.mailpoet_email_regex.test(
+ subscribersClone.subscribers[0][matchedColumn.index])
+ ) {
+ preventNextStep = true;
+ if (!jQuery('[data-id="notice_invalidEmail"]').length) {
+ MailPoet.Notice.error(MailPoet.I18n.t('columnContainsInvalidElement'), {
+ static: true,
+ scroll: true,
+ hideClose: true,
+ id: 'invalidEmail'
+ });
+ }
+ } else {
+ MailPoet.Notice.hide('invalidEmail');
+ }
+ }
+ // DATE filter: if column type is date, check if we can recognize it
+ if (column.type === 'date' && matchedColumn) {
+ allowedDateFormats = [
+ Moment.ISO_8601,
+ 'YYYY/MM/DD',
+ 'MM/DD/YYYY',
+ 'DD/MM/YYYY',
+ 'YYYY/MM/DD',
+ 'YYYY/DD/MM',
+ 'MM/YYYY',
+ 'YYYY/MM',
+ 'YYYY'
+ ];
+ firstRowData = subscribersClone.subscribers[0][matchedColumn.index];
+ validationRule = false;
+ // check if date exists
+ if (firstRowData.trim() === '') {
+ subscribersClone.subscribers[0][matchedColumn.index] =
+ ''
+ + MailPoet.I18n.t('emptyFirstRowDate')
+ + ' ';
+ preventNextStep = true;
+ } else {
+ Object.keys(allowedDateFormats).forEach(function allowedDateFormatsLoop(format) {
+ testedFormat = allowedDateFormats[format];
+ if (Moment(firstRowData, testedFormat, true).isValid()) {
+ validationRule = (typeof (testedFormat) === 'function') ?
+ 'datetime' :
+ testedFormat;
+ // set validation on the column element
+ jQuery(matchedColumn.element).data('validation-rule', validationRule);
+ return;
+ }
+ if (validationRule === 'datetime') {
+ validationRule = Moment.ISO_8601;
+ }
+ });
+ }
+ jQuery.map(subscribersClone.subscribers, function (dataSubscribers, index) {
+ var data = dataSubscribers;
+ var rowData = data[matchedColumn.index];
+ var date = Moment(rowData, testedFormat, true);
+ if (index === fillerPosition || rowData.trim() === '') return;
+ // validate date
+ if (date.isValid()) {
+ data[matchedColumn.index] = new Handlebars.SafeString(
+ Handlebars.Utils.escapeExpression(data[matchedColumn.index])
+ + ''
+ + MailPoet.Date.format(date)
+ + ' '
+ );
+ } else {
+ data[matchedColumn.index] = new Handlebars.SafeString(
+ Handlebars.Utils.escapeExpression(data[matchedColumn.index])
+ + ''
+ + (new Handlebars.SafeString(MailPoet.I18n.t('dateMatchError')))
+ + ' '
+ );
+ preventNextStep = true;
+ }
+ });
+ if (preventNextStep && !jQuery('.mailpoet_invalidDate').length) {
+ MailPoet.Notice.error(MailPoet.I18n.t('columnContainsInvalidDate'), {
+ static: true,
+ scroll: true,
+ hideClose: true,
+ id: 'invalidDate'
+ });
+ }
+ }
+ });
+ // refresh table with susbcribers' data
+ jQuery('#subscribers_data > table > tbody')
+ .html(subscribersDataTemplatePartial(subscribersClone));
+
+ if (preventNextStep) {
+ toggleNextStepButton('off');
+ } else if (!jQuery('.mailpoet_notice.error:visible').length
+ && segmentSelectElement.val()) {
+ toggleNextStepButton('on');
+ }
+ }
+
+ // render template
+ jQuery('#subscribers_data > table').html(subscribersDataTemplate(subscribers));
+
+ // filter displayed data
+ jQuery('select.mailpoet_subscribers_column_data_match')
+ .select2({
+ data: window.mailpoetColumnsSelect2,
+ width: '15em',
+ templateResult: function (item) {
+ return item.name;
+ },
+ templateSelection: function (item) {
+ return item.name;
+ }
+ })
+ .on('select2:selecting', function (selectEvent) {
+ var selectElement = this;
+ var selectedOptionId = selectEvent.params.args.data.id;
+ // CREATE CUSTOM FIELD
+ if (selectedOptionId === 'create') {
+ selectEvent.preventDefault();
+ jQuery(selectElement).select2('close');
+ MailPoet.Modal.popup({
+ title: MailPoet.I18n.t('addNewField'),
+ template: jQuery('#form_template_field_form').html()
+ });
+ jQuery('#form_field_new').parsley().on('form:submit', function () {
+ // get data
+ var data = jQuery(this.$element).mailpoetSerializeObject();
+
+ // save custom field
+ MailPoet.Ajax.post({
+ api_version: window.mailpoet_api_version,
+ endpoint: 'customFields',
+ action: 'save',
+ data: data
+ }).done(function (response) {
+ var newColumnData = {
+ id: response.data.id,
+ name: response.data.name,
+ type: response.data.type,
+ params: response.data.params,
+ custom: true
+ };
+ // if this is the first custom column, create an "optgroup"
+ if (window.mailpoetColumnsSelect2.length === 2) {
+ window.mailpoetColumnsSelect2.push({
+ name: MailPoet.I18n.t('userColumns'),
+ children: []
+ });
+ }
+ window.mailpoetColumnsSelect2[2].children.push(newColumnData);
+ window.mailpoetColumns.push(newColumnData);
+ jQuery('select.mailpoet_subscribers_column_data_match')
+ .each(function () {
+ jQuery(this)
+ .html('')
+ .select2('destroy')
+ .select2({
+ data: window.mailpoetColumnsSelect2,
+ width: '15em',
+ templateResult: function (item) {
+ return item.name;
+ },
+ templateSelection: function (item) {
+ return item.name;
+ }
+ });
+ });
+ jQuery(selectElement).data('column-id', newColumnData.id);
+ jQuery(selectElement).data('validation-rule', false);
+ filterSubscribers();
+ // close popup
+ MailPoet.Modal.close();
+ }).fail(function (response) {
+ if (response.errors.length > 0) {
+ MailPoet.Notice.error(
+ response.errors.map(function (error) { return error.message; }),
+ { positionAfter: '#field_name' }
+ );
+ }
+ });
+ return false;
+ });
+ } else {
+ // CHANGE COLUMN
+ // check for duplicate values in all select options
+ jQuery('select.mailpoet_subscribers_column_data_match')
+ .each(function () {
+ var element = this;
+ var elementId = jQuery(element).val();
+ // if another column has the same value and it's not an 'ignore',
+ // prompt user
+ if (elementId === selectedOptionId
+ && elementId !== 'ignore') {
+ if (confirm(MailPoet.I18n.t('selectedValueAlreadyMatched') + ' ' + MailPoet.I18n.t('confirmCorrespondingColumn'))) { // eslint-disable-line no-alert
+ jQuery(element).data('column-id', 'ignore');
+ } else {
+ selectEvent.preventDefault();
+ jQuery(selectElement).select2('close');
+ }
+ }
+ });
+ }
+ })
+ .on('select2:select', function (selectEvent) {
+ var selectElement = this;
+ var selectedOptionId = selectEvent.params.data.id;
+ jQuery(selectElement).data('column-id', selectedOptionId);
+ filterSubscribers();
+ });
+
+ previousStepButton.off().on('click', function () {
+ router.navigate('step1', { trigger: true });
+ });
+
+ nextStepButton.off().on('click', function () {
+ var columns = {};
+ var queue = new jQuery.AsyncQueue();
+ var batchNumber = 0;
+ var batchSize = 2000;
+ var timestamp = Date.now() / 1000;
+ var clickImportResults = {
+ created: 0,
+ updated: 0,
+ errors: [],
+ segments: []
+ };
+ var clickSubscribers;
+ var splitSubscribers;
+
+ if (jQuery(this).hasClass('button-disabled')) {
return;
}
-
- showCurrentStep();
-
- if (window.importData.step2.errors.length > 0) {
- MailPoet.Notice.error(_.flatten(window.importData.step2.errors));
- }
-
- MailPoet.trackEvent('Subscribers import finished', {
- 'Subscribers created': window.importData.step2.created,
- 'Subscribers updated': window.importData.step2.updated,
- 'MailPoet Free version': window.mailpoet_version
- });
-
- // display statistics
- subscribersDataImportResultsTemplate =
- Handlebars.compile(jQuery('#subscribers_data_import_results_template').html());
- exportMenuElement = jQuery('span.mailpoet_export');
- importResults = {
- created: (window.importData.step2.created)
- ? MailPoet.I18n.t('subscribersCreated')
- .replace('%1$s', '' + window.importData.step2.created.toLocaleString() + '')
- .replace('%2$s', '"' + window.importData.step2.segments.join('", "') + '"')
- : false,
- updated: (window.importData.step2.updated)
- ? MailPoet.I18n.t('subscribersUpdated')
- .replace('%1$s', '' + window.importData.step2.updated.toLocaleString() + '')
- .replace('%2$s', '"' + window.importData.step2.segments.join('", "') + '"')
- : false,
- no_action: (!window.importData.step2.created && !window.importData.step2.updated),
- added_to_segment_with_welcome_notification:
- window.importData.step2.added_to_segment_with_welcome_notification
+ MailPoet.Modal.loading(true);
+ splitSubscribers = function (localSubscribers, size) {
+ return localSubscribers.reduce(function (res, item, index) {
+ if (index % size === 0) {
+ res.push([]);
+ }
+ res[res.length - 1].push(item);
+ return res;
+ }, []);
};
+ clickSubscribers = splitSubscribers(window.importData.step1.subscribers, batchSize);
- jQuery('#subscribers_data_import_results')
- .html(subscribersDataImportResultsTemplate(importResults))
- .show();
+ _.each(jQuery('select.mailpoet_subscribers_column_data_match'),
+ function (column, columnIndex) {
+ var columnId = jQuery(column).data('column-id');
+ var validationRule = jQuery(column).data('validation-rule');
+ if (columnId === 'ignore') {
+ return;
+ }
+ columns[columnId] = { index: columnIndex, validation_rule: validationRule };
+ });
- jQuery('a.mailpoet_import_again').off().click(function () {
- jQuery('#subscribers_data_import_results').hide();
- router.navigate('step1', { trigger: true });
+ _.each(clickSubscribers, function () {
+ queue.add(function (addQueue) {
+ addQueue.pause();
+ MailPoet.Ajax.post({
+ api_version: window.mailpoet_api_version,
+ endpoint: 'ImportExport',
+ action: 'processImport',
+ data: JSON.stringify({
+ columns: columns,
+ subscribers: clickSubscribers[batchNumber],
+ timestamp: timestamp,
+ segments: segmentSelectElement.val(),
+ updateSubscribers: (jQuery(':radio[name="subscriber_update_option"]:checked').val() === 'yes')
+ })
+ }).done(function (response) {
+ clickImportResults.created += response.data.created;
+ clickImportResults.updated += response.data.updated;
+ clickImportResults.segments = response.data.segments;
+ clickImportResults.added_to_segment_with_welcome_notification =
+ response.data.added_to_segment_with_welcome_notification;
+ addQueue.run();
+ }).fail(function (response) {
+ MailPoet.Modal.loading(false);
+ if (response.errors.length > 0) {
+ MailPoet.Notice.error(
+ response.errors.map(function (error) { return error.message; }),
+ { scroll: true }
+ );
+ }
+ });
+ batchNumber += 1;
+ });
});
- jQuery('a.mailpoet_view_subscribers').off().click(function () {
- window.location.href = 'admin.php?page=mailpoet-subscribers';
+ queue.run();
+
+ queue.onComplete(function () {
+ MailPoet.Modal.loading(false);
+ if (
+ clickImportResults.errors.length > 0
+ && !clickImportResults.updated
+ && !clickImportResults.created
+ ) {
+ MailPoet.Notice.error(_.flatten(clickImportResults.errors)
+ );
+ } else {
+ window.mailpoetSegments = clickImportResults.segments;
+ clickImportResults.segments = _.map(segmentSelectElement.select2('data'),
+ function (data) {
+ return data.name;
+ });
+ window.importData.step2 = clickImportResults;
+ enableSegmentSelection(window.mailpoetSegments);
+ router.navigate('step3', { trigger: true });
+ }
});
-
- // if new subscribers were created and the export menu item is hidden
- // (it's shown only when there are subscribers), display it
- if (importResults.created && exportMenuElement.not(':visible')) {
- exportMenuElement.show();
- }
-
- // reset previous step's data so that coming back to this step is prevented
- window.importData.step2 = undefined;
});
- if (!Backbone.History.started) {
- Backbone.history.start();
- }
+ filterSubscribers();
+ enableSegmentSelection(window.mailpoetSegments);
});
+
+ router.on('route:step3', function () {
+ var subscribersDataImportResultsTemplate;
+ var exportMenuElement;
+ var importResults;
+ if (typeof (window.importData.step2) === 'undefined') {
+ router.navigate('step2', { trigger: true });
+ return;
+ }
+
+ showCurrentStep();
+
+ if (window.importData.step2.errors.length > 0) {
+ MailPoet.Notice.error(_.flatten(window.importData.step2.errors));
+ }
+
+ MailPoet.trackEvent('Subscribers import finished', {
+ 'Subscribers created': window.importData.step2.created,
+ 'Subscribers updated': window.importData.step2.updated,
+ 'MailPoet Free version': window.mailpoet_version
+ });
+
+ // display statistics
+ subscribersDataImportResultsTemplate =
+ Handlebars.compile(jQuery('#subscribers_data_import_results_template').html());
+ exportMenuElement = jQuery('span.mailpoet_export');
+ importResults = {
+ created: (window.importData.step2.created)
+ ? MailPoet.I18n.t('subscribersCreated')
+ .replace('%1$s', '' + window.importData.step2.created.toLocaleString() + '')
+ .replace('%2$s', '"' + window.importData.step2.segments.join('", "') + '"')
+ : false,
+ updated: (window.importData.step2.updated)
+ ? MailPoet.I18n.t('subscribersUpdated')
+ .replace('%1$s', '' + window.importData.step2.updated.toLocaleString() + '')
+ .replace('%2$s', '"' + window.importData.step2.segments.join('", "') + '"')
+ : false,
+ no_action: (!window.importData.step2.created && !window.importData.step2.updated),
+ added_to_segment_with_welcome_notification:
+ window.importData.step2.added_to_segment_with_welcome_notification
+ };
+
+ jQuery('#subscribers_data_import_results')
+ .html(subscribersDataImportResultsTemplate(importResults))
+ .show();
+
+ jQuery('a.mailpoet_import_again').off().click(function () {
+ jQuery('#subscribers_data_import_results').hide();
+ router.navigate('step1', { trigger: true });
+ });
+
+ jQuery('a.mailpoet_view_subscribers').off().click(function () {
+ window.location.href = 'admin.php?page=mailpoet-subscribers';
+ });
+
+ // if new subscribers were created and the export menu item is hidden
+ // (it's shown only when there are subscribers), display it
+ if (importResults.created && exportMenuElement.not(':visible')) {
+ exportMenuElement.show();
+ }
+
+ // reset previous step's data so that coming back to this step is prevented
+ window.importData.step2 = undefined;
+ });
+
+ if (!Backbone.History.started) {
+ Backbone.history.start();
+ }
});
+ });
diff --git a/assets/js/src/subscribers/list.jsx b/assets/js/src/subscribers/list.jsx
index 870e28f684..b0a419694f 100644
--- a/assets/js/src/subscribers/list.jsx
+++ b/assets/js/src/subscribers/list.jsx
@@ -128,8 +128,8 @@ const bulkActions = [
onSuccess: function onSuccess(response) {
MailPoet.Notice.success(
MailPoet.I18n.t('multipleSubscribersMovedToList')
- .replace('%$1d', (Number(response.meta.count)).toLocaleString())
- .replace('%$2s', response.meta.segment)
+ .replace('%$1d', (Number(response.meta.count)).toLocaleString())
+ .replace('%$2s', response.meta.segment)
);
},
},
@@ -160,8 +160,8 @@ const bulkActions = [
onSuccess: function onSuccess(response) {
MailPoet.Notice.success(
MailPoet.I18n.t('multipleSubscribersAddedToList')
- .replace('%$1d', (Number(response.meta.count)).toLocaleString())
- .replace('%$2s', response.meta.segment)
+ .replace('%$1d', (Number(response.meta.count)).toLocaleString())
+ .replace('%$2s', response.meta.segment)
);
},
},
@@ -192,8 +192,8 @@ const bulkActions = [
onSuccess: function onSuccess(response) {
MailPoet.Notice.success(
MailPoet.I18n.t('multipleSubscribersRemovedFromList')
- .replace('%$1d', (Number(response.meta.count)).toLocaleString())
- .replace('%$2s', response.meta.segment)
+ .replace('%$1d', (Number(response.meta.count)).toLocaleString())
+ .replace('%$2s', response.meta.segment)
);
},
},
@@ -203,7 +203,7 @@ const bulkActions = [
onSuccess: function onSuccess(response) {
MailPoet.Notice.success(
MailPoet.I18n.t('multipleSubscribersRemovedFromAllLists')
- .replace('%$1d', (Number(response.meta.count)).toLocaleString())
+ .replace('%$1d', (Number(response.meta.count)).toLocaleString())
);
},
},
@@ -213,7 +213,7 @@ const bulkActions = [
onSuccess: function onSuccess(response) {
MailPoet.Notice.success(
MailPoet.I18n.t('multipleConfirmationEmailsSent')
- .replace('%$1d', (Number(response.meta.count)).toLocaleString())
+ .replace('%$1d', (Number(response.meta.count)).toLocaleString())
);
},
},
diff --git a/composer.json b/composer.json
index b601f095a5..1aac86b781 100644
--- a/composer.json
+++ b/composer.json
@@ -6,34 +6,33 @@
}
],
"require": {
- "php": ">=5.3.3",
+ "php": ">=5.4",
"twig/twig": "1.*",
"cerdic/css-tidy": "^1.5.5",
"tburry/pquery": "^1.1.1",
- "j4mie/paris": "1.5.4",
+ "j4mie/paris": "1.5.6",
"swiftmailer/swiftmailer": "^5.4",
"mtdowling/cron-expression": "^1.1",
"nesbot/carbon": "^1.21",
"soundasleep/html2text": "dev-master",
"sabberworm/php-css-parser": "^8.1",
- "symfony/polyfill-xml": "^1.3",
- "symfony/polyfill-mbstring": "1.6.0",
+ "symfony/polyfill-php72": "^1.8",
+ "symfony/polyfill-mbstring": "1.8.0",
"sensiolabs/security-checker": "^4.1"
},
"require-dev": {
"codeception/aspect-mock": "2.0.1",
- "codeception/codeception": "2.3.5",
- "codeception/verify": "^0.3.3",
- "consolidation/robo": "^1.0.5",
+ "codeception/codeception": "2.4.2",
+ "codeception/verify": "^0.4.0",
+ "consolidation/robo": "^1.3.0",
"henrikbjorn/lurker": "^1.2",
- "lucatume/wp-browser": "1.21.20",
- "phpunit/phpunit": "4.8.21",
+ "lucatume/wp-browser": "1.21.23",
+ "phpunit/phpunit": "5.7.27",
"vlucas/phpdotenv": "^2.4.0",
"umpirsky/twig-gettext-extractor": "1.1.*",
- "raveren/kint": "^1.0",
+ "kint-php/kint": "^2.2",
"squizlabs/php_codesniffer": "^2.8.1",
- "wimg/php-compatibility": "^7.1.2",
- "simplyadmire/composer-plugins" : "@dev"
+ "wimg/php-compatibility": "^7.1.2"
},
"autoload": {
"psr-4": {
@@ -44,5 +43,10 @@
"scripts": {
"post-update-cmd": "rm -rf vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/PHPCompatibility; cp -rp vendor/wimg/php-compatibility vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/PHPCompatibility",
"post-install-cmd": "rm -rf vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/PHPCompatibility; cp -rp vendor/wimg/php-compatibility vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/PHPCompatibility"
+ },
+ "config": {
+ "platform": {
+ "php": "5.6.30"
+ }
}
}
diff --git a/composer.lock b/composer.lock
index 1322c66f00..04bfdaac31 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,31 +4,37 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "content-hash": "da2fe33a4683f03def7d068eaf02ce58",
+ "content-hash": "b3af53db5ffa008581492e9a33078474",
"packages": [
{
"name": "cerdic/css-tidy",
- "version": "v1.5.6",
+ "version": "v1.5.7",
"source": {
"type": "git",
"url": "https://github.com/Cerdic/CSSTidy.git",
- "reference": "d4443352da925610919f1b49c5f6bb68216b6b60"
+ "reference": "226bca013a4dc58b6471931564c6b568af2b66e9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Cerdic/CSSTidy/zipball/d4443352da925610919f1b49c5f6bb68216b6b60",
- "reference": "d4443352da925610919f1b49c5f6bb68216b6b60",
+ "url": "https://api.github.com/repos/Cerdic/CSSTidy/zipball/226bca013a4dc58b6471931564c6b568af2b66e9",
+ "reference": "226bca013a4dc58b6471931564c6b568af2b66e9",
"shasum": ""
},
+ "require-dev": {
+ "pear/text_diff": "^1.2",
+ "simpletest/simpletest": "^1.1"
+ },
"type": "library",
"autoload": {
"classmap": [
- "."
+ "class.csstidy_optimise.php",
+ "class.csstidy_print.php",
+ "class.csstidy.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL-2.1"
+ "LGPL-2.1-or-later"
],
"authors": [
{
@@ -37,20 +43,20 @@
}
],
"description": "CSSTidy is a CSS minifier",
- "time": "2017-09-29T14:18:45+00:00"
+ "time": "2018-04-10T09:09:46+00:00"
},
{
"name": "composer/ca-bundle",
- "version": "1.1.0",
+ "version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288"
+ "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/943b2c4fcad1ef178d16a713c2468bf7e579c288",
- "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169",
+ "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169",
"shasum": ""
},
"require": {
@@ -59,7 +65,7 @@
"php": "^5.3.2 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.8.35",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
"psr/log": "^1.0",
"symfony/process": "^2.5 || ^3.0 || ^4.0"
},
@@ -93,26 +99,27 @@
"ssl",
"tls"
],
- "time": "2017-11-29T09:37:33+00:00"
+ "time": "2018-03-29T19:57:20+00:00"
},
{
"name": "j4mie/idiorm",
- "version": "v1.5.3",
+ "version": "v1.5.6",
"source": {
"type": "git",
"url": "https://github.com/j4mie/idiorm.git",
- "reference": "f2f170c44af4761fef8ef34d6dbc237cd95df799"
+ "reference": "ee3022fcf71232309112714ca4a7760105002f99"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/j4mie/idiorm/zipball/f2f170c44af4761fef8ef34d6dbc237cd95df799",
- "reference": "f2f170c44af4761fef8ef34d6dbc237cd95df799",
+ "url": "https://api.github.com/repos/j4mie/idiorm/zipball/ee3022fcf71232309112714ca4a7760105002f99",
+ "reference": "ee3022fcf71232309112714ca4a7760105002f99",
"shasum": ""
},
"require": {
"php": ">=5.2.0"
},
"require-dev": {
+ "ext-pdo_sqlite": "*",
"phpunit/phpunit": "^4.8"
},
"type": "library",
@@ -154,26 +161,29 @@
"orm",
"query builder"
],
- "time": "2017-03-21T01:31:25+00:00"
+ "time": "2018-05-30T23:57:49+00:00"
},
{
"name": "j4mie/paris",
- "version": "v1.5.4",
+ "version": "v1.5.6",
"source": {
"type": "git",
"url": "https://github.com/j4mie/paris.git",
- "reference": "6cd7a3d8ffb721068dd58e508a8121b92b4068b8"
+ "reference": "ec43a1f7f59d237c147495d29523da52e375f9e7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/j4mie/paris/zipball/6cd7a3d8ffb721068dd58e508a8121b92b4068b8",
- "reference": "6cd7a3d8ffb721068dd58e508a8121b92b4068b8",
+ "url": "https://api.github.com/repos/j4mie/paris/zipball/ec43a1f7f59d237c147495d29523da52e375f9e7",
+ "reference": "ec43a1f7f59d237c147495d29523da52e375f9e7",
"shasum": ""
},
"require": {
"j4mie/idiorm": "1.5.*",
"php": ">=5.2.0"
},
+ "require-dev": {
+ "phpunit/phpunit": "^4.8"
+ },
"type": "library",
"autoload": {
"classmap": [
@@ -214,7 +224,7 @@
"orm",
"paris"
],
- "time": "2014-09-23T10:49:36+00:00"
+ "time": "2017-03-21T02:13:30+00:00"
},
{
"name": "mtdowling/cron-expression",
@@ -262,35 +272,30 @@
},
{
"name": "nesbot/carbon",
- "version": "1.22.1",
+ "version": "1.29.2",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc"
+ "reference": "ed6aa898982f441ccc9b2acdec51490f2bc5d337"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc",
- "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ed6aa898982f441ccc9b2acdec51490f2bc5d337",
+ "reference": "ed6aa898982f441ccc9b2acdec51490f2bc5d337",
"shasum": ""
},
"require": {
- "php": ">=5.3.0",
- "symfony/translation": "~2.6 || ~3.0"
+ "php": ">=5.3.9",
+ "symfony/translation": "~2.6 || ~3.0 || ~4.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "~2",
- "phpunit/phpunit": "~4.0 || ~5.0"
+ "phpunit/phpunit": "^4.8.35 || ^5.7"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.23-dev"
- }
- },
"autoload": {
"psr-4": {
- "Carbon\\": "src/Carbon/"
+ "": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -311,7 +316,7 @@
"datetime",
"time"
],
- "time": "2017-01-16T07:55:07+00:00"
+ "time": "2018-05-29T15:23:46+00:00"
},
{
"name": "psr/log",
@@ -406,16 +411,16 @@
},
{
"name": "sensiolabs/security-checker",
- "version": "v4.1.6",
+ "version": "v4.1.8",
"source": {
"type": "git",
"url": "https://github.com/sensiolabs/security-checker.git",
- "reference": "387b6a3b723ba35588b33d5f8d14e28ed608bd30"
+ "reference": "dc270d5fec418cc6ac983671dba5d80ffaffb142"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/387b6a3b723ba35588b33d5f8d14e28ed608bd30",
- "reference": "387b6a3b723ba35588b33d5f8d14e28ed608bd30",
+ "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/dc270d5fec418cc6ac983671dba5d80ffaffb142",
+ "reference": "dc270d5fec418cc6ac983671dba5d80ffaffb142",
"shasum": ""
},
"require": {
@@ -447,7 +452,7 @@
}
],
"description": "A security checker for your composer.lock",
- "time": "2017-10-29T18:48:08+00:00"
+ "time": "2018-02-28T22:10:01+00:00"
},
{
"name": "soundasleep/html2text",
@@ -500,20 +505,20 @@
"email": "support@jevon.org",
"source": "https://github.com/mailpoet/html2text/tree/master"
},
- "time": "2018-04-08 14:18:46"
+ "time": "2018-04-08T14:18:46+00:00"
},
{
"name": "swiftmailer/swiftmailer",
- "version": "v5.4.8",
+ "version": "v5.4.9",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
- "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517"
+ "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/9a06dc570a0367850280eefd3f1dc2da45aef517",
- "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91",
+ "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91",
"shasum": ""
},
"require": {
@@ -548,26 +553,26 @@
}
],
"description": "Swiftmailer, free feature-rich PHP mailer",
- "homepage": "http://swiftmailer.org",
+ "homepage": "https://swiftmailer.symfony.com",
"keywords": [
"email",
"mail",
"mailer"
],
- "time": "2017-05-01T15:54:03+00:00"
+ "time": "2018-01-23T07:37:21+00:00"
},
{
"name": "symfony/console",
- "version": "v3.3.14",
+ "version": "v3.3.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "55497618e68845b6f92a66d13187138ac3d7750e"
+ "reference": "af7ec995de93671c03cc1b4e3176c8588bc79dcc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/55497618e68845b6f92a66d13187138ac3d7750e",
- "reference": "55497618e68845b6f92a66d13187138ac3d7750e",
+ "url": "https://api.github.com/repos/symfony/console/zipball/af7ec995de93671c03cc1b4e3176c8588bc79dcc",
+ "reference": "af7ec995de93671c03cc1b4e3176c8588bc79dcc",
"shasum": ""
},
"require": {
@@ -622,20 +627,20 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2017-11-29T12:25:49+00:00"
+ "time": "2018-01-29T09:02:23+00:00"
},
{
"name": "symfony/debug",
- "version": "v3.4.1",
+ "version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "fb2001e5d85f95d8b6ab94ae3be5d2672df128fd"
+ "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/fb2001e5d85f95d8b6ab94ae3be5d2672df128fd",
- "reference": "fb2001e5d85f95d8b6ab94ae3be5d2672df128fd",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/b28fd73fefbac341f673f5efd707d539d6a19f68",
+ "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68",
"shasum": ""
},
"require": {
@@ -678,20 +683,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2017-11-21T09:01:46+00:00"
+ "time": "2018-05-16T14:03:39+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.6.0",
+ "version": "v1.8.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296"
+ "reference": "3296adf6a6454a050679cde90f95350ad604b171"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296",
- "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
+ "reference": "3296adf6a6454a050679cde90f95350ad604b171",
"shasum": ""
},
"require": {
@@ -703,7 +708,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.6-dev"
+ "dev-master": "1.8-dev"
}
},
"autoload": {
@@ -737,20 +742,20 @@
"portable",
"shim"
],
- "time": "2017-10-11T12:05:26+00:00"
+ "time": "2018-04-26T10:06:28+00:00"
},
{
"name": "symfony/polyfill-php72",
- "version": "v1.6.0",
+ "version": "v1.8.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "6de4f4884b97abbbed9f0a84a95ff2ff77254254"
+ "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/6de4f4884b97abbbed9f0a84a95ff2ff77254254",
- "reference": "6de4f4884b97abbbed9f0a84a95ff2ff77254254",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/a4576e282d782ad82397f3e4ec1df8e0f0cafb46",
+ "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46",
"shasum": ""
},
"require": {
@@ -759,7 +764,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.6-dev"
+ "dev-master": "1.8-dev"
}
},
"autoload": {
@@ -792,68 +797,20 @@
"portable",
"shim"
],
- "time": "2017-10-11T12:05:26+00:00"
- },
- {
- "name": "symfony/polyfill-xml",
- "version": "v1.6.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-xml.git",
- "reference": "d7bcb5c3bb1832c532379df50825c08f43a64134"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-xml/zipball/d7bcb5c3bb1832c532379df50825c08f43a64134",
- "reference": "d7bcb5c3bb1832c532379df50825c08f43a64134",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "symfony/polyfill-php72": "~1.4"
- },
- "type": "metapackage",
- "extra": {
- "branch-alias": {
- "dev-master": "1.6-dev"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for xml's utf8_encode and utf8_decode functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "time": "2017-10-11T12:05:26+00:00"
+ "time": "2018-04-26T10:06:28+00:00"
},
{
"name": "symfony/translation",
- "version": "v2.8.32",
+ "version": "v2.8.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "0c63d56516c4c4c323228ca6348eadb7c91b1daf"
+ "reference": "c6a27966a92fa361bf2c3a938abc6dee91f7ad67"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/0c63d56516c4c4c323228ca6348eadb7c91b1daf",
- "reference": "0c63d56516c4c4c323228ca6348eadb7c91b1daf",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/c6a27966a92fa361bf2c3a938abc6dee91f7ad67",
+ "reference": "c6a27966a92fa361bf2c3a938abc6dee91f7ad67",
"shasum": ""
},
"require": {
@@ -870,7 +827,7 @@
"symfony/yaml": "~2.2|~3.0.0"
},
"suggest": {
- "psr/log": "To use logging capability in translator",
+ "psr/log-implementation": "To use logging capability in translator",
"symfony/config": "",
"symfony/yaml": ""
},
@@ -904,7 +861,7 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
- "time": "2017-11-07T14:08:47+00:00"
+ "time": "2018-05-21T09:59:10+00:00"
},
{
"name": "tburry/pquery",
@@ -1027,16 +984,16 @@
"packages-dev": [
{
"name": "antecedent/patchwork",
- "version": "2.1.6",
+ "version": "2.1.8",
"source": {
"type": "git",
"url": "https://github.com/antecedent/patchwork.git",
- "reference": "91608c0c0b3b0d6b04e5bd11406ae0d5d5f7c26e"
+ "reference": "3bb81ace3914c220aa273d1c0603d5e1b454c0d7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/antecedent/patchwork/zipball/91608c0c0b3b0d6b04e5bd11406ae0d5d5f7c26e",
- "reference": "91608c0c0b3b0d6b04e5bd11406ae0d5d5f7c26e",
+ "url": "https://api.github.com/repos/antecedent/patchwork/zipball/3bb81ace3914c220aa273d1c0603d5e1b454c0d7",
+ "reference": "3bb81ace3914c220aa273d1c0603d5e1b454c0d7",
"shasum": ""
},
"require": {
@@ -1064,7 +1021,7 @@
"runkit",
"testing"
],
- "time": "2017-11-05T10:37:19+00:00"
+ "time": "2018-02-19T18:52:50+00:00"
},
{
"name": "bacon/bacon-string-utils",
@@ -1121,16 +1078,16 @@
},
{
"name": "behat/gherkin",
- "version": "v4.4.5",
+ "version": "v4.5.1",
"source": {
"type": "git",
"url": "https://github.com/Behat/Gherkin.git",
- "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74"
+ "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74",
- "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74",
+ "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a",
+ "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a",
"shasum": ""
},
"require": {
@@ -1176,7 +1133,7 @@
"gherkin",
"parser"
],
- "time": "2016-10-30T11:50:56+00:00"
+ "time": "2017-08-30T11:04:43+00:00"
},
{
"name": "codeception/aspect-mock",
@@ -1223,62 +1180,58 @@
},
{
"name": "codeception/codeception",
- "version": "2.3.5",
+ "version": "2.4.2",
"source": {
"type": "git",
"url": "https://github.com/Codeception/Codeception.git",
- "reference": "e807cd458eb9f7ae7464f33ad835a2f54aa73194"
+ "reference": "bc8433e3da75bc28c47df6f3afc22b9d4f65c0b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Codeception/Codeception/zipball/e807cd458eb9f7ae7464f33ad835a2f54aa73194",
- "reference": "e807cd458eb9f7ae7464f33ad835a2f54aa73194",
+ "url": "https://api.github.com/repos/Codeception/Codeception/zipball/bc8433e3da75bc28c47df6f3afc22b9d4f65c0b4",
+ "reference": "bc8433e3da75bc28c47df6f3afc22b9d4f65c0b4",
"shasum": ""
},
"require": {
- "behat/gherkin": "~4.4.0",
+ "behat/gherkin": "^4.4.0",
+ "codeception/phpunit-wrapper": "^6.0.9|^7.0.6",
+ "codeception/stub": "^2.0",
"ext-json": "*",
"ext-mbstring": "*",
"facebook/webdriver": ">=1.1.3 <2.0",
"guzzlehttp/guzzle": ">=4.1.4 <7.0",
"guzzlehttp/psr7": "~1.0",
- "php": ">=5.4.0 <8.0",
- "phpunit/php-code-coverage": ">=2.2.4 <6.0",
- "phpunit/phpunit": ">4.8.20 <7.0",
- "phpunit/phpunit-mock-objects": ">2.3 <5.0",
- "sebastian/comparator": ">1.1 <3.0",
- "sebastian/diff": "^1.4",
- "stecman/symfony-console-completion": "^0.7.0",
- "symfony/browser-kit": ">=2.7 <4.0",
- "symfony/console": ">=2.7 <4.0",
- "symfony/css-selector": ">=2.7 <4.0",
- "symfony/dom-crawler": ">=2.7.5 <4.0",
- "symfony/event-dispatcher": ">=2.7 <4.0",
- "symfony/finder": ">=2.7 <4.0",
- "symfony/yaml": ">=2.7 <4.0"
+ "php": ">=5.6.0 <8.0",
+ "symfony/browser-kit": ">=2.7 <5.0",
+ "symfony/console": ">=2.7 <5.0",
+ "symfony/css-selector": ">=2.7 <5.0",
+ "symfony/dom-crawler": ">=2.7 <5.0",
+ "symfony/event-dispatcher": ">=2.7 <5.0",
+ "symfony/finder": ">=2.7 <5.0",
+ "symfony/yaml": ">=2.7 <5.0"
},
"require-dev": {
"codeception/specify": "~0.3",
"facebook/graph-sdk": "~5.3",
"flow/jsonpath": "~0.2",
- "league/factory-muffin": "^3.0",
- "league/factory-muffin-faker": "^1.0",
- "mongodb/mongodb": "^1.0",
"monolog/monolog": "~1.8",
"pda/pheanstalk": "~3.0",
"php-amqplib/php-amqplib": "~2.4",
"predis/predis": "^1.0",
"squizlabs/php_codesniffer": "~2.0",
- "symfony/process": ">=2.7 <4.0",
+ "symfony/process": ">=2.7 <5.0",
"vlucas/phpdotenv": "^2.4.0"
},
"suggest": {
+ "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module",
+ "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests",
"codeception/specify": "BDD-style code blocks",
"codeception/verify": "BDD-style assertions",
"flow/jsonpath": "For using JSONPath in REST module",
"league/factory-muffin": "For DataFactory module",
"league/factory-muffin-faker": "For Faker support in DataFactory module",
"phpseclib/phpseclib": "for SFTP option in FTP Module",
+ "stecman/symfony-console-completion": "For BASH autocompletion",
"symfony/phpunit-bridge": "For phpunit-bridge support"
},
"bin": [
@@ -1314,20 +1267,99 @@
"functional testing",
"unit testing"
],
- "time": "2017-08-10T20:28:02+00:00"
+ "time": "2018-05-26T22:17:46+00:00"
},
{
- "name": "codeception/verify",
- "version": "0.3.3",
+ "name": "codeception/phpunit-wrapper",
+ "version": "6.0.9",
"source": {
"type": "git",
- "url": "https://github.com/Codeception/Verify.git",
- "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c"
+ "url": "https://github.com/Codeception/phpunit-wrapper.git",
+ "reference": "450f1cfc5f49539c421061e64338f5edb8baad6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Codeception/Verify/zipball/5d649dda453cd814dadc4bb053060cd2c6bb4b4c",
- "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c",
+ "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/450f1cfc5f49539c421061e64338f5edb8baad6a",
+ "reference": "450f1cfc5f49539c421061e64338f5edb8baad6a",
+ "shasum": ""
+ },
+ "require": {
+ "phpunit/php-code-coverage": ">=2.2.4 <6.0",
+ "phpunit/phpunit": ">=4.8.28 <5.0.0 || >=5.6.3 <7.0",
+ "sebastian/comparator": ">1.1 <3.0",
+ "sebastian/diff": ">=1.4 <4.0"
+ },
+ "replace": {
+ "codeception/phpunit-wrapper": "*"
+ },
+ "require-dev": {
+ "codeception/specify": "*",
+ "vlucas/phpdotenv": "^2.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Codeception\\PHPUnit\\": "src\\"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Davert",
+ "email": "davert.php@resend.cc"
+ }
+ ],
+ "description": "PHPUnit classes used by Codeception",
+ "time": "2018-03-31T18:50:01+00:00"
+ },
+ {
+ "name": "codeception/stub",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Codeception/Stub.git",
+ "reference": "b2eff325d8ff0b824ff659048be7be4e5767d7d0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Codeception/Stub/zipball/b2eff325d8ff0b824ff659048be7be4e5767d7d0",
+ "reference": "b2eff325d8ff0b824ff659048be7be4e5767d7d0",
+ "shasum": ""
+ },
+ "require": {
+ "phpunit/phpunit-mock-objects": ">2.3 <7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=4.8 <8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Codeception\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Flexible Stub wrapper for PHPUnit's Mock Builder",
+ "time": "2018-05-18T14:33:08+00:00"
+ },
+ {
+ "name": "codeception/verify",
+ "version": "0.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Codeception/Verify.git",
+ "reference": "8a17273017e23a866df3fa2ad2b4182b7ce354f0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Codeception/Verify/zipball/8a17273017e23a866df3fa2ad2b4182b7ce354f0",
+ "reference": "8a17273017e23a866df3fa2ad2b4182b7ce354f0",
"shasum": ""
},
"require-dev": {
@@ -1350,39 +1382,42 @@
}
],
"description": "BDD assertion library for PHPUnit",
- "time": "2017-01-09T10:58:51+00:00"
+ "time": "2017-07-12T16:50:18+00:00"
},
{
"name": "composer/composer",
- "version": "1.5.5",
+ "version": "1.6.5",
"source": {
"type": "git",
"url": "https://github.com/composer/composer.git",
- "reference": "aab6229c9a4b6731f23b36107c39f4007c290b50"
+ "reference": "b184a92419cc9a9c4c6a09db555a94d441cb11c9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/composer/zipball/aab6229c9a4b6731f23b36107c39f4007c290b50",
- "reference": "aab6229c9a4b6731f23b36107c39f4007c290b50",
+ "url": "https://api.github.com/repos/composer/composer/zipball/b184a92419cc9a9c4c6a09db555a94d441cb11c9",
+ "reference": "b184a92419cc9a9c4c6a09db555a94d441cb11c9",
"shasum": ""
},
"require": {
"composer/ca-bundle": "^1.0",
"composer/semver": "^1.0",
- "composer/spdx-licenses": "^1.0",
+ "composer/spdx-licenses": "^1.2",
"justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
"php": "^5.3.2 || ^7.0",
"psr/log": "^1.0",
"seld/cli-prompt": "^1.0",
"seld/jsonlint": "^1.4",
"seld/phar-utils": "^1.0",
- "symfony/console": "^2.7 || ^3.0",
- "symfony/filesystem": "^2.7 || ^3.0",
- "symfony/finder": "^2.7 || ^3.0",
- "symfony/process": "^2.7 || ^3.0"
+ "symfony/console": "^2.7 || ^3.0 || ^4.0",
+ "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
+ "symfony/finder": "^2.7 || ^3.0 || ^4.0",
+ "symfony/process": "^2.7 || ^3.0 || ^4.0"
+ },
+ "conflict": {
+ "symfony/console": "2.8.38"
},
"require-dev": {
- "phpunit/phpunit": "^4.5 || ^5.0.5",
+ "phpunit/phpunit": "^4.8.35 || ^5.7",
"phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
},
"suggest": {
@@ -1396,7 +1431,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.5-dev"
+ "dev-master": "1.6-dev"
}
},
"autoload": {
@@ -1427,7 +1462,7 @@
"dependency",
"package"
],
- "time": "2017-12-01T13:42:57+00:00"
+ "time": "2018-05-04T09:44:59+00:00"
},
{
"name": "composer/semver",
@@ -1493,23 +1528,23 @@
},
{
"name": "composer/spdx-licenses",
- "version": "1.1.6",
+ "version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/composer/spdx-licenses.git",
- "reference": "2603a0d7ddc00a015deb576fa5297ca43dee6b1c"
+ "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/2603a0d7ddc00a015deb576fa5297ca43dee6b1c",
- "reference": "2603a0d7ddc00a015deb576fa5297ca43dee6b1c",
+ "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b",
+ "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.5 || ^5.0.5",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
"phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
},
"type": "library",
@@ -1550,20 +1585,20 @@
"spdx",
"validator"
],
- "time": "2017-04-03T19:08:52+00:00"
+ "time": "2018-04-30T10:33:04+00:00"
},
{
"name": "consolidation/annotated-command",
- "version": "2.8.2",
+ "version": "2.8.4",
"source": {
"type": "git",
"url": "https://github.com/consolidation/annotated-command.git",
- "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4"
+ "reference": "651541a0b68318a2a202bda558a676e5ad92223c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/e97c38717eae23a2bafcf3f09438290eee6ebeb4",
- "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4",
+ "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/651541a0b68318a2a202bda558a676e5ad92223c",
+ "reference": "651541a0b68318a2a202bda558a676e5ad92223c",
"shasum": ""
},
"require": {
@@ -1575,8 +1610,9 @@
"symfony/finder": "^2.5|^3|^4"
},
"require-dev": {
- "phpunit/phpunit": "^4.8",
- "satooshi/php-coveralls": "^1.0.2 | dev-master",
+ "g1a/composer-test-scenarios": "^2",
+ "phpunit/phpunit": "^6",
+ "satooshi/php-coveralls": "^2",
"squizlabs/php_codesniffer": "^2.7"
},
"type": "library",
@@ -1601,32 +1637,37 @@
}
],
"description": "Initialize Symfony Console commands from annotated command class methods.",
- "time": "2017-11-29T16:23:23+00:00"
+ "time": "2018-05-25T18:04:25+00:00"
},
{
"name": "consolidation/config",
- "version": "1.0.7",
+ "version": "1.0.11",
"source": {
"type": "git",
"url": "https://github.com/consolidation/config.git",
- "reference": "b59a3b9ea750c21397f26a68fd2e04d9580af42e"
+ "reference": "ede41d946078e97e7a9513aadc3352f1c26817af"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/consolidation/config/zipball/b59a3b9ea750c21397f26a68fd2e04d9580af42e",
- "reference": "b59a3b9ea750c21397f26a68fd2e04d9580af42e",
+ "url": "https://api.github.com/repos/consolidation/config/zipball/ede41d946078e97e7a9513aadc3352f1c26817af",
+ "reference": "ede41d946078e97e7a9513aadc3352f1c26817af",
"shasum": ""
},
"require": {
"dflydev/dot-access-data": "^1.1.0",
- "grasmash/yaml-expander": "^1.1",
+ "grasmash/expander": "^1",
"php": ">=5.4.0"
},
"require-dev": {
+ "g1a/composer-test-scenarios": "^1",
"phpunit/phpunit": "^4",
"satooshi/php-coveralls": "^1.0",
"squizlabs/php_codesniffer": "2.*",
- "symfony/console": "^2.5|^3"
+ "symfony/console": "^2.5|^3|^4",
+ "symfony/yaml": "^2.8.11|^3|^4"
+ },
+ "suggest": {
+ "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader"
},
"type": "library",
"extra": {
@@ -1650,20 +1691,20 @@
}
],
"description": "Provide configuration services for a commandline tool.",
- "time": "2017-10-25T05:50:10+00:00"
+ "time": "2018-05-27T01:17:02+00:00"
},
{
"name": "consolidation/log",
- "version": "1.0.5",
+ "version": "1.0.6",
"source": {
"type": "git",
"url": "https://github.com/consolidation/log.git",
- "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821"
+ "reference": "dfd8189a771fe047bf3cd669111b2de5f1c79395"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/consolidation/log/zipball/dbc7c535f319a4a2d5a5077738f8eb7c10df8821",
- "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821",
+ "url": "https://api.github.com/repos/consolidation/log/zipball/dfd8189a771fe047bf3cd669111b2de5f1c79395",
+ "reference": "dfd8189a771fe047bf3cd669111b2de5f1c79395",
"shasum": ""
},
"require": {
@@ -1672,8 +1713,9 @@
"symfony/console": "^2.8|^3|^4"
},
"require-dev": {
+ "g1a/composer-test-scenarios": "^1",
"phpunit/phpunit": "4.*",
- "satooshi/php-coveralls": "dev-master",
+ "satooshi/php-coveralls": "^2",
"squizlabs/php_codesniffer": "2.*"
},
"type": "library",
@@ -1698,20 +1740,20 @@
}
],
"description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.",
- "time": "2017-11-29T01:44:16+00:00"
+ "time": "2018-05-25T18:14:39+00:00"
},
{
"name": "consolidation/output-formatters",
- "version": "3.1.13",
+ "version": "3.2.1",
"source": {
"type": "git",
"url": "https://github.com/consolidation/output-formatters.git",
- "reference": "3188461e965b32148c8fb85261833b2b72d34b8c"
+ "reference": "d78ef59aea19d3e2e5a23f90a055155ee78a0ad5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/3188461e965b32148c8fb85261833b2b72d34b8c",
- "reference": "3188461e965b32148c8fb85261833b2b72d34b8c",
+ "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/d78ef59aea19d3e2e5a23f90a055155ee78a0ad5",
+ "reference": "d78ef59aea19d3e2e5a23f90a055155ee78a0ad5",
"shasum": ""
},
"require": {
@@ -1720,11 +1762,17 @@
"symfony/finder": "^2.5|^3|^4"
},
"require-dev": {
- "phpunit/phpunit": "^4.8",
- "satooshi/php-coveralls": "^1.0.2 | dev-master",
+ "g1a/composer-test-scenarios": "^2",
+ "phpunit/phpunit": "^5.7.27",
+ "satooshi/php-coveralls": "^2",
"squizlabs/php_codesniffer": "^2.7",
+ "symfony/console": "3.2.3",
+ "symfony/var-dumper": "^2.8|^3|^4",
"victorjonsson/markdowndocs": "^1.3"
},
+ "suggest": {
+ "symfony/var-dumper": "For using the var_dump formatter"
+ },
"type": "library",
"extra": {
"branch-alias": {
@@ -1747,48 +1795,52 @@
}
],
"description": "Format text by applying transformations provided by plug-in formatters.",
- "time": "2017-11-29T15:25:38+00:00"
+ "time": "2018-05-25T18:02:34+00:00"
},
{
"name": "consolidation/robo",
- "version": "1.1.5",
+ "version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/consolidation/Robo.git",
- "reference": "aea695cebff81d54ed6daf14894738d5dac1c15c"
+ "reference": "ac563abfadf7cb7314b4e152f2b5033a6c255f6f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/consolidation/Robo/zipball/aea695cebff81d54ed6daf14894738d5dac1c15c",
- "reference": "aea695cebff81d54ed6daf14894738d5dac1c15c",
+ "url": "https://api.github.com/repos/consolidation/Robo/zipball/ac563abfadf7cb7314b4e152f2b5033a6c255f6f",
+ "reference": "ac563abfadf7cb7314b4e152f2b5033a6c255f6f",
"shasum": ""
},
"require": {
- "consolidation/annotated-command": "^2.8.1",
- "consolidation/config": "^1.0.1",
+ "consolidation/annotated-command": "^2.8.2",
+ "consolidation/config": "^1.0.10",
"consolidation/log": "~1",
- "consolidation/output-formatters": "^3.1.5",
+ "consolidation/output-formatters": "^3.1.13",
+ "grasmash/yaml-expander": "^1.3",
"league/container": "^2.2",
"php": ">=5.5.0",
- "symfony/console": "~2.8|~3.0",
- "symfony/event-dispatcher": "~2.5|~3.0",
- "symfony/filesystem": "~2.5|~3.0",
- "symfony/finder": "~2.5|~3.0",
- "symfony/process": "~2.5|~3.0"
+ "symfony/console": "^2.8|^3|^4",
+ "symfony/event-dispatcher": "^2.5|^3|^4",
+ "symfony/filesystem": "^2.5|^3|^4",
+ "symfony/finder": "^2.5|^3|^4",
+ "symfony/process": "^2.5|^3|^4"
},
"replace": {
"codegyre/robo": "< 1.0"
},
"require-dev": {
- "codeception/aspect-mock": "~1",
- "codeception/base": "^2.2.6",
+ "codeception/aspect-mock": "^1|^2.1.1",
+ "codeception/base": "^2.3.7",
"codeception/verify": "^0.3.2",
- "henrikbjorn/lurker": "~1",
+ "g1a/composer-test-scenarios": "^2",
+ "goaop/framework": "~2.1.2",
+ "goaop/parser-reflection": "^1.1.0",
"natxet/cssmin": "3.0.4",
+ "nikic/php-parser": "^3.1.5",
"patchwork/jsqueeze": "~2",
"pear/archive_tar": "^1.4.2",
"phpunit/php-code-coverage": "~2|~4",
- "satooshi/php-coveralls": "~1",
+ "satooshi/php-coveralls": "^2",
"squizlabs/php_codesniffer": "^2.8"
},
"suggest": {
@@ -1808,9 +1860,6 @@
}
},
"autoload": {
- "classmap": [
- "scripts/composer/ScriptHandler.php"
- ],
"psr-4": {
"Robo\\": "src"
}
@@ -1826,7 +1875,7 @@
}
],
"description": "Modern task runner",
- "time": "2017-10-25T20:41:21+00:00"
+ "time": "2018-05-27T01:42:53+00:00"
},
{
"name": "container-interop/container-interop",
@@ -2200,34 +2249,39 @@
},
{
"name": "facebook/webdriver",
- "version": "1.5.0",
+ "version": "1.6.0",
"source": {
"type": "git",
"url": "https://github.com/facebook/php-webdriver.git",
- "reference": "86b5ca2f67173c9d34340845dd690149c886a605"
+ "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/86b5ca2f67173c9d34340845dd690149c886a605",
- "reference": "86b5ca2f67173c9d34340845dd690149c886a605",
+ "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e",
+ "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e",
"shasum": ""
},
"require": {
"ext-curl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
"ext-zip": "*",
"php": "^5.6 || ~7.0",
"symfony/process": "^2.8 || ^3.1 || ^4.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.0",
- "guzzle/guzzle": "^3.4.1",
- "php-coveralls/php-coveralls": "^1.0.2",
+ "jakub-onderka/php-parallel-lint": "^0.9.2",
+ "php-coveralls/php-coveralls": "^2.0",
"php-mock/php-mock-phpunit": "^1.1",
"phpunit/phpunit": "^5.7",
"sebastian/environment": "^1.3.4 || ^2.0 || ^3.0",
"squizlabs/php_codesniffer": "^2.6",
"symfony/var-dumper": "^3.3 || ^4.0"
},
+ "suggest": {
+ "ext-SimpleXML": "For Firefox profile creation"
+ },
"type": "library",
"extra": {
"branch-alias": {
@@ -2251,7 +2305,7 @@
"selenium",
"webdriver"
],
- "time": "2017-11-15T11:08:09+00:00"
+ "time": "2018-05-16T17:37:13+00:00"
},
{
"name": "goaop/framework",
@@ -2368,27 +2422,75 @@
"time": "2017-09-03T14:59:13+00:00"
},
{
- "name": "grasmash/yaml-expander",
- "version": "1.2.0",
+ "name": "grasmash/expander",
+ "version": "1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/grasmash/yaml-expander.git",
- "reference": "9ec59ccc7a630eb2637639e8214e70d27675456b"
+ "url": "https://github.com/grasmash/expander.git",
+ "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/9ec59ccc7a630eb2637639e8214e70d27675456b",
- "reference": "9ec59ccc7a630eb2637639e8214e70d27675456b",
+ "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f",
+ "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f",
+ "shasum": ""
+ },
+ "require": {
+ "dflydev/dot-access-data": "^1.1.0",
+ "php": ">=5.4"
+ },
+ "require-dev": {
+ "greg-1-anderson/composer-test-scenarios": "^1",
+ "phpunit/phpunit": "^4|^5.5.4",
+ "satooshi/php-coveralls": "^1.0.2|dev-master",
+ "squizlabs/php_codesniffer": "^2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Grasmash\\Expander\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthew Grasmick"
+ }
+ ],
+ "description": "Expands internal property references in PHP arrays file.",
+ "time": "2017-12-21T22:14:55+00:00"
+ },
+ {
+ "name": "grasmash/yaml-expander",
+ "version": "1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/grasmash/yaml-expander.git",
+ "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1",
+ "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1",
"shasum": ""
},
"require": {
"dflydev/dot-access-data": "^1.1.0",
"php": ">=5.4",
- "symfony/yaml": "^2.8.11|^3"
+ "symfony/yaml": "^2.8.11|^3|^4"
},
"require-dev": {
+ "greg-1-anderson/composer-test-scenarios": "^1",
"phpunit/phpunit": "^4.8|^5.5.4",
- "satooshi/php-coveralls": "^1.0",
+ "satooshi/php-coveralls": "^1.0.2|dev-master",
"squizlabs/php_codesniffer": "^2.7"
},
"type": "library",
@@ -2412,20 +2514,20 @@
}
],
"description": "Expands internal property references in a yaml file.",
- "time": "2017-09-26T16:57:45+00:00"
+ "time": "2017-12-16T16:06:03+00:00"
},
{
"name": "guzzlehttp/guzzle",
- "version": "6.3.0",
+ "version": "6.3.3",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699"
+ "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699",
- "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
+ "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
"shasum": ""
},
"require": {
@@ -2435,7 +2537,7 @@
},
"require-dev": {
"ext-curl": "*",
- "phpunit/phpunit": "^4.0 || ^5.0",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
"psr/log": "^1.0"
},
"suggest": {
@@ -2444,7 +2546,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "6.2-dev"
+ "dev-master": "6.3-dev"
}
},
"autoload": {
@@ -2477,7 +2579,7 @@
"rest",
"web service"
],
- "time": "2017-06-22T18:50:49+00:00"
+ "time": "2018-04-22T15:46:56+00:00"
},
{
"name": "guzzlehttp/promises",
@@ -2597,16 +2699,16 @@
},
{
"name": "hautelook/phpass",
- "version": "0.3.3",
+ "version": "0.3.5",
"source": {
"type": "git",
"url": "https://github.com/hautelook/phpass.git",
- "reference": "9590c12bf7c92f67f646d7bf2cf6384e7292cc41"
+ "reference": "b4cbd9b67ed3ef5672ec79d8e0c46d24bd844abd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hautelook/phpass/zipball/9590c12bf7c92f67f646d7bf2cf6384e7292cc41",
- "reference": "9590c12bf7c92f67f646d7bf2cf6384e7292cc41",
+ "url": "https://api.github.com/repos/hautelook/phpass/zipball/b4cbd9b67ed3ef5672ec79d8e0c46d24bd844abd",
+ "reference": "b4cbd9b67ed3ef5672ec79d8e0c46d24bd844abd",
"shasum": ""
},
"require": {
@@ -2854,16 +2956,16 @@
},
{
"name": "justinrainbow/json-schema",
- "version": "5.2.6",
+ "version": "5.2.7",
"source": {
"type": "git",
"url": "https://github.com/justinrainbow/json-schema.git",
- "reference": "d283e11b6e14c6f4664cf080415c4341293e5bbd"
+ "reference": "8560d4314577199ba51bf2032f02cd1315587c23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/d283e11b6e14c6f4664cf080415c4341293e5bbd",
- "reference": "d283e11b6e14c6f4664cf080415c4341293e5bbd",
+ "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23",
+ "reference": "8560d4314577199ba51bf2032f02cd1315587c23",
"shasum": ""
},
"require": {
@@ -2872,7 +2974,7 @@
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.1",
"json-schema/json-schema-test-suite": "1.2.0",
- "phpunit/phpunit": "^4.8.22"
+ "phpunit/phpunit": "^4.8.35"
},
"bin": [
"bin/validate-json"
@@ -2916,7 +3018,65 @@
"json",
"schema"
],
- "time": "2017-10-21T13:15:38+00:00"
+ "time": "2018-02-14T22:26:30+00:00"
+ },
+ {
+ "name": "kint-php/kint",
+ "version": "2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/kint-php/kint.git",
+ "reference": "b091715eadaf6e1a7ef927f3e81d1004611d2aea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/kint-php/kint/zipball/b091715eadaf6e1a7ef927f3e81d1004611d2aea",
+ "reference": "b091715eadaf6e1a7ef927f3e81d1004611d2aea",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.1.2"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.0",
+ "phpunit/phpunit": "^4.0",
+ "symfony/finder": "^2.6"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "init.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Rokas Šleinius",
+ "homepage": "https://github.com/raveren"
+ },
+ {
+ "name": "Jonathan Vollebregt",
+ "homepage": "https://github.com/jnvsor"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/kint-php/kint/graphs/contributors"
+ }
+ ],
+ "description": "Kint - debugging tool for PHP developers",
+ "homepage": "https://kint-php.github.io/kint/",
+ "keywords": [
+ "debug",
+ "kint",
+ "php"
+ ],
+ "time": "2017-09-06T17:46:03+00:00"
},
{
"name": "league/container",
@@ -3027,16 +3187,16 @@
},
{
"name": "lucatume/wp-browser",
- "version": "1.21.20",
+ "version": "1.21.23",
"source": {
"type": "git",
"url": "https://github.com/lucatume/wp-browser.git",
- "reference": "74e4cf6e847cccc54cf61ce5f9c758d73554b64f"
+ "reference": "bd33f4830ea0d2d9c3138dc057175f6c54aa6f3e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/lucatume/wp-browser/zipball/74e4cf6e847cccc54cf61ce5f9c758d73554b64f",
- "reference": "74e4cf6e847cccc54cf61ce5f9c758d73554b64f",
+ "url": "https://api.github.com/repos/lucatume/wp-browser/zipball/bd33f4830ea0d2d9c3138dc057175f6c54aa6f3e",
+ "reference": "bd33f4830ea0d2d9c3138dc057175f6c54aa6f3e",
"shasum": ""
},
"require": {
@@ -3085,7 +3245,7 @@
"codeception",
"wordpress"
],
- "time": "2017-10-10T08:59:17+00:00"
+ "time": "2017-12-13T16:20:09+00:00"
},
{
"name": "lucatume/wp-browser-commons",
@@ -3134,20 +3294,20 @@
},
{
"name": "mikemclin/laravel-wp-password",
- "version": "2.0.0",
+ "version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/mikemclin/laravel-wp-password.git",
- "reference": "3460f1e38dea501c5d0cbe9bff67d043f6821724"
+ "reference": "84ff1113ff6866cdb0350c176dc3c843383e4819"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mikemclin/laravel-wp-password/zipball/3460f1e38dea501c5d0cbe9bff67d043f6821724",
- "reference": "3460f1e38dea501c5d0cbe9bff67d043f6821724",
+ "url": "https://api.github.com/repos/mikemclin/laravel-wp-password/zipball/84ff1113ff6866cdb0350c176dc3c843383e4819",
+ "reference": "84ff1113ff6866cdb0350c176dc3c843383e4819",
"shasum": ""
},
"require": {
- "hautelook/phpass": "0.3.3",
+ "hautelook/phpass": "0.3.*",
"illuminate/support": ">=4.0.0",
"php": ">=5.3.0"
},
@@ -3160,6 +3320,16 @@
"satooshi/php-coveralls": "dev-master"
},
"type": "laravel-package",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "MikeMcLin\\WpPassword\\WpPasswordProvider"
+ ],
+ "aliases": {
+ "WpPassword": "MikeMcLin\\WpPassword\\Facades\\WpPassword"
+ }
+ }
+ },
"autoload": {
"psr-4": {
"MikeMcLin\\WpPassword\\": "src/"
@@ -3184,7 +3354,7 @@
"password",
"wordpress"
],
- "time": "2015-02-12T03:09:57+00:00"
+ "time": "2018-01-11T14:12:02+00:00"
},
{
"name": "mustache/mustache",
@@ -3232,6 +3402,51 @@
],
"time": "2017-07-11T12:54:05+00:00"
},
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
+ "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.0",
+ "doctrine/common": "^2.6",
+ "phpunit/phpunit": "^4.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ },
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "time": "2017-10-19T19:58:43+00:00"
+ },
{
"name": "nb/oxymel",
"version": "v0.1.0",
@@ -3326,16 +3541,16 @@
},
{
"name": "paragonie/random_compat",
- "version": "v2.0.11",
+ "version": "v2.0.15",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
- "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8"
+ "reference": "10bcb46e8f3d365170f6de9d05245aa066b81f09"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8",
- "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/10bcb46e8f3d365170f6de9d05245aa066b81f09",
+ "reference": "10bcb46e8f3d365170f6de9d05245aa066b81f09",
"shasum": ""
},
"require": {
@@ -3367,10 +3582,11 @@
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
"keywords": [
"csprng",
+ "polyfill",
"pseudorandom",
"random"
],
- "time": "2017-09-27T21:40:39+00:00"
+ "time": "2018-06-08T15:26:40+00:00"
},
{
"name": "phpdocumentor/reflection-common",
@@ -3520,28 +3736,28 @@
},
{
"name": "phpspec/prophecy",
- "version": "1.7.3",
+ "version": "1.7.6",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
- "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf"
+ "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf",
- "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
+ "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0",
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
- "sebastian/comparator": "^1.1|^2.0",
+ "sebastian/comparator": "^1.1|^2.0|^3.0",
"sebastian/recursion-context": "^1.0|^2.0|^3.0"
},
"require-dev": {
"phpspec/phpspec": "^2.5|^3.2",
- "phpunit/phpunit": "^4.8.35 || ^5.7"
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
},
"type": "library",
"extra": {
@@ -3579,43 +3795,44 @@
"spy",
"stub"
],
- "time": "2017-11-24T13:59:53+00:00"
+ "time": "2018-04-18T13:57:24+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "2.2.4",
+ "version": "4.0.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
+ "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
- "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+ "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
"shasum": ""
},
"require": {
- "php": ">=5.3.3",
- "phpunit/php-file-iterator": "~1.3",
- "phpunit/php-text-template": "~1.2",
- "phpunit/php-token-stream": "~1.3",
- "sebastian/environment": "^1.3.2",
- "sebastian/version": "~1.0"
+ "ext-dom": "*",
+ "ext-xmlwriter": "*",
+ "php": "^5.6 || ^7.0",
+ "phpunit/php-file-iterator": "^1.3",
+ "phpunit/php-text-template": "^1.2",
+ "phpunit/php-token-stream": "^1.4.2 || ^2.0",
+ "sebastian/code-unit-reverse-lookup": "^1.0",
+ "sebastian/environment": "^1.3.2 || ^2.0",
+ "sebastian/version": "^1.0 || ^2.0"
},
"require-dev": {
- "ext-xdebug": ">=2.1.4",
- "phpunit/phpunit": "~4"
+ "ext-xdebug": "^2.1.4",
+ "phpunit/phpunit": "^5.7"
},
"suggest": {
- "ext-dom": "*",
- "ext-xdebug": ">=2.2.1",
- "ext-xmlwriter": "*"
+ "ext-xdebug": "^2.5.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.2.x-dev"
+ "dev-master": "4.0.x-dev"
}
},
"autoload": {
@@ -3641,7 +3858,7 @@
"testing",
"xunit"
],
- "time": "2015-10-06T15:47:00+00:00"
+ "time": "2017-04-02T07:44:40+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -3831,40 +4048,50 @@
},
{
"name": "phpunit/phpunit",
- "version": "4.8.21",
+ "version": "5.7.27",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "ea76b17bced0500a28098626b84eda12dbcf119c"
+ "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ea76b17bced0500a28098626b84eda12dbcf119c",
- "reference": "ea76b17bced0500a28098626b84eda12dbcf119c",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
+ "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-json": "*",
- "ext-pcre": "*",
- "ext-reflection": "*",
- "ext-spl": "*",
- "php": ">=5.3.3",
- "phpspec/prophecy": "^1.3.1",
- "phpunit/php-code-coverage": "~2.1",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "myclabs/deep-copy": "~1.3",
+ "php": "^5.6 || ^7.0",
+ "phpspec/prophecy": "^1.6.2",
+ "phpunit/php-code-coverage": "^4.0.4",
"phpunit/php-file-iterator": "~1.4",
"phpunit/php-text-template": "~1.2",
- "phpunit/php-timer": ">=1.0.6",
- "phpunit/phpunit-mock-objects": "~2.3",
- "sebastian/comparator": "~1.1",
- "sebastian/diff": "~1.2",
- "sebastian/environment": "~1.3",
- "sebastian/exporter": "~1.2",
- "sebastian/global-state": "~1.0",
- "sebastian/version": "~1.0",
- "symfony/yaml": "~2.1|~3.0"
+ "phpunit/php-timer": "^1.0.6",
+ "phpunit/phpunit-mock-objects": "^3.2",
+ "sebastian/comparator": "^1.2.4",
+ "sebastian/diff": "^1.4.3",
+ "sebastian/environment": "^1.3.4 || ^2.0",
+ "sebastian/exporter": "~2.0",
+ "sebastian/global-state": "^1.1",
+ "sebastian/object-enumerator": "~2.0",
+ "sebastian/resource-operations": "~1.0",
+ "sebastian/version": "^1.0.6|^2.0.1",
+ "symfony/yaml": "~2.1|~3.0|~4.0"
+ },
+ "conflict": {
+ "phpdocumentor/reflection-docblock": "3.0.2"
+ },
+ "require-dev": {
+ "ext-pdo": "*"
},
"suggest": {
+ "ext-xdebug": "*",
"phpunit/php-invoker": "~1.1"
},
"bin": [
@@ -3873,7 +4100,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.8.x-dev"
+ "dev-master": "5.7.x-dev"
}
},
"autoload": {
@@ -3899,30 +4126,33 @@
"testing",
"xunit"
],
- "time": "2015-12-12T07:45:58+00:00"
+ "time": "2018-02-01T05:50:59+00:00"
},
{
"name": "phpunit/phpunit-mock-objects",
- "version": "2.3.8",
+ "version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
- "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
+ "reference": "a23b761686d50a560cc56233b9ecf49597cc9118"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
- "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118",
+ "reference": "a23b761686d50a560cc56233b9ecf49597cc9118",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
- "php": ">=5.3.3",
- "phpunit/php-text-template": "~1.2",
- "sebastian/exporter": "~1.2"
+ "php": "^5.6 || ^7.0",
+ "phpunit/php-text-template": "^1.2",
+ "sebastian/exporter": "^1.2 || ^2.0"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<5.4.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.4"
+ "phpunit/phpunit": "^5.4"
},
"suggest": {
"ext-soap": "*"
@@ -3930,7 +4160,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.3.x-dev"
+ "dev-master": "3.2.x-dev"
}
},
"autoload": {
@@ -3955,7 +4185,7 @@
"mock",
"xunit"
],
- "time": "2015-10-02T06:51:40+00:00"
+ "time": "2017-06-30T09:13:00+00:00"
},
{
"name": "psr/container",
@@ -4101,58 +4331,6 @@
],
"time": "2015-03-20T22:07:39+00:00"
},
- {
- "name": "raveren/kint",
- "version": "1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/kint-php/kint.git",
- "reference": "a8549198558560b24e2879c6bac2875de5371483"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/kint-php/kint/zipball/a8549198558560b24e2879c6bac2875de5371483",
- "reference": "a8549198558560b24e2879c6bac2875de5371483",
- "shasum": ""
- },
- "require": {
- "php": ">=5.1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "files": [
- "Kint.class.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Rokas Šleinius",
- "homepage": "https://github.com/kint-php"
- },
- {
- "name": "Contributors",
- "homepage": "https://github.com/kint-php/kint/contributors"
- }
- ],
- "description": "Kint - debugging helper for PHP developers",
- "homepage": "https://github.com/kint-php/kint",
- "keywords": [
- "debug",
- "kint",
- "php"
- ],
- "abandoned": "kint-php/kint",
- "time": "2017-01-15T14:23:43+00:00"
- },
{
"name": "rmccue/requests",
"version": "v1.7.0",
@@ -4202,6 +4380,51 @@
],
"time": "2016-10-13T00:11:37+00:00"
},
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+ "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.7 || ^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "time": "2017-03-04T06:30:41+00:00"
+ },
{
"name": "sebastian/comparator",
"version": "1.2.4",
@@ -4320,28 +4543,28 @@
},
{
"name": "sebastian/environment",
- "version": "1.3.8",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
+ "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
- "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+ "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
"shasum": ""
},
"require": {
- "php": "^5.3.3 || ^7.0"
+ "php": "^5.6 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.8 || ^5.0"
+ "phpunit/phpunit": "^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.3.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
@@ -4366,25 +4589,25 @@
"environment",
"hhvm"
],
- "time": "2016-08-18T05:49:44+00:00"
+ "time": "2016-11-26T07:53:53+00:00"
},
{
"name": "sebastian/exporter",
- "version": "1.2.2",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
+ "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
- "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+ "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
- "sebastian/recursion-context": "~1.0"
+ "sebastian/recursion-context": "~2.0"
},
"require-dev": {
"ext-mbstring": "*",
@@ -4393,7 +4616,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.3.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
@@ -4433,7 +4656,7 @@
"export",
"exporter"
],
- "time": "2016-06-17T09:04:28+00:00"
+ "time": "2016-11-19T08:54:04+00:00"
},
{
"name": "sebastian/global-state",
@@ -4487,17 +4710,63 @@
"time": "2015-10-12T03:26:01+00:00"
},
{
- "name": "sebastian/recursion-context",
- "version": "1.0.5",
+ "name": "sebastian/object-enumerator",
+ "version": "2.0.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
- "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7",
+ "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6",
+ "sebastian/recursion-context": "~2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "time": "2017-02-18T15:18:39+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+ "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a",
"shasum": ""
},
"require": {
@@ -4509,7 +4778,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
@@ -4537,23 +4806,73 @@
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "time": "2016-10-03T07:41:43+00:00"
+ "time": "2016-11-19T07:33:16+00:00"
},
{
- "name": "sebastian/version",
- "version": "1.0.6",
+ "name": "sebastian/resource-operations",
+ "version": "1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
- "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+ "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
"shasum": ""
},
+ "require": {
+ "php": ">=5.6.0"
+ },
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "time": "2015-07-28T20:34:47+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
"autoload": {
"classmap": [
"src/"
@@ -4572,7 +4891,7 @@
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
- "time": "2015-06-21T13:59:46+00:00"
+ "time": "2016-10-03T07:35:21+00:00"
},
{
"name": "seld/cli-prompt",
@@ -4624,23 +4943,23 @@
},
{
"name": "seld/jsonlint",
- "version": "1.6.2",
+ "version": "1.7.1",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/jsonlint.git",
- "reference": "7a30649c67ee0d19faacfd9fa2cfb6cc032d9b19"
+ "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/7a30649c67ee0d19faacfd9fa2cfb6cc032d9b19",
- "reference": "7a30649c67ee0d19faacfd9fa2cfb6cc032d9b19",
+ "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38",
+ "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38",
"shasum": ""
},
"require": {
"php": "^5.3 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.5"
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"bin": [
"bin/jsonlint"
@@ -4669,7 +4988,7 @@
"parser",
"validator"
],
- "time": "2017-11-30T15:34:22+00:00"
+ "time": "2018-01-24T12:46:19+00:00"
},
{
"name": "seld/phar-utils",
@@ -4715,59 +5034,6 @@
],
"time": "2015-10-13T18:44:15+00:00"
},
- {
- "name": "simplyadmire/composer-plugins",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/SimplyAdmire/ComposerPlugins.git",
- "reference": "d8380f670694c1c2330b22591ca74adc82cffe19"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/SimplyAdmire/ComposerPlugins/zipball/d8380f670694c1c2330b22591ca74adc82cffe19",
- "reference": "d8380f670694c1c2330b22591ca74adc82cffe19",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^1.0",
- "squizlabs/php_codesniffer": "*"
- },
- "type": "composer-plugin",
- "extra": {
- "class": [
- "SimplyAdmire\\ComposerPlugins\\PhpCodesnifferStandardInstallerPlugin"
- ]
- },
- "autoload": {
- "psr-0": {
- "SimplyAdmire\\ComposerPlugins": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-3.0+"
- ],
- "authors": [
- {
- "name": "Rens Admiraal",
- "email": "rens@simplyadmire.com",
- "role": "lead"
- }
- ],
- "description": "Composer plugin for installing PHP_CodeSniffer standards",
- "keywords": [
- "PHP_CodeSniffer",
- "TYPO3 CMS",
- "TYPO3 Flow",
- "TYPO3 Neos",
- "phpcs",
- "standards",
- "typo3"
- ],
- "abandoned": true,
- "time": "2016-05-12 11:58:38"
- },
{
"name": "squizlabs/php_codesniffer",
"version": "2.9.1",
@@ -4846,63 +5112,18 @@
],
"time": "2017-05-22T02:43:20+00:00"
},
- {
- "name": "stecman/symfony-console-completion",
- "version": "0.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/stecman/symfony-console-completion.git",
- "reference": "5461d43e53092b3d3b9dbd9d999f2054730f4bbb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/5461d43e53092b3d3b9dbd9d999f2054730f4bbb",
- "reference": "5461d43e53092b3d3b9dbd9d999f2054730f4bbb",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2",
- "symfony/console": "~2.3 || ~3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.6.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Stecman\\Component\\Symfony\\Console\\BashCompletion\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Stephen Holdaway",
- "email": "stephen@stecman.co.nz"
- }
- ],
- "description": "Automatic BASH completion for Symfony Console Component based applications.",
- "time": "2016-02-24T05:08:54+00:00"
- },
{
"name": "symfony/browser-kit",
- "version": "v3.4.1",
+ "version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
- "reference": "179522b5f0b5e6d00bb60f38a4d6b29962e4b61b"
+ "reference": "840bb6f0d5b3701fd768b68adf7193c2d0f98f79"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/179522b5f0b5e6d00bb60f38a4d6b29962e4b61b",
- "reference": "179522b5f0b5e6d00bb60f38a4d6b29962e4b61b",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/840bb6f0d5b3701fd768b68adf7193c2d0f98f79",
+ "reference": "840bb6f0d5b3701fd768b68adf7193c2d0f98f79",
"shasum": ""
},
"require": {
@@ -4946,25 +5167,26 @@
],
"description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com",
- "time": "2017-11-07T14:20:24+00:00"
+ "time": "2018-03-19T22:32:39+00:00"
},
{
"name": "symfony/config",
- "version": "v3.4.1",
+ "version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "1de51a6c76359897ab32c309934b93d036bccb60"
+ "reference": "73e055cf2e6467715f187724a0347ea32079967c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/1de51a6c76359897ab32c309934b93d036bccb60",
- "reference": "1de51a6c76359897ab32c309934b93d036bccb60",
+ "url": "https://api.github.com/repos/symfony/config/zipball/73e055cf2e6467715f187724a0347ea32079967c",
+ "reference": "73e055cf2e6467715f187724a0347ea32079967c",
"shasum": ""
},
"require": {
"php": "^5.5.9|>=7.0.8",
- "symfony/filesystem": "~2.8|~3.0|~4.0"
+ "symfony/filesystem": "~2.8|~3.0|~4.0",
+ "symfony/polyfill-ctype": "~1.8"
},
"conflict": {
"symfony/dependency-injection": "<3.3",
@@ -4972,6 +5194,7 @@
},
"require-dev": {
"symfony/dependency-injection": "~3.3|~4.0",
+ "symfony/event-dispatcher": "~3.3|~4.0",
"symfony/finder": "~3.3|~4.0",
"symfony/yaml": "~3.0|~4.0"
},
@@ -5008,20 +5231,20 @@
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
- "time": "2017-11-19T20:09:36+00:00"
+ "time": "2018-05-14T16:49:53+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v3.4.1",
+ "version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "7134b93e90ea7e7881fcb2da006d21b4c5f31908"
+ "reference": "d2ce52290b648ae33b5301d09bc14ee378612914"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/7134b93e90ea7e7881fcb2da006d21b4c5f31908",
- "reference": "7134b93e90ea7e7881fcb2da006d21b4c5f31908",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/d2ce52290b648ae33b5301d09bc14ee378612914",
+ "reference": "d2ce52290b648ae33b5301d09bc14ee378612914",
"shasum": ""
},
"require": {
@@ -5061,20 +5284,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2017-11-05T16:10:10+00:00"
+ "time": "2018-05-16T12:49:49+00:00"
},
{
"name": "symfony/dependency-injection",
- "version": "v3.3.14",
+ "version": "v3.3.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
- "reference": "785114bc1a1421aeedf5c7b105f5b62a71e85b98"
+ "reference": "54243abc4e1a1a15e274e391bd6f7090b44711f1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/785114bc1a1421aeedf5c7b105f5b62a71e85b98",
- "reference": "785114bc1a1421aeedf5c7b105f5b62a71e85b98",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/54243abc4e1a1a15e274e391bd6f7090b44711f1",
+ "reference": "54243abc4e1a1a15e274e391bd6f7090b44711f1",
"shasum": ""
},
"require": {
@@ -5082,7 +5305,7 @@
"psr/container": "^1.0"
},
"conflict": {
- "symfony/config": "<3.3.1",
+ "symfony/config": "<3.3.7",
"symfony/finder": "<3.3",
"symfony/yaml": "<3.3"
},
@@ -5131,24 +5354,25 @@
],
"description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com",
- "time": "2017-12-04T15:44:12+00:00"
+ "time": "2018-01-29T09:02:23+00:00"
},
{
"name": "symfony/dom-crawler",
- "version": "v3.4.1",
+ "version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
- "reference": "7bf68716e400997a291ad42c9f9fe7972e6656d2"
+ "reference": "201b210fafcdd193c1e45b2994bf7133fb6263e8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/7bf68716e400997a291ad42c9f9fe7972e6656d2",
- "reference": "7bf68716e400997a291ad42c9f9fe7972e6656d2",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/201b210fafcdd193c1e45b2994bf7133fb6263e8",
+ "reference": "201b210fafcdd193c1e45b2994bf7133fb6263e8",
"shasum": ""
},
"require": {
"php": "^5.5.9|>=7.0.8",
+ "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0"
},
"require-dev": {
@@ -5187,7 +5411,7 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
- "time": "2017-11-05T16:10:10+00:00"
+ "time": "2018-05-01T22:53:27+00:00"
},
{
"name": "symfony/event-dispatcher",
@@ -5251,20 +5475,21 @@
},
{
"name": "symfony/filesystem",
- "version": "v2.8.32",
+ "version": "v2.8.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "15ceb6736a9eebd0d99f9e05a62296ab6ce1cf2b"
+ "reference": "1ed4b265550ec43d2ceaa0e9e57b0bc4eeb1b541"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/15ceb6736a9eebd0d99f9e05a62296ab6ce1cf2b",
- "reference": "15ceb6736a9eebd0d99f9e05a62296ab6ce1cf2b",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/1ed4b265550ec43d2ceaa0e9e57b0bc4eeb1b541",
+ "reference": "1ed4b265550ec43d2ceaa0e9e57b0bc4eeb1b541",
"shasum": ""
},
"require": {
- "php": ">=5.3.9"
+ "php": ">=5.3.9",
+ "symfony/polyfill-ctype": "~1.8"
},
"type": "library",
"extra": {
@@ -5296,20 +5521,20 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
- "time": "2017-11-19T18:39:05+00:00"
+ "time": "2018-05-15T21:17:45+00:00"
},
{
"name": "symfony/finder",
- "version": "v3.4.1",
+ "version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a"
+ "reference": "472a92f3df8b247b49ae364275fb32943b9656c6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/dac8d7db537bac7ad8143eb11360a8c2231f251a",
- "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/472a92f3df8b247b49ae364275fb32943b9656c6",
+ "reference": "472a92f3df8b247b49ae364275fb32943b9656c6",
"shasum": ""
},
"require": {
@@ -5345,7 +5570,7 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2017-11-05T16:10:10+00:00"
+ "time": "2018-05-16T08:49:21+00:00"
},
{
"name": "symfony/form",
@@ -5550,6 +5775,61 @@
],
"time": "2017-11-05T15:25:56+00:00"
},
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
+ "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.8-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ },
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "time": "2018-04-30T19:57:29+00:00"
+ },
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.6.0",
@@ -5610,16 +5890,16 @@
},
{
"name": "symfony/process",
- "version": "v2.8.32",
+ "version": "v2.8.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "d25449e031f600807949aab7cadbf267712f4eee"
+ "reference": "713952f2ccbcc8342ecdbe1cb313d3e2da8aad28"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/d25449e031f600807949aab7cadbf267712f4eee",
- "reference": "d25449e031f600807949aab7cadbf267712f4eee",
+ "url": "https://api.github.com/repos/symfony/process/zipball/713952f2ccbcc8342ecdbe1cb313d3e2da8aad28",
+ "reference": "713952f2ccbcc8342ecdbe1cb313d3e2da8aad28",
"shasum": ""
},
"require": {
@@ -5655,7 +5935,7 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
- "time": "2017-11-05T15:25:56+00:00"
+ "time": "2018-05-15T21:17:45+00:00"
},
{
"name": "symfony/property-access",
@@ -5875,16 +6155,16 @@
},
{
"name": "symfony/yaml",
- "version": "v3.3.14",
+ "version": "v3.3.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "36353762fdca3a0ecdce4640764efc885df979f6"
+ "reference": "af615970e265543a26ee712c958404eb9b7ac93d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/36353762fdca3a0ecdce4640764efc885df979f6",
- "reference": "36353762fdca3a0ecdce4640764efc885df979f6",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/af615970e265543a26ee712c958404eb9b7ac93d",
+ "reference": "af615970e265543a26ee712c958404eb9b7ac93d",
"shasum": ""
},
"require": {
@@ -5926,7 +6206,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2017-12-04T14:51:35+00:00"
+ "time": "2018-01-20T15:04:53+00:00"
},
{
"name": "twig/extensions",
@@ -6085,16 +6365,16 @@
},
{
"name": "webmozart/assert",
- "version": "1.2.0",
+ "version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/webmozart/assert.git",
- "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f"
+ "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f",
- "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f",
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
+ "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
"shasum": ""
},
"require": {
@@ -6131,7 +6411,7 @@
"check",
"validate"
],
- "time": "2016-11-23T20:04:58+00:00"
+ "time": "2018-01-29T19:49:41+00:00"
},
{
"name": "wimg/php-compatibility",
@@ -6220,16 +6500,16 @@
},
{
"name": "wp-cli/cache-command",
- "version": "v1.0.5",
+ "version": "v1.0.6",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/cache-command.git",
- "reference": "9c3d686f103244de4dd51b4c92177983cdc0a4ae"
+ "reference": "d82cba9effa198f17847dce5771c8fb20c443ffa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/cache-command/zipball/9c3d686f103244de4dd51b4c92177983cdc0a4ae",
- "reference": "9c3d686f103244de4dd51b4c92177983cdc0a4ae",
+ "url": "https://api.github.com/repos/wp-cli/cache-command/zipball/d82cba9effa198f17847dce5771c8fb20c443ffa",
+ "reference": "d82cba9effa198f17847dce5771c8fb20c443ffa",
"shasum": ""
},
"require-dev": {
@@ -6279,27 +6559,27 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Manage object and transient caches.",
+ "description": "Manages object and transient caches.",
"homepage": "https://github.com/wp-cli/cache-command",
- "time": "2017-11-20T21:06:51+00:00"
+ "time": "2017-12-14T19:21:19+00:00"
},
{
"name": "wp-cli/checksum-command",
- "version": "v1.0.4",
+ "version": "v1.0.9",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/checksum-command.git",
- "reference": "64a5b2b66aff071d3944b6ad9767adc324bc999f"
+ "reference": "89a319440651f2867f282339c2223cfe5e9cc3fb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/checksum-command/zipball/64a5b2b66aff071d3944b6ad9767adc324bc999f",
- "reference": "64a5b2b66aff071d3944b6ad9767adc324bc999f",
+ "url": "https://api.github.com/repos/wp-cli/checksum-command/zipball/89a319440651f2867f282339c2223cfe5e9cc3fb",
+ "reference": "89a319440651f2867f282339c2223cfe5e9cc3fb",
"shasum": ""
},
"require-dev": {
"behat/behat": "~2.5",
- "wp-cli/wp-cli": "*"
+ "wp-cli/wp-cli": "^1.5"
},
"type": "wp-cli-package",
"extra": {
@@ -6308,7 +6588,8 @@
},
"bundled": true,
"commands": [
- "checksum core"
+ "core verify-checksums",
+ "plugin verify-checksums"
]
},
"autoload": {
@@ -6332,22 +6613,25 @@
],
"description": "Verifies file integrity by comparing to published checksums.",
"homepage": "https://github.com/wp-cli/checksum-command",
- "time": "2017-11-20T22:00:52+00:00"
+ "time": "2018-04-20T07:47:27+00:00"
},
{
"name": "wp-cli/config-command",
- "version": "v1.1.6",
+ "version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/config-command.git",
- "reference": "075b04a9468588377b6e8b14666aa65f952cec14"
+ "reference": "7bec9b4685b4022ab511630422dd6acccadfca9b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/config-command/zipball/075b04a9468588377b6e8b14666aa65f952cec14",
- "reference": "075b04a9468588377b6e8b14666aa65f952cec14",
+ "url": "https://api.github.com/repos/wp-cli/config-command/zipball/7bec9b4685b4022ab511630422dd6acccadfca9b",
+ "reference": "7bec9b4685b4022ab511630422dd6acccadfca9b",
"shasum": ""
},
+ "require": {
+ "wp-cli/wp-config-transformer": "^1.2.1"
+ },
"require-dev": {
"behat/behat": "~2.5",
"wp-cli/wp-cli": "*"
@@ -6360,9 +6644,14 @@
"bundled": true,
"commands": [
"config",
+ "config edit",
+ "config delete",
"config create",
"config get",
- "config path"
+ "config has",
+ "config list",
+ "config path",
+ "config set"
]
},
"autoload": {
@@ -6382,24 +6671,29 @@
"name": "Daniel Bachhuber",
"email": "daniel@runcommand.io",
"homepage": "https://runcommand.io"
+ },
+ {
+ "name": "Alain Schlesser",
+ "email": "alain.schlesser@gmail.com",
+ "homepage": "https://www.alainschlesser.com"
}
],
- "description": "Manage the wp-config.php file.",
+ "description": "Generates and reads the wp-config.php file.",
"homepage": "https://github.com/wp-cli/config-command",
- "time": "2017-11-20T22:02:20+00:00"
+ "time": "2018-04-20T08:03:51+00:00"
},
{
"name": "wp-cli/core-command",
- "version": "v1.0.6",
+ "version": "v1.0.9",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/core-command.git",
- "reference": "6662f259f949ab69adb81ff8a1904cf00cd38135"
+ "reference": "0e825668d2c060c40ec1d7debbee94bc08eec9b3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/core-command/zipball/6662f259f949ab69adb81ff8a1904cf00cd38135",
- "reference": "6662f259f949ab69adb81ff8a1904cf00cd38135",
+ "url": "https://api.github.com/repos/wp-cli/core-command/zipball/0e825668d2c060c40ec1d7debbee94bc08eec9b3",
+ "reference": "0e825668d2c060c40ec1d7debbee94bc08eec9b3",
"shasum": ""
},
"require-dev": {
@@ -6413,6 +6707,7 @@
},
"bundled": true,
"commands": [
+ "core",
"core check-update",
"core download",
"core install",
@@ -6443,22 +6738,22 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Download, install, update and manage a WordPress install.",
+ "description": "Downloads, installs, updates, and manages a WordPress installation.",
"homepage": "https://github.com/wp-cli/core-command",
- "time": "2017-11-21T16:01:01+00:00"
+ "time": "2018-01-30T06:57:10+00:00"
},
{
"name": "wp-cli/cron-command",
- "version": "v1.0.4",
+ "version": "v1.0.5",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/cron-command.git",
- "reference": "61243923539fd3c25c667140b113aee44ba7c5cd"
+ "reference": "9da7e36e8f9c14cb171a3c5204cba2865e0ed7ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/cron-command/zipball/61243923539fd3c25c667140b113aee44ba7c5cd",
- "reference": "61243923539fd3c25c667140b113aee44ba7c5cd",
+ "url": "https://api.github.com/repos/wp-cli/cron-command/zipball/9da7e36e8f9c14cb171a3c5204cba2865e0ed7ef",
+ "reference": "9da7e36e8f9c14cb171a3c5204cba2865e0ed7ef",
"shasum": ""
},
"require-dev": {
@@ -6472,11 +6767,14 @@
},
"bundled": true,
"commands": [
+ "cron",
"cron test",
+ "cron event",
"cron event delete",
"cron event list",
"cron event run",
"cron event schedule",
+ "cron schedule",
"cron schedule list"
]
},
@@ -6499,29 +6797,27 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Manage WP-Cron events and schedules.",
+ "description": "Tests, runs, and deletes WP-Cron events; manages WP-Cron schedules.",
"homepage": "https://github.com/wp-cli/cron-command",
- "time": "2017-11-20T22:04:43+00:00"
+ "time": "2017-12-08T15:09:54+00:00"
},
{
"name": "wp-cli/db-command",
- "version": "v1.3.1",
+ "version": "v1.3.4",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/db-command.git",
- "reference": "f040d08a17794b3ac747fe62ba43671aba6d842c"
+ "reference": "c9b7a5ef80f08a16cb7710ac8e63fc57a419bb9f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/db-command/zipball/f040d08a17794b3ac747fe62ba43671aba6d842c",
- "reference": "f040d08a17794b3ac747fe62ba43671aba6d842c",
+ "url": "https://api.github.com/repos/wp-cli/db-command/zipball/c9b7a5ef80f08a16cb7710ac8e63fc57a419bb9f",
+ "reference": "c9b7a5ef80f08a16cb7710ac8e63fc57a419bb9f",
"shasum": ""
},
- "require": {
- "wp-cli/wp-cli": "*"
- },
"require-dev": {
- "behat/behat": "~2.5"
+ "behat/behat": "~2.5",
+ "wp-cli/wp-cli": "^1.5"
},
"type": "wp-cli-package",
"extra": {
@@ -6530,6 +6826,7 @@
},
"bundled": true,
"commands": [
+ "db",
"db create",
"db drop",
"db reset",
@@ -6543,7 +6840,8 @@
"db import",
"db search",
"db tables",
- "db size"
+ "db size",
+ "db columns"
]
},
"autoload": {
@@ -6565,28 +6863,85 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Perform basic database operations using credentials stored in wp-config.php.",
+ "description": "Performs basic database operations using credentials stored in wp-config.php.",
"homepage": "https://github.com/wp-cli/db-command",
- "time": "2017-11-21T01:07:32+00:00"
+ "time": "2018-05-15T15:36:55+00:00"
},
{
- "name": "wp-cli/entity-command",
- "version": "v1.1.3",
+ "name": "wp-cli/embed-command",
+ "version": "v1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/wp-cli/entity-command.git",
- "reference": "0dfecf23e0211678d2c9c0a7b9c0c09bbaf7cf9e"
+ "url": "https://github.com/wp-cli/embed-command.git",
+ "reference": "81319d4243a8dfe096389bf54cdc4fc3dec53497"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/entity-command/zipball/0dfecf23e0211678d2c9c0a7b9c0c09bbaf7cf9e",
- "reference": "0dfecf23e0211678d2c9c0a7b9c0c09bbaf7cf9e",
+ "url": "https://api.github.com/repos/wp-cli/embed-command/zipball/81319d4243a8dfe096389bf54cdc4fc3dec53497",
+ "reference": "81319d4243a8dfe096389bf54cdc4fc3dec53497",
+ "shasum": ""
+ },
+ "require-dev": {
+ "behat/behat": "~2.5",
+ "wp-cli/wp-cli": "^1.5"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ },
+ "bundled": true,
+ "commands": [
+ "embed",
+ "embed fetch",
+ "embed provider list",
+ "embed provider match",
+ "embed handler list",
+ "embed cache clear",
+ "embed cache find",
+ "embed cache trigger"
+ ]
+ },
+ "autoload": {
+ "psr-4": {
+ "WP_CLI\\Embeds\\": "src/"
+ },
+ "files": [
+ "embed-command.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Pascal Birchler",
+ "homepage": "https://pascalbirchler.com/"
+ }
+ ],
+ "description": "Inspects oEmbed providers, clears embed cache, and more.",
+ "homepage": "https://github.com/wp-cli/embed-command",
+ "time": "2018-01-22T21:26:48+00:00"
+ },
+ {
+ "name": "wp-cli/entity-command",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/entity-command.git",
+ "reference": "bf540e238bffc8c39286b1d16708c9d52866c4a5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/entity-command/zipball/bf540e238bffc8c39286b1d16708c9d52866c4a5",
+ "reference": "bf540e238bffc8c39286b1d16708c9d52866c4a5",
"shasum": ""
},
"require-dev": {
"behat/behat": "~2.5",
"phpunit/phpunit": "^4.8",
- "wp-cli/wp-cli": "*"
+ "wp-cli/wp-cli": "^1.5"
},
"type": "wp-cli-package",
"extra": {
@@ -6596,29 +6951,153 @@
"bundled": true,
"commands": [
"comment",
+ "comment approve",
+ "comment count",
+ "comment create",
+ "comment delete",
+ "comment exists",
+ "comment generate",
+ "comment get",
+ "comment list",
"comment meta",
+ "comment meta add",
+ "comment meta delete",
+ "comment meta get",
+ "comment meta list",
+ "comment meta patch",
+ "comment meta pluck",
+ "comment meta update",
+ "comment recount",
+ "comment spam",
+ "comment status",
+ "comment trash",
+ "comment unapprove",
+ "comment unspam",
+ "comment untrash",
+ "comment update",
"menu",
+ "menu create",
+ "menu delete",
"menu item",
+ "menu item add-custom",
+ "menu item add-post",
+ "menu item add-term",
+ "menu item delete",
+ "menu item list",
+ "menu item update",
+ "menu list",
"menu location",
+ "menu location assign",
+ "menu location list",
+ "menu location remove",
"network meta",
+ "network meta add",
+ "network meta delete",
+ "network meta get",
+ "network meta list",
+ "network meta patch",
+ "network meta pluck",
+ "network meta update",
"option",
"option add",
"option delete",
"option get",
"option list",
+ "option patch",
+ "option pluck",
"option update",
"post",
+ "post create",
+ "post delete",
+ "post edit",
+ "post generate",
+ "post get",
+ "post list",
"post meta",
+ "post meta add",
+ "post meta delete",
+ "post meta get",
+ "post meta list",
+ "post meta patch",
+ "post meta pluck",
+ "post meta update",
"post term",
+ "post term add",
+ "post term list",
+ "post term remove",
+ "post term set",
+ "post update",
"post-type",
+ "post-type get",
+ "post-type list",
"site",
+ "site activate",
+ "site archive",
+ "site create",
+ "site deactivate",
+ "site delete",
"site empty",
+ "site list",
+ "site mature",
+ "site option",
+ "site private",
+ "site public",
+ "site spam",
+ "site unarchive",
+ "site unmature",
+ "site unspam",
"taxonomy",
+ "taxonomy get",
+ "taxonomy list",
"term",
+ "term create",
+ "term delete",
+ "term generate",
+ "term get",
+ "term list",
"term meta",
+ "term meta add",
+ "term meta delete",
+ "term meta get",
+ "term meta list",
+ "term meta patch",
+ "term meta pluck",
+ "term meta update",
+ "term recount",
+ "term update",
"user",
+ "user add-cap",
+ "user add-role",
+ "user create",
+ "user delete",
+ "user generate",
+ "user get",
+ "user import-csv",
+ "user list",
+ "user list-caps",
"user meta",
- "user term"
+ "user meta add",
+ "user meta delete",
+ "user meta get",
+ "user meta list",
+ "user meta patch",
+ "user meta pluck",
+ "user meta update",
+ "user remove-cap",
+ "user remove-role",
+ "user reset-password",
+ "user session",
+ "user session destroy",
+ "user session list",
+ "user set-role",
+ "user spam",
+ "user term",
+ "user term add",
+ "user term list",
+ "user term remove",
+ "user term set",
+ "user unspam",
+ "user update"
]
},
"autoload": {
@@ -6643,20 +7122,20 @@
],
"description": "Manage WordPress core entities.",
"homepage": "https://github.com/wp-cli/entity-command",
- "time": "2017-11-21T01:04:50+00:00"
+ "time": "2018-05-28T19:07:39+00:00"
},
{
"name": "wp-cli/eval-command",
- "version": "v1.0.4",
+ "version": "v1.0.5",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/eval-command.git",
- "reference": "1ea666eafe3eaabf2568511f8e0e6ec708a92ca5"
+ "reference": "9640d40ab28cd86590396f08f8c382e659f57321"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/eval-command/zipball/1ea666eafe3eaabf2568511f8e0e6ec708a92ca5",
- "reference": "1ea666eafe3eaabf2568511f8e0e6ec708a92ca5",
+ "url": "https://api.github.com/repos/wp-cli/eval-command/zipball/9640d40ab28cd86590396f08f8c382e659f57321",
+ "reference": "9640d40ab28cd86590396f08f8c382e659f57321",
"shasum": ""
},
"require": {
@@ -6695,30 +7174,30 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Execute arbitrary PHP code.",
+ "description": "Executes arbitrary PHP code or files.",
"homepage": "https://github.com/wp-cli/eval-command",
- "time": "2017-11-21T01:06:56+00:00"
+ "time": "2017-12-08T14:33:34+00:00"
},
{
"name": "wp-cli/export-command",
- "version": "v1.0.4",
+ "version": "v1.0.7",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/export-command.git",
- "reference": "ec18748184a011ad03d6adcb159148d42c966365"
+ "reference": "776d33ad6b2ac93c00fded27402ca8e188e7bff0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/export-command/zipball/ec18748184a011ad03d6adcb159148d42c966365",
- "reference": "ec18748184a011ad03d6adcb159148d42c966365",
+ "url": "https://api.github.com/repos/wp-cli/export-command/zipball/776d33ad6b2ac93c00fded27402ca8e188e7bff0",
+ "reference": "776d33ad6b2ac93c00fded27402ca8e188e7bff0",
"shasum": ""
},
"require": {
- "nb/oxymel": "~0.1.0",
- "wp-cli/wp-cli": "*"
+ "nb/oxymel": "~0.1.0"
},
"require-dev": {
- "behat/behat": "~2.5"
+ "behat/behat": "~2.5",
+ "wp-cli/wp-cli": "^1.5"
},
"type": "wp-cli-package",
"extra": {
@@ -6749,22 +7228,22 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Export WordPress content to a WXR file.",
+ "description": "Exports WordPress content to a WXR file.",
"homepage": "https://github.com/wp-cli/export-command",
- "time": "2017-11-21T01:05:28+00:00"
+ "time": "2018-04-20T08:10:47+00:00"
},
{
"name": "wp-cli/extension-command",
- "version": "v1.1.7",
+ "version": "v1.1.10",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/extension-command.git",
- "reference": "e0ebb16359cf94c2442873d6390ef9a92f6deea5"
+ "reference": "3fd9ff469311bb2d6935997bc7d7e9f157fe29e6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/extension-command/zipball/e0ebb16359cf94c2442873d6390ef9a92f6deea5",
- "reference": "e0ebb16359cf94c2442873d6390ef9a92f6deea5",
+ "url": "https://api.github.com/repos/wp-cli/extension-command/zipball/3fd9ff469311bb2d6935997bc7d7e9f157fe29e6",
+ "reference": "3fd9ff469311bb2d6935997bc7d7e9f157fe29e6",
"shasum": ""
},
"require-dev": {
@@ -6778,6 +7257,7 @@
},
"bundled": true,
"commands": [
+ "plugin",
"plugin activate",
"plugin deactivate",
"plugin delete",
@@ -6791,6 +7271,7 @@
"plugin toggle",
"plugin uninstall",
"plugin update",
+ "theme",
"theme activate",
"theme delete",
"theme disable",
@@ -6799,6 +7280,7 @@
"theme install",
"theme is-installed",
"theme list",
+ "theme mod",
"theme mod get",
"theme mod set",
"theme mod remove",
@@ -6827,22 +7309,22 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Manage WordPress plugins and themes.",
+ "description": "Manages plugins and themes, including installs, activations, and updates.",
"homepage": "https://github.com/wp-cli/extension-command",
- "time": "2017-11-21T01:06:16+00:00"
+ "time": "2018-03-02T13:26:40+00:00"
},
{
"name": "wp-cli/import-command",
- "version": "v1.0.5",
+ "version": "v1.0.7",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/import-command.git",
- "reference": "29eb1d55e555a208a23fa03d47ed377531f3a8ba"
+ "reference": "421fec5bd96671931f2119a89d28bae2f9edeb6b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/import-command/zipball/29eb1d55e555a208a23fa03d47ed377531f3a8ba",
- "reference": "29eb1d55e555a208a23fa03d47ed377531f3a8ba",
+ "url": "https://api.github.com/repos/wp-cli/import-command/zipball/421fec5bd96671931f2119a89d28bae2f9edeb6b",
+ "reference": "421fec5bd96671931f2119a89d28bae2f9edeb6b",
"shasum": ""
},
"require": {
@@ -6880,22 +7362,22 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Import content from a WXR file.",
+ "description": "Imports content from a given WXR file.",
"homepage": "https://github.com/wp-cli/import-command",
- "time": "2017-11-21T00:38:21+00:00"
+ "time": "2018-04-20T08:07:05+00:00"
},
{
"name": "wp-cli/language-command",
- "version": "v1.0.5",
+ "version": "v1.0.6",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/language-command.git",
- "reference": "b089274b7288bb0ec0ae3fda1a8b74c141c7dee2"
+ "reference": "2a3d1ce5a722a4d70809619a065087aa933f6209"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/language-command/zipball/b089274b7288bb0ec0ae3fda1a8b74c141c7dee2",
- "reference": "b089274b7288bb0ec0ae3fda1a8b74c141c7dee2",
+ "url": "https://api.github.com/repos/wp-cli/language-command/zipball/2a3d1ce5a722a4d70809619a065087aa933f6209",
+ "reference": "2a3d1ce5a722a4d70809619a065087aa933f6209",
"shasum": ""
},
"require-dev": {
@@ -6909,6 +7391,7 @@
},
"commands": [
"language",
+ "language core",
"language core activate",
"language core install",
"language core list",
@@ -6936,41 +7419,40 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Manage language packs.",
+ "description": "Installs, activates, and manages language packs.",
"homepage": "https://github.com/wp-cli/language-command",
- "time": "2017-11-21T15:04:33+00:00"
+ "time": "2017-12-08T17:50:26+00:00"
},
{
"name": "wp-cli/media-command",
- "version": "v1.1.2",
+ "version": "v1.1.4",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/media-command.git",
- "reference": "b067f7ba07f8df34d2f29890ff1f54b19d7635b1"
+ "reference": "7f8664ba722505446b3ef3dbc6717e8e7f20265c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/media-command/zipball/b067f7ba07f8df34d2f29890ff1f54b19d7635b1",
- "reference": "b067f7ba07f8df34d2f29890ff1f54b19d7635b1",
+ "url": "https://api.github.com/repos/wp-cli/media-command/zipball/7f8664ba722505446b3ef3dbc6717e8e7f20265c",
+ "reference": "7f8664ba722505446b3ef3dbc6717e8e7f20265c",
"shasum": ""
},
- "require": {
- "wp-cli/wp-cli": "*"
- },
"require-dev": {
- "behat/behat": "~2.5"
+ "behat/behat": "~2.5",
+ "wp-cli/wp-cli": "^1.5"
},
"type": "wp-cli-package",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
},
+ "bundled": true,
"commands": [
+ "media",
"media import",
"media regenerate",
"media image-size"
- ],
- "bundled": true
+ ]
},
"autoload": {
"psr-4": {
@@ -6991,9 +7473,9 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Import new attachments or regenerate existing ones.",
+ "description": "Imports files as attachments, regenerates thumbnails, or lists registered image sizes.",
"homepage": "https://github.com/wp-cli/media-command",
- "time": "2017-11-21T01:04:09+00:00"
+ "time": "2018-01-29T02:17:56+00:00"
},
{
"name": "wp-cli/mustangostang-spyc",
@@ -7045,38 +7527,39 @@
},
{
"name": "wp-cli/package-command",
- "version": "v1.0.9",
+ "version": "v1.0.14",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/package-command.git",
- "reference": "0335f46465a8f26dcec5df60357ffe57f60f3c12"
+ "reference": "a7ce916de5e1d0c3d910d4fc8ca31928ee3775d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/package-command/zipball/0335f46465a8f26dcec5df60357ffe57f60f3c12",
- "reference": "0335f46465a8f26dcec5df60357ffe57f60f3c12",
+ "url": "https://api.github.com/repos/wp-cli/package-command/zipball/a7ce916de5e1d0c3d910d4fc8ca31928ee3775d3",
+ "reference": "a7ce916de5e1d0c3d910d4fc8ca31928ee3775d3",
"shasum": ""
},
"require": {
- "composer/composer": "^1.2.0",
- "wp-cli/wp-cli": "*"
+ "composer/composer": "^1.2.0"
},
"require-dev": {
- "behat/behat": "~2.5"
+ "behat/behat": "~2.5",
+ "wp-cli/wp-cli": "^1.5"
},
"type": "wp-cli-package",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
},
+ "bundled": true,
"commands": [
+ "package",
"package browse",
"package install",
"package list",
"package update",
"package uninstall"
- ],
- "bundled": true
+ ]
},
"autoload": {
"psr-4": {
@@ -7097,22 +7580,22 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Manage WP-CLI packages.",
+ "description": "Lists, installs, and removes WP-CLI packages.",
"homepage": "https://github.com/wp-cli/package-command",
- "time": "2017-11-21T01:02:41+00:00"
+ "time": "2018-05-28T11:40:24+00:00"
},
{
"name": "wp-cli/php-cli-tools",
- "version": "v0.11.8",
+ "version": "v0.11.9",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/php-cli-tools.git",
- "reference": "363c75349f5dde561e0b416dd00f7aaa76fa2c27"
+ "reference": "766653b45f99c817edb2b05dc23f7ee9a893768d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/php-cli-tools/zipball/363c75349f5dde561e0b416dd00f7aaa76fa2c27",
- "reference": "363c75349f5dde561e0b416dd00f7aaa76fa2c27",
+ "url": "https://api.github.com/repos/wp-cli/php-cli-tools/zipball/766653b45f99c817edb2b05dc23f7ee9a893768d",
+ "reference": "766653b45f99c817edb2b05dc23f7ee9a893768d",
"shasum": ""
},
"require": {
@@ -7149,20 +7632,20 @@
"cli",
"console"
],
- "time": "2017-10-12T21:50:48+00:00"
+ "time": "2018-04-20T08:11:30+00:00"
},
{
"name": "wp-cli/rewrite-command",
- "version": "v1.0.4",
+ "version": "v1.0.5",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/rewrite-command.git",
- "reference": "eb6c25d3479900ec3f88eecb0f08050f879de635"
+ "reference": "6b1695887e289ffad14c8f4ea86b5f1d92757408"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/rewrite-command/zipball/eb6c25d3479900ec3f88eecb0f08050f879de635",
- "reference": "eb6c25d3479900ec3f88eecb0f08050f879de635",
+ "url": "https://api.github.com/repos/wp-cli/rewrite-command/zipball/6b1695887e289ffad14c8f4ea86b5f1d92757408",
+ "reference": "6b1695887e289ffad14c8f4ea86b5f1d92757408",
"shasum": ""
},
"require-dev": {
@@ -7175,6 +7658,7 @@
"dev-master": "1.x-dev"
},
"commands": [
+ "rewrite",
"rewrite flush",
"rewrite list",
"rewrite structure"
@@ -7200,22 +7684,22 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Manage rewrite rules.",
+ "description": "Lists or flushes the site's rewrite rules, updates the permalink structure.",
"homepage": "https://github.com/wp-cli/rewrite-command",
- "time": "2017-11-21T13:46:10+00:00"
+ "time": "2017-12-08T17:51:04+00:00"
},
{
"name": "wp-cli/role-command",
- "version": "v1.0.4",
+ "version": "v1.1.0",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/role-command.git",
- "reference": "edc642b21db1b158c7cb2c59459e72b0b4b2920f"
+ "reference": "f50134ea9c27c108b1069cf044f7395c8f9bf716"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/role-command/zipball/edc642b21db1b158c7cb2c59459e72b0b4b2920f",
- "reference": "edc642b21db1b158c7cb2c59459e72b0b4b2920f",
+ "url": "https://api.github.com/repos/wp-cli/role-command/zipball/f50134ea9c27c108b1069cf044f7395c8f9bf716",
+ "reference": "f50134ea9c27c108b1069cf044f7395c8f9bf716",
"shasum": ""
},
"require-dev": {
@@ -7228,11 +7712,13 @@
"dev-master": "1.x-dev"
},
"commands": [
+ "role",
"role create",
"role delete",
"role exists",
"role list",
"role reset",
+ "cap",
"cap add",
"cap list",
"cap remove"
@@ -7258,33 +7744,34 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Manage user roles and capabilities.",
+ "description": "Adds, removes, lists, and resets roles and capabilities.",
"homepage": "https://github.com/wp-cli/role-command",
- "time": "2017-11-21T12:56:19+00:00"
+ "time": "2018-04-20T08:05:51+00:00"
},
{
"name": "wp-cli/scaffold-command",
- "version": "v1.1.0",
+ "version": "v1.1.3",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/scaffold-command.git",
- "reference": "f174112ae3dd88df3b29a68b71b6d72171ba62c3"
+ "reference": "659348f05ebb47e70d7286b2e989146893a3c588"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/scaffold-command/zipball/f174112ae3dd88df3b29a68b71b6d72171ba62c3",
- "reference": "f174112ae3dd88df3b29a68b71b6d72171ba62c3",
+ "url": "https://api.github.com/repos/wp-cli/scaffold-command/zipball/659348f05ebb47e70d7286b2e989146893a3c588",
+ "reference": "659348f05ebb47e70d7286b2e989146893a3c588",
"shasum": ""
},
"require-dev": {
"behat/behat": "~2.5",
- "wp-cli/wp-cli": "*"
+ "wp-cli/wp-cli": "^1.5"
},
"type": "wp-cli-package",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
},
+ "bundled": true,
"commands": [
"scaffold",
"scaffold _s",
@@ -7295,8 +7782,7 @@
"scaffold post-type",
"scaffold taxonomy",
"scaffold theme-tests"
- ],
- "bundled": true
+ ]
},
"autoload": {
"psr-4": {
@@ -7317,39 +7803,37 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Generate code for post types, taxonomies, plugins, child themes, etc.",
+ "description": "Generates code for post types, taxonomies, blocks, plugins, child themes, etc.",
"homepage": "https://github.com/wp-cli/scaffold-command",
- "time": "2017-11-28T13:27:30+00:00"
+ "time": "2018-04-20T18:37:18+00:00"
},
{
"name": "wp-cli/search-replace-command",
- "version": "v1.1.3",
+ "version": "v1.3.1",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/search-replace-command.git",
- "reference": "caa107e45679498329c22a20f3ac355e87f0a3e4"
+ "reference": "be21639dc530ad6506664baa813862d39b6d78ba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/search-replace-command/zipball/caa107e45679498329c22a20f3ac355e87f0a3e4",
- "reference": "caa107e45679498329c22a20f3ac355e87f0a3e4",
+ "url": "https://api.github.com/repos/wp-cli/search-replace-command/zipball/be21639dc530ad6506664baa813862d39b6d78ba",
+ "reference": "be21639dc530ad6506664baa813862d39b6d78ba",
"shasum": ""
},
- "require": {
- "wp-cli/wp-cli": "*"
- },
"require-dev": {
- "behat/behat": "~2.5"
+ "behat/behat": "~2.5",
+ "wp-cli/wp-cli": "^1.5"
},
"type": "wp-cli-package",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
},
+ "bundled": true,
"commands": [
"search-replace"
- ],
- "bundled": true
+ ]
},
"autoload": {
"psr-4": {
@@ -7370,22 +7854,22 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Search/replace strings in the database.",
+ "description": "Searches/replaces strings in the database.",
"homepage": "https://github.com/wp-cli/search-replace-command",
- "time": "2017-11-21T00:39:02+00:00"
+ "time": "2018-05-29T10:21:19+00:00"
},
{
"name": "wp-cli/server-command",
- "version": "v1.0.8",
+ "version": "v1.0.9",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/server-command.git",
- "reference": "836c6c704dff3241c3d97d957e022553eafc4852"
+ "reference": "6192e6d7becd07e4c11a8f1560655c73a3b3526a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/server-command/zipball/836c6c704dff3241c3d97d957e022553eafc4852",
- "reference": "836c6c704dff3241c3d97d957e022553eafc4852",
+ "url": "https://api.github.com/repos/wp-cli/server-command/zipball/6192e6d7becd07e4c11a8f1560655c73a3b3526a",
+ "reference": "6192e6d7becd07e4c11a8f1560655c73a3b3526a",
"shasum": ""
},
"require": {
@@ -7423,22 +7907,22 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Launch PHP's built-in web server for this specific WordPress installation.",
+ "description": "Launches PHP's built-in web server for a specific WordPress installation.",
"homepage": "https://github.com/wp-cli/server-command",
- "time": "2017-11-21T00:44:40+00:00"
+ "time": "2017-12-14T20:06:24+00:00"
},
{
"name": "wp-cli/shell-command",
- "version": "v1.0.4",
+ "version": "v1.0.5",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/shell-command.git",
- "reference": "a91824269520011e9db9ea5caf091a252f7f0b82"
+ "reference": "507603a8994d984b6c4d5bd26e31ede6d9cce37e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/shell-command/zipball/a91824269520011e9db9ea5caf091a252f7f0b82",
- "reference": "a91824269520011e9db9ea5caf091a252f7f0b82",
+ "url": "https://api.github.com/repos/wp-cli/shell-command/zipball/507603a8994d984b6c4d5bd26e31ede6d9cce37e",
+ "reference": "507603a8994d984b6c4d5bd26e31ede6d9cce37e",
"shasum": ""
},
"require": {
@@ -7479,20 +7963,20 @@
],
"description": "Opens an interactive PHP console for running and testing PHP code.",
"homepage": "https://github.com/wp-cli/shell-command",
- "time": "2017-11-21T00:43:56+00:00"
+ "time": "2017-12-08T16:03:53+00:00"
},
{
"name": "wp-cli/super-admin-command",
- "version": "v1.0.5",
+ "version": "v1.0.6",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/super-admin-command.git",
- "reference": "314a3f7b02a04fb5e842ef15d15b58dd1295a320"
+ "reference": "2982d2e6514dbb318561d72d0577746a3a37181e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/super-admin-command/zipball/314a3f7b02a04fb5e842ef15d15b58dd1295a320",
- "reference": "314a3f7b02a04fb5e842ef15d15b58dd1295a320",
+ "url": "https://api.github.com/repos/wp-cli/super-admin-command/zipball/2982d2e6514dbb318561d72d0577746a3a37181e",
+ "reference": "2982d2e6514dbb318561d72d0577746a3a37181e",
"shasum": ""
},
"require-dev": {
@@ -7505,6 +7989,7 @@
"dev-master": "1.x-dev"
},
"commands": [
+ "super-admin",
"super-admin add",
"super-admin list",
"super-admin remove"
@@ -7530,22 +8015,22 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Lists, adds, or removes super admin users on a multisite install.",
+ "description": "Lists, adds, or removes super admin users on a multisite installation.",
"homepage": "https://github.com/wp-cli/super-admin-command",
- "time": "2017-11-21T22:11:13+00:00"
+ "time": "2017-12-08T17:43:53+00:00"
},
{
"name": "wp-cli/widget-command",
- "version": "v1.0.4",
+ "version": "v1.0.5",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/widget-command.git",
- "reference": "86c95ed4bf1d10f090ea42c6421193f4106017e3"
+ "reference": "657e0f77d80c892f8f72f90a3a25112c254386df"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/widget-command/zipball/86c95ed4bf1d10f090ea42c6421193f4106017e3",
- "reference": "86c95ed4bf1d10f090ea42c6421193f4106017e3",
+ "url": "https://api.github.com/repos/wp-cli/widget-command/zipball/657e0f77d80c892f8f72f90a3a25112c254386df",
+ "reference": "657e0f77d80c892f8f72f90a3a25112c254386df",
"shasum": ""
},
"require-dev": {
@@ -7558,6 +8043,7 @@
"dev-master": "1.x-dev"
},
"commands": [
+ "widget",
"widget add",
"widget deactivate",
"widget delete",
@@ -7565,6 +8051,7 @@
"widget move",
"widget reset",
"widget update",
+ "sidebar",
"sidebar list"
],
"bundled": true
@@ -7588,22 +8075,22 @@
"homepage": "https://runcommand.io"
}
],
- "description": "Manage widgets and sidebars.",
+ "description": "Adds, moves, and removes widgets; lists sidebars.",
"homepage": "https://github.com/wp-cli/widget-command",
- "time": "2017-11-21T01:08:14+00:00"
+ "time": "2017-12-08T17:45:57+00:00"
},
{
"name": "wp-cli/wp-cli",
- "version": "v1.4.1",
+ "version": "v1.5.1",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/wp-cli.git",
- "reference": "1d9dec0212fa1e85b1c5ca7b0d8395091c52de40"
+ "reference": "3aac73bc4d629372531f3e15bbb67945d19b5d5a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/wp-cli/zipball/1d9dec0212fa1e85b1c5ca7b0d8395091c52de40",
- "reference": "1d9dec0212fa1e85b1c5ca7b0d8395091c52de40",
+ "url": "https://api.github.com/repos/wp-cli/wp-cli/zipball/3aac73bc4d629372531f3e15bbb67945d19b5d5a",
+ "reference": "3aac73bc4d629372531f3e15bbb67945d19b5d5a",
"shasum": ""
},
"require": {
@@ -7631,6 +8118,7 @@
"wp-cli/core-command": "^1.0",
"wp-cli/cron-command": "^1.0",
"wp-cli/db-command": "^1.0",
+ "wp-cli/embed-command": "^1.0",
"wp-cli/entity-command": "^1.0",
"wp-cli/eval-command": "^1.0",
"wp-cli/export-command": "^1.0",
@@ -7667,6 +8155,9 @@
],
"type": "library",
"extra": {
+ "branch-alias": {
+ "dev-master": "1.5.x-dev"
+ },
"autoload-splitter": {
"splitter-logic": "WP_CLI\\AutoloadSplitter",
"splitter-location": "php/WP_CLI/AutoloadSplitter.php",
@@ -7686,13 +8177,54 @@
"license": [
"MIT"
],
- "description": "A command line interface for WordPress",
- "homepage": "http://wp-cli.org",
+ "description": "The command line interface for WordPress",
+ "homepage": "https://wp-cli.org",
"keywords": [
"cli",
"wordpress"
],
- "time": "2017-11-13T15:28:04+00:00"
+ "time": "2018-05-31T11:04:05+00:00"
+ },
+ {
+ "name": "wp-cli/wp-config-transformer",
+ "version": "v1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/wp-config-transformer.git",
+ "reference": "6ce0a9fae09d53145c9c9c79486a69684598488d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/wp-config-transformer/zipball/6ce0a9fae09d53145c9c9c79486a69684598488d",
+ "reference": "6ce0a9fae09d53145c9c9c79486a69684598488d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.29"
+ },
+ "require-dev": {
+ "composer/composer": "^1.5.6",
+ "phpunit/phpunit": "^6.5.5",
+ "wp-coding-standards/wpcs": "^0.14.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/WPConfigTransformer.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frankie Jarrett",
+ "email": "fjarrett@gmail.com"
+ }
+ ],
+ "description": "Programmatically edit a wp-config.php file.",
+ "time": "2018-03-20T16:19:27+00:00"
},
{
"name": "xamin/handlebars.php",
@@ -7740,13 +8272,15 @@
"aliases": [],
"minimum-stability": "stable",
"stability-flags": {
- "soundasleep/html2text": 20,
- "simplyadmire/composer-plugins": 20
+ "soundasleep/html2text": 20
},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
- "php": ">=5.3.3"
+ "php": ">=5.4"
},
- "platform-dev": []
+ "platform-dev": [],
+ "platform-overrides": {
+ "php": "5.6.30"
+ }
}
diff --git a/lib/API/JSON/v1/Newsletters.php b/lib/API/JSON/v1/Newsletters.php
index 536ce25f40..7a224a9284 100644
--- a/lib/API/JSON/v1/Newsletters.php
+++ b/lib/API/JSON/v1/Newsletters.php
@@ -99,8 +99,7 @@ class Newsletters extends APIEndpoint {
}
}
// reload newsletter with updated options
- $newsletter = Newsletter::filter('filterWithOptions')
- ->findOne($newsletter->id);
+ $newsletter = Newsletter::filter('filterWithOptions', $newsletter->type)->findOne($newsletter->id);
// if this is a post notification, process newsletter options and update its schedule
if($newsletter->type === Newsletter::TYPE_NOTIFICATION) {
// generate the new schedule from options and get the new "next run" date
@@ -151,7 +150,7 @@ class Newsletters extends APIEndpoint {
}
$id = (isset($data['id'])) ? (int)$data['id'] : false;
- $newsletter = Newsletter::filter('filterWithOptions')->findOne($id);
+ $newsletter = Newsletter::findOneWithOptions($id);
if($newsletter === false) {
return $this->errorResponse(array(
@@ -487,7 +486,7 @@ class Newsletters extends APIEndpoint {
&&
$data['type'] === Newsletter::TYPE_NOTIFICATION
) {
- $newsletter = Newsletter::filter('filterWithOptions')->findOne($newsletter->id);
+ $newsletter = Newsletter::filter('filterWithOptions', $data['type'])->findOne($newsletter->id);
Scheduler::processPostNotificationSchedule($newsletter);
}
diff --git a/lib/API/JSON/v1/SendingQueue.php b/lib/API/JSON/v1/SendingQueue.php
index 4eab9cea35..a6c4ba8902 100644
--- a/lib/API/JSON/v1/SendingQueue.php
+++ b/lib/API/JSON/v1/SendingQueue.php
@@ -25,8 +25,7 @@ class SendingQueue extends APIEndpoint {
);
// check that the newsletter exists
- $newsletter = Newsletter::filter('filterWithOptions')
- ->findOne($newsletter_id);
+ $newsletter = Newsletter::findOneWithOptions($newsletter_id);
if($newsletter === false) {
return $this->errorResponse(array(
diff --git a/lib/API/MP/v1/API.php b/lib/API/MP/v1/API.php
index 8724206f0b..8c7d5a512c 100644
--- a/lib/API/MP/v1/API.php
+++ b/lib/API/MP/v1/API.php
@@ -7,6 +7,7 @@ use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Subscribers\Source;
+use MailPoet\Tasks\Sending;
if(!defined('ABSPATH')) exit;
@@ -186,7 +187,12 @@ class API {
// send confirmation email
if($send_confirmation_email && $new_subscriber->status === Subscriber::STATUS_UNCONFIRMED) {
- $this->_sendConfirmationEmail($new_subscriber);
+ $result = $this->_sendConfirmationEmail($new_subscriber);
+ if(!$result && $new_subscriber->getErrors()) {
+ throw new \Exception(
+ __(sprintf('Subscriber added, but confirmation email failed to send: %s', strtolower(implode(', ', $new_subscriber->getErrors()))), 'mailpoet')
+ );
+ }
}
// schedule welcome email(s)
@@ -242,6 +248,16 @@ class API {
}
protected function _scheduleWelcomeNotification(Subscriber $subscriber, array $segments) {
- return Scheduler::scheduleSubscriberWelcomeNotification($subscriber->id, $segments);
+ $result = Scheduler::scheduleSubscriberWelcomeNotification($subscriber->id, $segments);
+ if(is_array($result)) {
+ foreach($result as $queue) {
+ if($queue instanceof Sending && $queue->getErrors()) {
+ throw new \Exception(
+ __(sprintf('Subscriber added, but welcome email failed to send: %s', strtolower(implode(', ', $queue->getErrors()))), 'mailpoet')
+ );
+ }
+ }
+ }
+ return $result;
}
}
diff --git a/lib/Config/DeactivationSurvey.php b/lib/Config/DeactivationSurvey.php
new file mode 100644
index 0000000000..28a06cbb00
--- /dev/null
+++ b/lib/Config/DeactivationSurvey.php
@@ -0,0 +1,51 @@
+renderer = $renderer;
+ }
+
+ public function init() {
+ add_action('admin_print_scripts', array($this, 'js'), 20);
+ add_action('admin_print_scripts', array($this, 'css'));
+ add_action('admin_footer', array($this, 'modal'));
+ }
+
+ private function shouldShow() {
+ if(!function_exists('get_current_screen')) {
+ return false;
+ }
+ $screen = get_current_screen();
+ if(!is_object($screen)) {
+ return false;
+ }
+ return (in_array(get_current_screen()->id, array('plugins', 'plugins-network'), true));
+ }
+
+ public function js() {
+ if(!$this->shouldShow()) {
+ return;
+ }
+ echo $this->renderer->render('deactivationSurvey/js.html');
+ }
+
+ public function css() {
+ if(!$this->shouldShow()) {
+ return;
+ }
+ echo $this->renderer->render('deactivationSurvey/css.html');
+ }
+
+ public function modal() {
+ if(!$this->shouldShow()) {
+ return;
+ }
+ echo $this->renderer->render('deactivationSurvey/index.html');
+ }
+}
diff --git a/lib/Config/Env.php b/lib/Config/Env.php
index 56092b6c34..a2d07896d1 100644
--- a/lib/Config/Env.php
+++ b/lib/Config/Env.php
@@ -5,6 +5,8 @@ namespace MailPoet\Config;
if(!defined('ABSPATH')) exit;
class Env {
+ const NEWSLETTER_CONTENT_WIDTH = 1320;
+
static $version;
static $plugin_name;
static $plugin_path;
diff --git a/lib/Config/Initializer.php b/lib/Config/Initializer.php
index af0f4c043c..8d9a31ae57 100644
--- a/lib/Config/Initializer.php
+++ b/lib/Config/Initializer.php
@@ -145,6 +145,7 @@ class Initializer {
$this->setupPages();
$this->setupPHPVersionWarnings();
+ $this->setupDeactivationSurvey();
do_action('mailpoet_initialized', MAILPOET_VERSION);
} catch(\Exception $e) {
@@ -213,7 +214,7 @@ class Initializer {
}
function setupImages() {
- add_image_size('mailpoet_newsletter_max', 1320);
+ add_image_size('mailpoet_newsletter_max', Env::NEWSLETTER_CONTENT_WIDTH);
}
function setupChangelog() {
@@ -301,4 +302,9 @@ class Initializer {
}
return WPNotice::displayError($exception);
}
-}
\ No newline at end of file
+
+ function setupDeactivationSurvey() {
+ $survey = new DeactivationSurvey($this->renderer);
+ $survey->init();
+ }
+}
diff --git a/lib/Config/Menu.php b/lib/Config/Menu.php
index 385f7d6d20..8ffc870bf0 100644
--- a/lib/Config/Menu.php
+++ b/lib/Config/Menu.php
@@ -384,7 +384,7 @@ class Menu {
$data['is_old_user'] = false;
if(!empty($data['settings']['installed_at'])) {
$installed_at = Carbon::createFromTimestamp(strtotime($data['settings']['installed_at']));
- $current_time = Carbon::createFromTimestamp(WPFunctions::currentTime('timestamp'));
+ $current_time = Carbon::createFromTimestamp(WPFunctions::currentTime('timestamp'));
$data['is_new_user'] = $current_time->diffInDays($installed_at) <= 30;
$data['is_old_user'] = $current_time->diffInMonths($installed_at) >= 6;
$data['stop_call_for_rating'] = isset($data['settings']['stop_call_for_rating']) ? $data['settings']['stop_call_for_rating'] : false;
@@ -438,6 +438,8 @@ class Menu {
)
);
+ $data['is_new_user'] = $this->isNewUser();
+
$data = array_merge($data, Installer::getPremiumStatus());
$this->displayPage('settings.html', $data);
@@ -541,6 +543,8 @@ class Menu {
$data['items_per_page'] = $this->getLimitPerPage('forms');
$data['segments'] = Segment::findArray();
+ $data['is_new_user'] = $this->isNewUser();
+
$this->displayPage('forms.html', $data);
}
@@ -577,7 +581,59 @@ class Menu {
$data['tracking_enabled'] = Setting::getValue('tracking.enabled');
$data['premium_plugin_active'] = License::getLicense();
- $data['automatic_emails'] = array();
+ $data['automatic_emails'] = array(
+ array(
+ 'slug' => 'woocommerce',
+ 'beta' => true,
+ 'premium' => true,
+ 'title' => __('WooCommerce', 'mailpoet'),
+ 'description' => __('Automatically send an email when there is a new WooCommerce product, order and some other action takes place.', 'mailpoet'),
+ 'events' => array(
+ array(
+ 'slug' => 'woocommerce_abandoned_shopping_cart',
+ 'title' => __('Abandoned Shopping Cart', 'mailpoet'),
+ 'description' => __('Send an email to logged-in visitors who have items in their shopping carts but left your website without checking out. Can convert up to 5% of abandoned carts.', 'mailpoet'),
+ 'soon' => true,
+ 'badge' => array(
+ 'text' => __('Must-have', 'mailpoet'),
+ 'style' => 'red'
+ )
+ ),
+ array(
+ 'slug' => 'woocommerce_big_spender',
+ 'title' => __('Big Spender', 'mailpoet'),
+ 'description' => __('Let MailPoet send an email to customers who have spent a certain amount to thank them, possibly with a coupon.', 'mailpoet'),
+ 'soon' => true,
+ 'badge' => array(
+ 'text' => __('Smart to have', 'mailpoet'),
+ 'style' => 'teal'
+ )
+ ),
+ array(
+ 'slug' => 'woocommerce_first_purchase',
+ 'title' => __('First Purchase', 'mailpoet'),
+ 'description' => __('Let MailPoet send an email to customers who make their first purchase.', 'mailpoet'),
+ 'badge' => array(
+ 'text' => __('Must-have', 'mailpoet'),
+ 'style' => 'red'
+ )
+ ),
+ array(
+ 'slug' => 'woocommerce_product_purchased_in_category',
+ 'title' => __('Purchased In This Category', 'mailpoet'),
+ 'description' => __('Let MailPoet send an email to customers who purchase a product from a specific category.', 'mailpoet'),
+ 'soon' => true
+ ),
+ array(
+ 'slug' => 'woocommerce_product_purchased',
+ 'title' => __('Purchased This Product', 'mailpoet'),
+ 'description' => __('Let MailPoet send an email to customers who purchase a specific product.', 'mailpoet'),
+ )
+ )
+ )
+ );
+
+ $data['is_new_user'] = $this->isNewUser();
wp_enqueue_script('jquery-ui');
wp_enqueue_script('jquery-ui-datepicker');
@@ -609,6 +665,9 @@ class Menu {
'month_names' => Block\Date::getMonthNames(),
'sub_menu' => 'mailpoet-subscribers'
));
+
+ $data['is_new_user'] = $this->isNewUser();
+
$this->displayPage('subscribers/importExport/import.html', $data);
}
@@ -747,4 +806,14 @@ class Menu {
$notice->displayWPNotice();
}
}
+
+ function isNewUser() {
+ $installed_at = Setting::getValue('installed_at');
+ if(is_null($installed_at)) {
+ return true;
+ }
+ $installed_at = Carbon::createFromTimestamp(strtotime($installed_at));
+ $current_time = Carbon::createFromTimestamp(WPFunctions::currentTime('timestamp'));
+ return $current_time->diffInDays($installed_at) <= 30;
+ }
}
diff --git a/lib/Config/Migrator.php b/lib/Config/Migrator.php
index 7038655b5e..dcb79b0642 100644
--- a/lib/Config/Migrator.php
+++ b/lib/Config/Migrator.php
@@ -148,6 +148,7 @@ class Migrator {
'count_total int(11) unsigned NOT NULL DEFAULT 0,',
'count_processed int(11) unsigned NOT NULL DEFAULT 0,',
'count_to_process int(11) unsigned NOT NULL DEFAULT 0,',
+ 'meta longtext,',
'created_at TIMESTAMP NULL,',
'updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,',
'deleted_at TIMESTAMP NULL,',
@@ -278,7 +279,7 @@ class Migrator {
'id int(11) unsigned NOT NULL AUTO_INCREMENT,',
'newsletter_id int(11) unsigned NOT NULL,',
'option_field_id int(11) unsigned NOT NULL,',
- 'value varchar(255) NOT NULL DEFAULT "",',
+ 'value longtext,',
'created_at TIMESTAMP NULL,',
'updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,',
'PRIMARY KEY (id),',
diff --git a/lib/Config/PHPVersionWarnings.php b/lib/Config/PHPVersionWarnings.php
index a00f2da0ce..0d42dc9c20 100644
--- a/lib/Config/PHPVersionWarnings.php
+++ b/lib/Config/PHPVersionWarnings.php
@@ -15,16 +15,15 @@ class PHPVersionWarnings {
));
$error = null;
if (!$is_enabled) return $error;
- if (is_null($error)) $error = $this->checkPHP53Version($php_version);
+ if (is_null($error)) $error = $this->checkPHP54Version($php_version);
if (is_null($error)) $error = $this->checkPHP55Version($php_version);
return $error;
}
- function checkPHP53Version($php_version) {
+ function checkPHP54Version($php_version) {
$error_string = null;
if(version_compare($php_version, '5.5', '<')) {
- $error_string = __('Your website is running on PHP %s. MailPoet will require version 7 soon. Please consider upgrading your site\'s PHP version. [link]Your host can help you.[/link]', 'mailpoet');
- $error_string = sprintf($error_string, $php_version);
+ $error_string = __('MailPoet requires PHP version 7 or newer. Please read our [link]instructions[/link] on how to upgrade your site.', 'mailpoet');
$error = Helpers::replaceLinkTags($error_string, 'https://beta.docs.mailpoet.com/article/251-upgrading-the-websites-php-version', array('target' => '_blank'));
return $this->displayWPNotice($error, false);
}
@@ -53,4 +52,4 @@ class PHPVersionWarnings {
set_transient('dismissed-php-version-outdated-notice', true, self::DISMISS_NOTICE_TIMEOUT_SECONDS);
}
-}
\ No newline at end of file
+}
diff --git a/lib/Cron/Workers/Scheduler.php b/lib/Cron/Workers/Scheduler.php
index 384f388b80..82ede9afc1 100644
--- a/lib/Cron/Workers/Scheduler.php
+++ b/lib/Cron/Workers/Scheduler.php
@@ -5,6 +5,8 @@ namespace MailPoet\Cron\Workers;
use Carbon\Carbon;
use MailPoet\Cron\CronHelper;
use MailPoet\Models\Newsletter;
+use MailPoet\Models\ScheduledTask;
+use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Segments\SubscribersFinder;
@@ -29,9 +31,9 @@ class Scheduler {
function process() {
$scheduled_queues = self::getScheduledQueues();
if(!count($scheduled_queues)) return false;
+ $this->updateTasks($scheduled_queues);
foreach($scheduled_queues as $i => $queue) {
- $newsletter = Newsletter::filter('filterWithOptions')
- ->findOne($queue->newsletter_id);
+ $newsletter = Newsletter::findOneWithOptions($queue->newsletter_id);
if(!$newsletter || $newsletter->deleted_at !== null) {
$queue->delete();
} elseif($newsletter->status !== Newsletter::STATUS_ACTIVE && $newsletter->status !== Newsletter::STATUS_SCHEDULED) {
@@ -42,6 +44,8 @@ class Scheduler {
$this->processPostNotificationNewsletter($newsletter, $queue);
} elseif($newsletter->type === Newsletter::TYPE_STANDARD) {
$this->processScheduledStandardNewsletter($newsletter, $queue);
+ } elseif($newsletter->type === Newsletter::TYPE_AUTOMATIC) {
+ $this->processScheduledAutomaticEmail($newsletter, $queue);
}
CronHelper::enforceExecutionLimit($this->timer);
}
@@ -99,6 +103,31 @@ class Scheduler {
return true;
}
+ function processScheduledAutomaticEmail($newsletter, $queue) {
+ if($newsletter->sendTo === 'segment') {
+ $segment = Segment::findOne($newsletter->segment)->asArray();
+ $finder = new SubscribersFinder();
+ $result = $finder->addSubscribersToTaskFromSegments($queue->task(), array($segment));
+ if(empty($result)) {
+ $queue->delete();
+ return false;
+ }
+ } else {
+ $subscribers = $queue->getSubscribers();
+ $subscriber = (!empty($subscribers) && is_array($subscribers)) ?
+ Subscriber::findOne($subscribers[0]) :
+ false;
+ if(!$subscriber) {
+ $queue->delete();
+ return false;
+ }
+ }
+
+ $queue->status = null;
+ $queue->save();
+ return true;
+ }
+
function processScheduledStandardNewsletter($newsletter, $queue) {
$segments = $newsletter->segments()->findArray();
$finder = new SubscribersFinder();
@@ -177,6 +206,13 @@ class Scheduler {
false;
}
+ private function updateTasks(array $scheduled_queues) {
+ $ids = array_map(function ($queue) {
+ return $queue->task_id;
+ }, $scheduled_queues);
+ ScheduledTask::touchAllByIds($ids);
+ }
+
static function getScheduledQueues() {
return SendingTask::getScheduledQueues(self::TASK_BATCH_SIZE);
}
diff --git a/lib/Cron/Workers/SendingQueue/SendingQueue.php b/lib/Cron/Workers/SendingQueue/SendingQueue.php
index bebb66737e..03101f5362 100644
--- a/lib/Cron/Workers/SendingQueue/SendingQueue.php
+++ b/lib/Cron/Workers/SendingQueue/SendingQueue.php
@@ -34,6 +34,7 @@ class SendingQueue {
$this->enforceSendingAndExecutionLimits();
foreach(self::getRunningQueues() as $queue) {
if(!$queue instanceof SendingTask) continue;
+ ScheduledTaskModel::touchAllByIds(array($queue->task_id));
$newsletter = $this->newsletter_task->getNewsletterFromQueue($queue);
if(!$newsletter) {
diff --git a/lib/Models/Newsletter.php b/lib/Models/Newsletter.php
index 0e955cd46f..ad4a7debc5 100644
--- a/lib/Models/Newsletter.php
+++ b/lib/Models/Newsletter.php
@@ -535,7 +535,7 @@ class Newsletter extends Model {
$result = array();
foreach($statisticsExprs as $name => $statisticsExpr) {
- if($this->type !== self::TYPE_WELCOME) {
+ if(!in_array($this->type, array(self::TYPE_WELCOME, self::TYPE_AUTOMATIC))) {
$row = $statisticsExpr->whereRaw('`queue_id` = ?', array($this->queue['id']))->findOne();
} else {
$row = $statisticsExpr
@@ -666,10 +666,13 @@ class Newsletter extends Model {
return $orm;
}
- static function filterWithOptions($orm) {
+ static function filterWithOptions($orm, $type) {
$orm = $orm->select(MP_NEWSLETTERS_TABLE.'.*');
$optionFields = NewsletterOptionField::findArray();
foreach($optionFields as $optionField) {
+ if($optionField['newsletter_type'] !== $type) {
+ continue;
+ }
$orm = $orm->select_expr(
'IFNULL(GROUP_CONCAT(CASE WHEN ' .
MP_NEWSLETTER_OPTION_FIELDS_TABLE . '.id=' . $optionField['id'] . ' THEN ' .
@@ -840,7 +843,6 @@ class Newsletter extends Model {
NewsletterOptionField::$_table,
array(
'option_fields.newsletter_type', '=', self::$_table . '.type',
- 'option_fields.name', '=', 'group'
),
'option_fields'
)
@@ -976,4 +978,18 @@ class Newsletter extends Model {
return parent::where('hash', $hash)
->findOne();
}
+
+ function getMeta() {
+ if(!$this->meta) return;
+
+ return (Helpers::isJson($this->meta)) ? json_decode($this->meta, true) : $this->meta;
+ }
+
+ static function findOneWithOptions($id) {
+ $newsletter = self::findOne($id);
+ if($newsletter === false) {
+ return false;
+ }
+ return self::filter('filterWithOptions', $newsletter->type)->findOne($id);
+ }
}
diff --git a/lib/Models/ScheduledTask.php b/lib/Models/ScheduledTask.php
index 4aa7ce32e0..525f896ce1 100644
--- a/lib/Models/ScheduledTask.php
+++ b/lib/Models/ScheduledTask.php
@@ -74,4 +74,12 @@ class ScheduledTask extends Model {
parent::save();
return $this;
}
+
+ static function touchAllByIds(array $ids) {
+ ScheduledTask::rawExecute(
+ 'UPDATE `' . ScheduledTask::$_table . '`' .
+ 'SET `updated_at` = NOW() ' .
+ 'WHERE `id` IN (' . join(',', $ids) . ')'
+ );
+ }
}
diff --git a/lib/Models/SendingQueue.php b/lib/Models/SendingQueue.php
index 21d67bb423..f443aaeb73 100644
--- a/lib/Models/SendingQueue.php
+++ b/lib/Models/SendingQueue.php
@@ -60,6 +60,12 @@ class SendingQueue extends Model {
json_encode($this->encodeEmojisInBody($this->newsletter_rendered_body))
);
}
+ if(!Helpers::isJson($this->meta)) {
+ $this->set(
+ 'meta',
+ json_encode($this->meta)
+ );
+ }
parent::save();
$this->newsletter_rendered_body = $this->getNewsletterRenderedBody();
return $this;
@@ -86,6 +92,10 @@ class SendingQueue extends Model {
$rendered_newsletter;
}
+ function getMeta() {
+ return (Helpers::isJson($this->meta)) ? json_decode($this->meta, true) : $this->meta;
+ }
+
function encodeEmojisInBody($newsletter_rendered_body) {
if(is_array($newsletter_rendered_body)) {
foreach($newsletter_rendered_body as $key => $value) {
@@ -126,6 +136,7 @@ class SendingQueue extends Model {
function asArray() {
$model = parent::asArray();
$model['newsletter_rendered_body'] = $this->getNewsletterRenderedBody();
+ $model['meta'] = $this->getMeta();
return $model;
}
diff --git a/lib/Models/Subscriber.php b/lib/Models/Subscriber.php
index 632596b9ac..fd96ab71ac 100644
--- a/lib/Models/Subscriber.php
+++ b/lib/Models/Subscriber.php
@@ -904,4 +904,4 @@ class Subscriber extends Model {
->orderByAsc('name')
->findArray();
}
-}
\ No newline at end of file
+}
diff --git a/lib/Newsletter/Editor/PostTransformer.php b/lib/Newsletter/Editor/PostTransformer.php
index 8e4a19fbd1..e9f08ceb7d 100644
--- a/lib/Newsletter/Editor/PostTransformer.php
+++ b/lib/Newsletter/Editor/PostTransformer.php
@@ -5,6 +5,7 @@ use MailPoet\Newsletter\Editor\PostContentManager;
use MailPoet\Newsletter\Editor\MetaInformationManager;
use MailPoet\Newsletter\Editor\StructureTransformer;
use MailPoet\Newsletter\Editor\LayoutHelper;
+use MailPoet\WP\Functions as WPFunctions;
if(!defined('ABSPATH')) exit;
@@ -16,7 +17,7 @@ class PostTransformer {
function __construct($args) {
$this->args = $args;
- $this->with_layout = (bool)filter_var($args['withLayout'], FILTER_VALIDATE_BOOLEAN);
+ $this->with_layout = isset($args['withLayout']) ? (bool)filter_var($args['withLayout'], FILTER_VALIDATE_BOOLEAN) : false;
$this->image_position = 'left';
}
@@ -42,8 +43,8 @@ class PostTransformer {
$featured_image = $this->getFeaturedImage($post);
$image_position = $this->args['featuredImagePosition'];
-
- if($featured_image && $image_position === 'belowTitle') {
+
+ if($featured_image && $image_position === 'belowTitle' && $this->args['displayType'] === 'excerpt') {
array_unshift($content, $title, $featured_image);
} else {
if($content[0]['type'] === 'text') {
@@ -51,7 +52,7 @@ class PostTransformer {
} else {
array_unshift($content, $title);
}
- if($featured_image) {
+ if($featured_image && $this->args['displayType'] === 'excerpt') {
array_unshift($content, $featured_image);
}
}
@@ -65,10 +66,10 @@ class PostTransformer {
$featured_image = $this->getFeaturedImage($post);
$position = $this->args['featuredImagePosition'];
-
+
if(!$featured_image || $position === 'none' || $this->args['displayType'] !== 'excerpt') {
array_unshift($content, $title);
-
+
return array(
LayoutHelper::row(array(
LayoutHelper::col($content)
@@ -147,12 +148,7 @@ class PostTransformer {
}
$thumbnail_id = get_post_thumbnail_id($post_id);
-
- // get attachment data (src, width, height)
- $image_info = wp_get_attachment_image_src(
- $thumbnail_id,
- 'mailpoet_newsletter_max'
- );
+ $image_info = WPFunctions::getImageInfo($thumbnail_id);
// get alt text
$alt_text = trim(strip_tags(get_post_meta(
diff --git a/lib/Newsletter/Editor/TitleListTransformer.php b/lib/Newsletter/Editor/TitleListTransformer.php
index e0c194c18d..fbec65b2c2 100644
--- a/lib/Newsletter/Editor/TitleListTransformer.php
+++ b/lib/Newsletter/Editor/TitleListTransformer.php
@@ -13,11 +13,16 @@ class TitleListTransformer {
$results = array_map(array($this, 'getPostTitle'), $posts);
return array(
- array(
+ $this->wrap(array(
'type' => 'text',
'text' => '' . implode('', $results) . '
',
- ),
- );
+ )));
+ }
+
+ private function wrap($block) {
+ return LayoutHelper::row(array(
+ LayoutHelper::col(array($block))
+ ));
}
private function getPostTitle($post) {
diff --git a/lib/Newsletter/Renderer/Renderer.php b/lib/Newsletter/Renderer/Renderer.php
index b2e6e76a54..c9343682c2 100644
--- a/lib/Newsletter/Renderer/Renderer.php
+++ b/lib/Newsletter/Renderer/Renderer.php
@@ -79,7 +79,7 @@ class Renderer {
foreach($content_blocks as $block) {
if($block['type'] === 'automatedLatestContentLayout') {
$blocks = array_merge(
- $blocks,
+ $blocks,
$this->blocks_renderer->automatedLatestContentTransformedPosts($block)
);
} else {
@@ -210,4 +210,4 @@ class Renderer {
);
return $content;
}
-}
\ No newline at end of file
+}
diff --git a/lib/Newsletter/Renderer/StylesHelper.php b/lib/Newsletter/Renderer/StylesHelper.php
index 37b14a6838..4aadf36772 100644
--- a/lib/Newsletter/Renderer/StylesHelper.php
+++ b/lib/Newsletter/Renderer/StylesHelper.php
@@ -41,6 +41,7 @@ class StylesHelper {
static function getStyles($data, $type, $ignore_specific_styles = false) {
$styles = array_map(function($attribute, $style) use ($ignore_specific_styles) {
if(!$ignore_specific_styles || !in_array($attribute, $ignore_specific_styles)) {
+ $style = StylesHelper::applyFontFamily($attribute, $style);
return StylesHelper::translateCSSAttribute($attribute) . ': ' . $style . ' !important;';
}
}, array_keys($data[$type]), $data[$type]);
diff --git a/lib/Newsletter/Scheduler/Scheduler.php b/lib/Newsletter/Scheduler/Scheduler.php
index c02c0fcb5e..ce68bc50ec 100644
--- a/lib/Newsletter/Scheduler/Scheduler.php
+++ b/lib/Newsletter/Scheduler/Scheduler.php
@@ -30,7 +30,7 @@ class Scheduler {
->where('post_id', $post_id)
->findOne();
if($post === false) {
- self::createPostNotificationQueue($newsletter);
+ self::createPostNotificationSendingTask($newsletter);
}
}
}
@@ -38,13 +38,25 @@ class Scheduler {
static function scheduleSubscriberWelcomeNotification($subscriber_id, $segments) {
$newsletters = self::getNewsletters(Newsletter::TYPE_WELCOME);
if(empty($newsletters)) return false;
+ $result = array();
foreach($newsletters as $newsletter) {
if($newsletter->event === 'segment' &&
in_array($newsletter->segment, $segments)
) {
- self::createWelcomeNotificationQueue($newsletter, $subscriber_id);
+ $result[] = self::createWelcomeNotificationSendingTask($newsletter, $subscriber_id);
}
}
+ return $result;
+ }
+
+ static function scheduleAutomaticEmail($group, $event, $scheduling_condition = false, $subscriber_id = false, $meta = false) {
+ $newsletters = self::getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);
+ if(empty($newsletters)) return false;
+ foreach($newsletters as $newsletter) {
+ if($newsletter->event !== $event) continue;
+ if(is_callable($scheduling_condition) && !$scheduling_condition($newsletter)) continue;
+ self::createAutomaticEmailSendingTask($newsletter, $subscriber_id, $meta);
+ }
}
static function scheduleWPUserWelcomeNotification(
@@ -69,45 +81,49 @@ class Scheduler {
if($newsletter->role === self::WORDPRESS_ALL_ROLES ||
in_array($newsletter->role, $wp_user['roles'])
) {
- self::createWelcomeNotificationQueue($newsletter, $subscriber_id);
+ self::createWelcomeNotificationSendingTask($newsletter, $subscriber_id);
}
}
}
}
- static function createWelcomeNotificationQueue($newsletter, $subscriber_id) {
+ static function createWelcomeNotificationSendingTask($newsletter, $subscriber_id) {
$previously_scheduled_notification = SendingQueue::joinWithSubscribers()
->where('queues.newsletter_id', $newsletter->id)
->where('subscribers.subscriber_id', $subscriber_id)
->findOne();
if(!empty($previously_scheduled_notification)) return;
- $queue = SendingTask::create();
- $queue->newsletter_id = $newsletter->id;
- $queue->setSubscribers(array($subscriber_id));
- $after_time_type = $newsletter->afterTimeType;
- $after_time_number = $newsletter->afterTimeNumber;
- $scheduled_at = null;
- $current_time = Carbon::createFromTimestamp(WPFunctions::currentTime('timestamp'));
- switch($after_time_type) {
- case 'hours':
- $scheduled_at = $current_time->addHours($after_time_number);
- break;
- case 'days':
- $scheduled_at = $current_time->addDays($after_time_number);
- break;
- case 'weeks':
- $scheduled_at = $current_time->addWeeks($after_time_number);
- break;
- default:
- $scheduled_at = $current_time;
- }
- $queue->status = SendingQueue::STATUS_SCHEDULED;
- $queue->priority = SendingQueue::PRIORITY_HIGH;
- $queue->scheduled_at = $scheduled_at;
- return $queue->save();
+ $sending_task = SendingTask::create();
+ $sending_task->newsletter_id = $newsletter->id;
+ $sending_task->setSubscribers(array($subscriber_id));
+ $sending_task->status = SendingQueue::STATUS_SCHEDULED;
+ $sending_task->priority = SendingQueue::PRIORITY_HIGH;
+ $sending_task->scheduled_at = self::getScheduledTimeWithDelay(
+ $newsletter->afterTimeType,
+ $newsletter->afterTimeNumber
+ );
+ return $sending_task->save();
}
- static function createPostNotificationQueue($newsletter) {
+ static function createAutomaticEmailSendingTask($newsletter, $subscriber_id, $meta) {
+ $sending_task = SendingTask::create();
+ $sending_task->newsletter_id = $newsletter->id;
+ if($newsletter->sendTo === 'user' && $subscriber_id) {
+ $sending_task->setSubscribers(array($subscriber_id));
+ }
+ if($meta) {
+ $sending_task->__set('meta', $meta);
+ }
+ $sending_task->status = SendingQueue::STATUS_SCHEDULED;
+ $sending_task->priority = SendingQueue::PRIORITY_MEDIUM;
+ $sending_task->scheduled_at = self::getScheduledTimeWithDelay(
+ $newsletter->afterTimeType,
+ $newsletter->afterTimeNumber
+ );
+ return $sending_task->save();
+ }
+
+ static function createPostNotificationSendingTask($newsletter) {
$existing_notification_history = Newsletter::where('parent_id', $newsletter->id)
->where('type', Newsletter::TYPE_NOTIFICATION_HISTORY)
->where('status', Newsletter::STATUS_SENDING)
@@ -115,7 +131,6 @@ class Scheduler {
if($existing_notification_history) {
return;
}
-
$next_run_date = self::getNextRunDate($newsletter->schedule);
if(!$next_run_date) return;
// do not schedule duplicate queues for the same time
@@ -123,12 +138,12 @@ class Scheduler {
->where('tasks.scheduled_at', $next_run_date)
->findOne();
if($existing_queue) return;
- $queue = SendingTask::create();
- $queue->newsletter_id = $newsletter->id;
- $queue->status = SendingQueue::STATUS_SCHEDULED;
- $queue->scheduled_at = $next_run_date;
- $queue->save();
- return $queue;
+ $sending_task = SendingTask::create();
+ $sending_task->newsletter_id = $newsletter->id;
+ $sending_task->status = SendingQueue::STATUS_SCHEDULED;
+ $sending_task->scheduled_at = $next_run_date;
+ $sending_task->save();
+ return $sending_task;
}
static function processPostNotificationSchedule($newsletter) {
@@ -195,11 +210,25 @@ class Scheduler {
return $previous_run_date;
}
- static function getNewsletters($type) {
+ static function getScheduledTimeWithDelay($after_time_type, $after_time_number) {
+ $current_time = Carbon::createFromTimestamp(WPFunctions::currentTime('timestamp'));
+ switch($after_time_type) {
+ case 'hours':
+ return $current_time->addHours($after_time_number);
+ case 'days':
+ return $current_time->addDays($after_time_number);
+ case 'weeks':
+ return $current_time->addWeeks($after_time_number);
+ default:
+ return $current_time;
+ }
+ }
+
+ static function getNewsletters($type, $group = false) {
return Newsletter::getPublished()
- ->filter('filterType', $type)
+ ->filter('filterType', $type, $group)
->filter('filterStatus', Newsletter::STATUS_ACTIVE)
- ->filter('filterWithOptions')
+ ->filter('filterWithOptions', $type)
->findMany();
}
diff --git a/lib/Router/Endpoints/CronDaemon.php b/lib/Router/Endpoints/CronDaemon.php
index 626e82c010..f99f872af8 100644
--- a/lib/Router/Endpoints/CronDaemon.php
+++ b/lib/Router/Endpoints/CronDaemon.php
@@ -40,4 +40,4 @@ class CronDaemon {
$queue = new Daemon();
$queue->ping();
}
-}
\ No newline at end of file
+}
diff --git a/lib/Router/Endpoints/ViewInBrowser.php b/lib/Router/Endpoints/ViewInBrowser.php
index 7e8a961d63..ba8fad2a2b 100644
--- a/lib/Router/Endpoints/ViewInBrowser.php
+++ b/lib/Router/Endpoints/ViewInBrowser.php
@@ -74,6 +74,11 @@ class ViewInBrowser {
$data->queue = false;
}
+ // reset queue when automatic email is being previewed
+ if($data->newsletter->type === Newsletter::TYPE_AUTOMATIC && !empty($data->preview)) {
+ $data->queue = false;
+ }
+
// allow users with permission to manage emails to preview any newsletter
if(!empty($data->preview) && $this->access_control->validatePermission(AccessControl::PERMISSION_MANAGE_EMAILS)
) return $data;
@@ -101,4 +106,4 @@ class ViewInBrowser {
status_header(404);
exit;
}
-}
\ No newline at end of file
+}
diff --git a/lib/Settings/Pages.php b/lib/Settings/Pages.php
index f2bc701141..9abae8cce5 100644
--- a/lib/Settings/Pages.php
+++ b/lib/Settings/Pages.php
@@ -37,7 +37,6 @@ class Pages {
'post_title' => __('MailPoet Page', 'mailpoet'),
'post_name' => 'subscriptions'
));
- flush_rewrite_rules();
return ((int)$id > 0) ? (int)$id : false;
}
diff --git a/lib/Tasks/Sending.php b/lib/Tasks/Sending.php
index 0cc44c4d2b..632267d9f6 100644
--- a/lib/Tasks/Sending.php
+++ b/lib/Tasks/Sending.php
@@ -30,7 +30,8 @@ class Sending {
'newsletter_rendered_body',
'count_total',
'count_processed',
- 'count_to_process'
+ 'count_to_process',
+ 'meta'
);
private $common_fields = array(
@@ -227,6 +228,7 @@ class Sending {
->whereLte('scheduled_at', Carbon::createFromTimestamp(WPFunctions::currentTime('timestamp')))
->where('type', 'sending')
->whereNotEqual('status', ScheduledTask::STATUS_PAUSED)
+ ->orderByAsc('updated_at')
->limit($amount)
->findMany();
$result = array();
@@ -238,7 +240,7 @@ class Sending {
static function getRunningQueues($amount = self::RESULT_BATCH_SIZE) {
$tasks = ScheduledTask::orderByAsc('priority')
- ->orderByAsc('created_at')
+ ->orderByAsc('updated_at')
->whereNull('deleted_at')
->whereNull('status')
->where('type', 'sending')
diff --git a/lib/Twig/Filters.php b/lib/Twig/Filters.php
index a1936d86b3..ae27635e1c 100644
--- a/lib/Twig/Filters.php
+++ b/lib/Twig/Filters.php
@@ -22,4 +22,4 @@ class Filters extends \Twig_Extension {
)
);
}
-}
\ No newline at end of file
+}
diff --git a/lib/Util/pQuery/pQuery.php b/lib/Util/pQuery/pQuery.php
index b8108d9087..09c98c030f 100644
--- a/lib/Util/pQuery/pQuery.php
+++ b/lib/Util/pQuery/pQuery.php
@@ -18,10 +18,10 @@ class DomNode extends \pQuery\DomNode {
var $childClass = 'MailPoet\Util\pQuery\DomNode';
function getInnerText() {
- return html_entity_decode($this->toString(true, true, 1), ENT_QUOTES, 'UTF-8');
+ return html_entity_decode($this->toString(true, true, 1), ENT_NOQUOTES, 'UTF-8');
}
function getOuterText() {
- return html_entity_decode($this->toString(), ENT_QUOTES, 'UTF-8');
+ return html_entity_decode($this->toString(), ENT_NOQUOTES, 'UTF-8');
}
-}
\ No newline at end of file
+}
diff --git a/lib/WP/Functions.php b/lib/WP/Functions.php
index 0841186beb..388e8c08d9 100644
--- a/lib/WP/Functions.php
+++ b/lib/WP/Functions.php
@@ -1,6 +1,8 @@
'3.7.4',
+ 'version' => '3.7.7',
'filename' => __FILE__,
'path' => dirname(__FILE__),
'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
@@ -43,7 +41,7 @@ if(version_compare(get_bloginfo('version'), '4.6', '<')) {
}
// Check for minimum supported PHP version
-if(version_compare(phpversion(), '5.3.3', '<')) {
+if(version_compare(phpversion(), '5.4.0', '<')) {
add_action('admin_notices', 'mailpoet_php_version_notice');
// deactivate the plugin
add_action('admin_init', 'mailpoet_deactivate_plugin');
@@ -66,7 +64,7 @@ function mailpoet_php_version_notice() {
$notice = str_replace(
'[link]',
'',
- __('MailPoet plugin requires PHP version 5.3.3 or newer. Please read our [link]instructions[/link] on how to resolve this issue.', 'mailpoet')
+ __('MailPoet plugin requires PHP version 5.4.0 or newer. Please read our [link]instructions[/link] on how to resolve this issue.', 'mailpoet')
);
$notice = str_replace('[/link]', '', $notice);
printf('', $notice);
diff --git a/package-lock.json b/package-lock.json
index 8e85822b47..b2078d14b1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2,14 +2,9 @@
"requires": true,
"lockfileVersion": 1,
"dependencies": {
- "Base64": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
- "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=",
- "dev": true
- },
"WP-JS-Hooks": {
- "version": "github:carldanley/WP-JS-Hooks#36b53ee6a56de37849456b67205c9784a00118b1"
+ "version": "github:carldanley/WP-JS-Hooks#36b53ee6a56de37849456b67205c9784a00118b1",
+ "from": "github:carldanley/WP-JS-Hooks"
},
"abab": {
"version": "1.0.4",
@@ -24,18 +19,35 @@
"dev": true
},
"acorn": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
- "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.2.tgz",
+ "integrity": "sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw==",
"dev": true
},
+ "acorn-dynamic-import": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
+ "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
+ "dev": true,
+ "requires": {
+ "acorn": "^4.0.3"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
+ }
+ },
"acorn-globals": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz",
"integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==",
"dev": true,
"requires": {
- "acorn": "5.5.3"
+ "acorn": "^5.0.0"
},
"dependencies": {
"acorn": {
@@ -52,7 +64,7 @@
"integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
"dev": true,
"requires": {
- "acorn": "3.3.0"
+ "acorn": "^3.0.4"
},
"dependencies": {
"acorn": {
@@ -64,19 +76,21 @@
}
},
"ajv": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
- "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"dev": true,
"requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
}
},
"ajv-keywords": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz",
- "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
"dev": true
},
"align-text": {
@@ -84,9 +98,9 @@
"resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
"requires": {
- "kind-of": "3.2.2",
- "longest": "1.0.1",
- "repeat-string": "1.6.1"
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
}
},
"almond": {
@@ -94,15 +108,6 @@
"resolved": "https://registry.npmjs.org/almond/-/almond-0.3.3.tgz",
"integrity": "sha1-oOfJWsdiTWQXtElLHmi/9pMWiiA="
},
- "alter": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz",
- "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=",
- "dev": true,
- "requires": {
- "stable": "0.1.6"
- }
- },
"amd-inject-loader": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/amd-inject-loader/-/amd-inject-loader-0.5.0.tgz",
@@ -115,9 +120,9 @@
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
},
"ansi-escapes": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
- "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
"dev": true
},
"ansi-regex": {
@@ -133,22 +138,22 @@
"dev": true
},
"anymatch": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
- "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
"requires": {
- "micromatch": "2.3.11",
- "normalize-path": "2.1.1"
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
}
},
"argparse": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
- "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
- "sprintf-js": "1.0.3"
+ "sprintf-js": "~1.0.2"
}
},
"aria-query": {
@@ -161,13 +166,10 @@
}
},
"arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "1.1.0"
- }
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
},
"arr-flatten": {
"version": "1.1.0",
@@ -175,6 +177,12 @@
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
"dev": true
},
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
"array-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
@@ -193,8 +201,8 @@
"integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
"dev": true,
"requires": {
- "define-properties": "1.1.2",
- "es-abstract": "1.9.0"
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.7.0"
}
},
"array-union": {
@@ -203,7 +211,7 @@
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
"dev": true,
"requires": {
- "array-uniq": "1.0.3"
+ "array-uniq": "^1.0.1"
}
},
"array-uniq": {
@@ -213,9 +221,9 @@
"dev": true
},
"array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
},
"arrify": {
@@ -241,9 +249,9 @@
"integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.1"
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
}
},
"assert": {
@@ -267,16 +275,10 @@
"integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=",
"dev": true
},
- "ast-traverse": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz",
- "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=",
- "dev": true
- },
- "ast-types": {
- "version": "0.9.6",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
- "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
"dev": true
},
"ast-types-flow": {
@@ -308,6 +310,12 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
+ "atob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
+ "dev": true
+ },
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -335,69 +343,81 @@
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
- "chalk": "1.1.3",
- "esutils": "2.0.2",
- "js-tokens": "3.0.2"
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
}
},
"babel-core": {
- "version": "5.8.38",
- "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz",
- "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=",
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
"dev": true,
"requires": {
- "babel-plugin-constant-folding": "1.0.1",
- "babel-plugin-dead-code-elimination": "1.0.2",
- "babel-plugin-eval": "1.0.1",
- "babel-plugin-inline-environment-variables": "1.0.1",
- "babel-plugin-jscript": "1.0.4",
- "babel-plugin-member-expression-literals": "1.0.1",
- "babel-plugin-property-literals": "1.0.1",
- "babel-plugin-proto-to-assign": "1.0.4",
- "babel-plugin-react-constant-elements": "1.0.3",
- "babel-plugin-react-display-name": "1.0.3",
- "babel-plugin-remove-console": "1.0.1",
- "babel-plugin-remove-debugger": "1.0.1",
- "babel-plugin-runtime": "1.0.7",
- "babel-plugin-undeclared-variables-check": "1.0.2",
- "babel-plugin-undefined-to-void": "1.1.6",
- "babylon": "5.8.38",
- "bluebird": "2.11.0",
- "chalk": "1.1.3",
- "convert-source-map": "1.5.0",
- "core-js": "1.2.7",
- "debug": "2.6.9",
- "detect-indent": "3.0.1",
- "esutils": "2.0.2",
- "fs-readdir-recursive": "0.1.2",
- "globals": "6.4.1",
- "home-or-tmp": "1.0.0",
- "is-integer": "1.0.7",
- "js-tokens": "1.0.1",
- "json5": "0.4.0",
- "lodash": "3.10.1",
- "minimatch": "2.0.10",
- "output-file-sync": "1.1.2",
- "path-exists": "1.0.0",
- "path-is-absolute": "1.0.1",
- "private": "0.1.8",
- "regenerator": "0.8.40",
- "regexpu": "1.3.0",
- "repeating": "1.1.3",
- "resolve": "1.4.0",
- "shebang-regex": "1.0.0",
- "slash": "1.0.0",
- "source-map": "0.5.7",
- "source-map-support": "0.2.10",
- "to-fast-properties": "1.0.3",
- "trim-right": "1.0.1",
- "try-resolve": "1.0.1"
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
},
"dependencies": {
- "js-tokens": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz",
- "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=",
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "minimatch": {
+ "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"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.17.4",
+ "source-map": "^0.5.7",
+ "trim-right": "^1.0.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
},
"source-map": {
@@ -408,125 +428,858 @@
}
}
},
- "babel-loader": {
- "version": "5.4.2",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-5.4.2.tgz",
- "integrity": "sha1-d/4o2OYNDwVrHBvKJbhJTNqrnHY=",
+ "babel-helper-bindify-decorators": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz",
+ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
"dev": true,
"requires": {
- "babel-core": "5.8.38",
- "loader-utils": "0.2.17",
- "object-assign": "3.0.0"
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-builder-binary-assignment-operator-visitor": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
+ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+ "dev": true,
+ "requires": {
+ "babel-helper-explode-assignable-expression": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-builder-react-jsx": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "esutils": "^2.0.2"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
},
"dependencies": {
- "object-assign": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
- "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
}
}
},
- "babel-plugin-constant-folding": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz",
- "integrity": "sha1-g2HTZMmORJw2kr26Ue/whEKQqo4=",
- "dev": true
- },
- "babel-plugin-dead-code-elimination": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz",
- "integrity": "sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U=",
- "dev": true
- },
- "babel-plugin-eval": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz",
- "integrity": "sha1-ovrtJc5r5preS/7CY/cBaRlZUNo=",
- "dev": true
- },
- "babel-plugin-inline-environment-variables": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz",
- "integrity": "sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4=",
- "dev": true
- },
- "babel-plugin-jscript": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz",
- "integrity": "sha1-jzQsOCduh6R9X6CovT1etsytj8w=",
- "dev": true
- },
- "babel-plugin-member-expression-literals": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz",
- "integrity": "sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM=",
- "dev": true
- },
- "babel-plugin-property-literals": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz",
- "integrity": "sha1-AlIwGQAZKYCxwRjv6kjOk6q4MzY=",
- "dev": true
- },
- "babel-plugin-proto-to-assign": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz",
- "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=",
+ "babel-helper-explode-assignable-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
+ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
"dev": true,
"requires": {
- "lodash": "3.10.1"
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
}
},
- "babel-plugin-react-constant-elements": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz",
- "integrity": "sha1-lGc26DeEKcvDSdz/YvUcFDs041o=",
- "dev": true
- },
- "babel-plugin-react-display-name": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz",
- "integrity": "sha1-dU/jiSboQkpOexWrbqYTne4FFPw=",
- "dev": true
- },
- "babel-plugin-remove-console": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz",
- "integrity": "sha1-2PJFVsOgUAXUKqqv0neH9T/wE6c=",
- "dev": true
- },
- "babel-plugin-remove-debugger": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz",
- "integrity": "sha1-/S6jzWGkKK0fO5yJiC/0KT6MFMc=",
- "dev": true
- },
- "babel-plugin-runtime": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz",
- "integrity": "sha1-v3x9lm3Vbs1cF/ocslPJrLflSq8=",
- "dev": true
- },
- "babel-plugin-undeclared-variables-check": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz",
- "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=",
+ "babel-helper-explode-class": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz",
+ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
"dev": true,
"requires": {
- "leven": "1.0.2"
+ "babel-helper-bindify-decorators": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
}
},
- "babel-plugin-undefined-to-void": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz",
- "integrity": "sha1-f1eO+LeN+uYAM4XYQXph7aBuL4E=",
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-remap-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-loader": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz",
+ "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^1.0.0",
+ "loader-utils": "^1.0.2",
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-syntax-async-functions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
"dev": true
},
+ "babel-plugin-syntax-async-generators": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz",
+ "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=",
+ "dev": true
+ },
+ "babel-plugin-syntax-class-properties": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz",
+ "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=",
+ "dev": true
+ },
+ "babel-plugin-syntax-decorators": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
+ "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
+ "dev": true
+ },
+ "babel-plugin-syntax-dynamic-import": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
+ "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=",
+ "dev": true
+ },
+ "babel-plugin-syntax-exponentiation-operator": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
+ "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
+ "dev": true
+ },
+ "babel-plugin-syntax-flow": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+ "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=",
+ "dev": true
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
+ "dev": true
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+ "dev": true
+ },
+ "babel-plugin-syntax-trailing-function-commas": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+ "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
+ "dev": true
+ },
+ "babel-plugin-transform-async-generator-functions": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
+ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
+ "dev": true,
+ "requires": {
+ "babel-helper-remap-async-to-generator": "^6.24.1",
+ "babel-plugin-syntax-async-generators": "^6.5.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+ "dev": true,
+ "requires": {
+ "babel-helper-remap-async-to-generator": "^6.24.1",
+ "babel-plugin-syntax-async-functions": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-class-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz",
+ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-plugin-syntax-class-properties": "^6.8.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-decorators": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz",
+ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
+ "dev": true,
+ "requires": {
+ "babel-helper-explode-class": "^6.24.1",
+ "babel-plugin-syntax-decorators": "^6.13.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "^6.24.1",
+ "babel-helper-function-name": "^6.24.1",
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
+ "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-types": "^6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "^6.24.1",
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "regexpu-core": "^2.0.0"
+ }
+ },
+ "babel-plugin-transform-exponentiation-operator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
+ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-flow-strip-types": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-flow": "^6.18.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "^6.8.0",
+ "babel-runtime": "^6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-display-name": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-react-jsx": "^6.24.1",
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-self": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-source": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.10.0"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-preset-es2015": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
+ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "^6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "^6.24.1",
+ "babel-plugin-transform-es2015-classes": "^6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "^6.22.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1",
+ "babel-plugin-transform-es2015-for-of": "^6.22.0",
+ "babel-plugin-transform-es2015-function-name": "^6.24.1",
+ "babel-plugin-transform-es2015-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
+ "babel-plugin-transform-es2015-object-super": "^6.24.1",
+ "babel-plugin-transform-es2015-parameters": "^6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-spread": "^6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "^6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0",
+ "babel-plugin-transform-es2015-unicode-regex": "^6.24.1",
+ "babel-plugin-transform-regenerator": "^6.24.1"
+ }
+ },
+ "babel-preset-flow": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
+ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-flow-strip-types": "^6.22.0"
+ }
+ },
+ "babel-preset-react": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
+ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "^6.3.13",
+ "babel-plugin-transform-react-display-name": "^6.23.0",
+ "babel-plugin-transform-react-jsx": "^6.24.1",
+ "babel-plugin-transform-react-jsx-self": "^6.22.0",
+ "babel-plugin-transform-react-jsx-source": "^6.22.0",
+ "babel-preset-flow": "^6.23.0"
+ }
+ },
+ "babel-preset-stage-2": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz",
+ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-dynamic-import": "^6.18.0",
+ "babel-plugin-transform-class-properties": "^6.24.1",
+ "babel-plugin-transform-decorators": "^6.24.1",
+ "babel-preset-stage-3": "^6.24.1"
+ }
+ },
+ "babel-preset-stage-3": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz",
+ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
+ "babel-plugin-transform-async-generator-functions": "^6.24.1",
+ "babel-plugin-transform-async-to-generator": "^6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "^6.24.1",
+ "babel-plugin-transform-object-rest-spread": "^6.22.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "home-or-tmp": "^2.0.0",
+ "lodash": "^4.17.4",
+ "mkdirp": "^0.5.1",
+ "source-map-support": "^0.4.15"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ }
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ }
+ }
+ },
"babylon": {
- "version": "5.8.38",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz",
- "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=",
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
},
"backbone": {
@@ -534,7 +1287,7 @@
"resolved": "https://registry.npmjs.org/backbone/-/backbone-1.3.3.tgz",
"integrity": "sha1-TMgOp8sWMaxHSInOQPL4vGg7KZk=",
"requires": {
- "underscore": "1.8.3"
+ "underscore": ">=1.8.3"
}
},
"backbone.marionette": {
@@ -542,7 +1295,7 @@
"resolved": "https://registry.npmjs.org/backbone.marionette/-/backbone.marionette-3.2.0.tgz",
"integrity": "sha1-yY0UaYQ0TsZFMQOsf6GYcFnjjeE=",
"requires": {
- "backbone.radio": "2.0.0"
+ "backbone.radio": "^2.0.0"
}
},
"backbone.radio": {
@@ -555,8 +1308,8 @@
"resolved": "https://registry.npmjs.org/backbone.supermodel/-/backbone.supermodel-1.2.0.tgz",
"integrity": "sha1-a/BpwjqvDMtjtkupMj+J00oNEZQ=",
"requires": {
- "backbone": "1.1.2",
- "underscore": "1.5.2"
+ "backbone": "~1.1.0",
+ "underscore": "~1.5.2"
},
"dependencies": {
"backbone": {
@@ -564,7 +1317,7 @@
"resolved": "https://registry.npmjs.org/backbone/-/backbone-1.1.2.tgz",
"integrity": "sha1-wsBMZr+HJo+4LBd6zr7/fTe6by0=",
"requires": {
- "underscore": "1.5.2"
+ "underscore": ">=1.5.0"
}
},
"underscore": {
@@ -580,6 +1333,67 @@
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
"base64-arraybuffer": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
@@ -598,7 +1412,7 @@
"dev": true,
"optional": true,
"requires": {
- "tweetnacl": "0.14.5"
+ "tweetnacl": "^0.14.3"
}
},
"big.js": {
@@ -618,12 +1432,6 @@
"resolved": "https://registry.npmjs.org/blob-tmp/-/blob-tmp-1.0.0.tgz",
"integrity": "sha1-3oJJHiIv8TVMd6k+6OTqLIlUQnM="
},
- "bluebird": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
- "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=",
- "dev": true
- },
"bn.js": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
@@ -636,7 +1444,7 @@
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"dev": true,
"requires": {
- "hoek": "4.2.1"
+ "hoek": "4.x.x"
}
},
"brace-expansion": {
@@ -645,27 +1453,39 @@
"integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
"dev": true,
"requires": {
- "balanced-match": "1.0.0",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
- "expand-range": "1.8.2",
- "preserve": "0.2.0",
- "repeat-element": "1.1.2"
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
}
},
- "breakable": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz",
- "integrity": "sha1-eEp5eRWjjq0nutRWtVcstLuqeME=",
- "dev": true
- },
"brorand": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
@@ -678,18 +1498,24 @@
"integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=",
"dev": true
},
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
"browserify-aes": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
"integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
"dev": true,
"requires": {
- "buffer-xor": "1.0.3",
- "cipher-base": "1.0.4",
- "create-hash": "1.2.0",
- "evp_bytestokey": "1.0.3",
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"browserify-cipher": {
@@ -698,9 +1524,9 @@
"integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
"dev": true,
"requires": {
- "browserify-aes": "1.2.0",
- "browserify-des": "1.0.1",
- "evp_bytestokey": "1.0.3"
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
}
},
"browserify-des": {
@@ -709,9 +1535,9 @@
"integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "des.js": "1.0.0",
- "inherits": "2.0.3"
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1"
}
},
"browserify-rsa": {
@@ -720,8 +1546,8 @@
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "randombytes": "2.0.6"
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
}
},
"browserify-sign": {
@@ -730,22 +1556,13 @@
"integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "browserify-rsa": "4.0.1",
- "create-hash": "1.2.0",
- "create-hmac": "1.1.7",
- "elliptic": "6.4.0",
- "inherits": "2.0.3",
- "parse-asn1": "5.1.1"
- }
- },
- "browserify-zlib": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
- "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
- "dev": true,
- "requires": {
- "pako": "0.2.9"
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
}
},
"buffer": {
@@ -754,11 +1571,17 @@
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
"dev": true,
"requires": {
- "base64-js": "1.2.1",
- "ieee754": "1.1.8",
- "isarray": "1.0.0"
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
}
},
+ "buffer-from": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
+ "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
+ "dev": true
+ },
"buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
@@ -777,13 +1600,30 @@
"integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
"dev": true
},
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
"caller-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
"integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
"dev": true,
"requires": {
- "callsites": "0.2.0"
+ "callsites": "^0.2.0"
}
},
"callsites": {
@@ -808,8 +1648,8 @@
"resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
"integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
"requires": {
- "align-text": "0.1.4",
- "lazy-cache": "1.0.4"
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
}
},
"chai": {
@@ -834,13 +1674,19 @@
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
}
},
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
"charenc": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
@@ -848,20 +1694,23 @@
"dev": true
},
"chokidar": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
- "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz",
+ "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==",
"dev": true,
"requires": {
- "anymatch": "1.3.2",
- "async-each": "1.0.1",
- "fsevents": "1.1.3",
- "glob-parent": "2.0.0",
- "inherits": "2.0.3",
- "is-binary-path": "1.0.1",
- "is-glob": "2.0.1",
- "path-is-absolute": "1.0.1",
- "readdirp": "2.1.0"
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.0",
+ "braces": "^2.3.0",
+ "fsevents": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^2.1.1",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0",
+ "upath": "^1.0.0"
}
},
"cipher-base": {
@@ -870,8 +1719,8 @@
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"circular-json": {
@@ -880,6 +1729,29 @@
"integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
"dev": true
},
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
"classnames": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz",
@@ -891,16 +1763,16 @@
"integrity": "sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA==",
"dev": true,
"requires": {
- "rimraf": "2.6.2"
+ "rimraf": "^2.6.1"
}
},
"cli-cursor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
- "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
"dev": true,
"requires": {
- "restore-cursor": "1.0.1"
+ "restore-cursor": "^2.0.0"
}
},
"cli-width": {
@@ -914,8 +1786,8 @@
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
"integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
"requires": {
- "center-align": "0.1.3",
- "right-align": "0.1.3",
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
"wordwrap": "0.0.2"
},
"dependencies": {
@@ -926,12 +1798,6 @@
}
}
},
- "clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
- "dev": true
- },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -949,63 +1815,51 @@
"resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.37.0.tgz",
"integrity": "sha512-dQaayDJCLU4UJcwg2RM44oFrs0dMNndTp6qxQJF6XI71l1xN3RB4IqiKES0b0rccbARbrD/UBB4t8DNknfaOTw=="
},
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
+ "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.1"
+ }
+ },
+ "color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
+ "dev": true
+ },
"combined-stream": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"dev": true,
"requires": {
- "delayed-stream": "1.0.0"
+ "delayed-stream": "~1.0.0"
}
},
- "commander": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
- "integrity": "sha1-FXFS/R56bI2YpbcVzzdt+SgARWM=",
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
"dev": true
},
- "commoner": {
- "version": "0.10.8",
- "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz",
- "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=",
- "dev": true,
- "requires": {
- "commander": "2.11.0",
- "detective": "4.5.0",
- "glob": "5.0.15",
- "graceful-fs": "4.1.11",
- "iconv-lite": "0.4.19",
- "mkdirp": "0.5.1",
- "private": "0.1.8",
- "q": "1.5.1",
- "recast": "0.11.23"
- },
- "dependencies": {
- "esprima": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
- "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
- "dev": true
- },
- "recast": {
- "version": "0.11.23",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
- "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
- "dev": true,
- "requires": {
- "ast-types": "0.9.6",
- "esprima": "3.1.3",
- "private": "0.1.8",
- "source-map": "0.5.7"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
},
"concat-map": {
"version": "0.0.1",
@@ -1014,14 +1868,15 @@
"dev": true
},
"concat-stream": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
- "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.3",
- "typedarray": "0.0.6"
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
"console-browserify": {
@@ -1030,7 +1885,7 @@
"integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
"dev": true,
"requires": {
- "date-now": "0.1.4"
+ "date-now": "^0.1.4"
}
},
"constants-browserify": {
@@ -1046,9 +1901,15 @@
"dev": true
},
"convert-source-map": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz",
- "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
"dev": true
},
"core-js": {
@@ -1067,8 +1928,8 @@
"integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "elliptic": "6.4.0"
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
}
},
"create-hash": {
@@ -1077,11 +1938,11 @@
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "inherits": "2.0.3",
- "md5.js": "1.3.4",
- "ripemd160": "2.0.2",
- "sha.js": "2.4.11"
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
}
},
"create-hmac": {
@@ -1090,12 +1951,12 @@
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "create-hash": "1.2.0",
- "inherits": "2.0.3",
- "ripemd160": "2.0.2",
- "safe-buffer": "5.1.1",
- "sha.js": "2.4.11"
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
}
},
"create-react-class": {
@@ -1103,9 +1964,9 @@
"resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.2.tgz",
"integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=",
"requires": {
- "fbjs": "0.8.16",
- "loose-envify": "1.3.1",
- "object-assign": "4.1.1"
+ "fbjs": "^0.8.9",
+ "loose-envify": "^1.3.1",
+ "object-assign": "^4.1.1"
}
},
"cross-env": {
@@ -1114,8 +1975,8 @@
"integrity": "sha512-GSiNTbvTU3pXzewRKGP0Y+rVP2CzifY2pqSEdtHzLLj41pRdkrgY7e4uSnBoR/pmYaqZr/lwwjg/Q4kNX30hWQ==",
"dev": true,
"requires": {
- "cross-spawn": "5.1.0",
- "is-windows": "1.0.2"
+ "cross-spawn": "^5.1.0",
+ "is-windows": "^1.0.0"
}
},
"cross-spawn": {
@@ -1124,9 +1985,9 @@
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
"dev": true,
"requires": {
- "lru-cache": "4.1.3",
- "shebang-command": "1.2.0",
- "which": "1.3.0"
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
}
},
"crypt": {
@@ -1141,7 +2002,7 @@
"integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
"dev": true,
"requires": {
- "boom": "5.2.0"
+ "boom": "5.x.x"
},
"dependencies": {
"boom": {
@@ -1150,7 +2011,7 @@
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"dev": true,
"requires": {
- "hoek": "4.2.1"
+ "hoek": "4.x.x"
}
}
}
@@ -1161,17 +2022,17 @@
"integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
"dev": true,
"requires": {
- "browserify-cipher": "1.0.1",
- "browserify-sign": "4.0.4",
- "create-ecdh": "4.0.3",
- "create-hash": "1.2.0",
- "create-hmac": "1.1.7",
- "diffie-hellman": "5.0.3",
- "inherits": "2.0.3",
- "pbkdf2": "3.0.16",
- "public-encrypt": "4.0.2",
- "randombytes": "2.0.6",
- "randomfill": "1.0.4"
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
}
},
"css-line-break": {
@@ -1179,7 +2040,7 @@
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.0.1.tgz",
"integrity": "sha1-GfIGOjPpX7KDG4ZEbAuAwYivRQo=",
"requires": {
- "base64-arraybuffer": "0.1.5"
+ "base64-arraybuffer": "^0.1.5"
}
},
"css-parse": {
@@ -1200,7 +2061,7 @@
"integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
"dev": true,
"requires": {
- "cssom": "0.3.2"
+ "cssom": "0.3.x"
}
},
"d": {
@@ -1209,7 +2070,7 @@
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"dev": true,
"requires": {
- "es5-ext": "0.10.35"
+ "es5-ext": "^0.10.9"
}
},
"damerau-levenshtein": {
@@ -1224,7 +2085,7 @@
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "^1.0.0"
}
},
"data-urls": {
@@ -1233,9 +2094,9 @@
"integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==",
"dev": true,
"requires": {
- "abab": "1.0.4",
- "whatwg-mimetype": "2.1.0",
- "whatwg-url": "6.4.1"
+ "abab": "^1.0.4",
+ "whatwg-mimetype": "^2.0.0",
+ "whatwg-url": "^6.4.0"
}
},
"date-now": {
@@ -1258,6 +2119,12 @@
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
"deep-eql": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
@@ -1284,32 +2151,55 @@
"integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
"dev": true,
"requires": {
- "foreach": "2.0.5",
- "object-keys": "1.0.11"
+ "foreach": "^2.0.5",
+ "object-keys": "^1.0.8"
}
},
- "defined": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
- "dev": true
- },
- "defs": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz",
- "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=",
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
"requires": {
- "alter": "0.2.0",
- "ast-traverse": "0.1.1",
- "breakable": "1.0.0",
- "esprima-fb": "15001.1001.0-dev-harmony-fb",
- "simple-fmt": "0.1.0",
- "simple-is": "0.2.0",
- "stringmap": "0.2.2",
- "stringset": "0.2.1",
- "tryor": "0.1.2",
- "yargs": "3.27.0"
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
}
},
"del": {
@@ -1318,13 +2208,13 @@
"integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
"dev": true,
"requires": {
- "globby": "5.0.0",
- "is-path-cwd": "1.0.0",
- "is-path-in-cwd": "1.0.0",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "rimraf": "2.6.2"
+ "globby": "^5.0.0",
+ "is-path-cwd": "^1.0.0",
+ "is-path-in-cwd": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "rimraf": "^2.2.8"
}
},
"delayed-stream": {
@@ -1339,43 +2229,23 @@
"integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.1"
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
}
},
"detect-indent": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz",
- "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
"dev": true,
"requires": {
- "get-stdin": "4.0.1",
- "minimist": "1.2.0",
- "repeating": "1.1.3"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
- }
- },
- "detective": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz",
- "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=",
- "dev": true,
- "requires": {
- "acorn": "4.0.13",
- "defined": "1.0.0"
+ "repeating": "^2.0.0"
}
},
"diff": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.8.tgz",
- "integrity": "sha1-NDJ2MI7Jkbe8giZ+1VvBQR+XFmY=",
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"diffie-hellman": {
@@ -1384,19 +2254,18 @@
"integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "miller-rabin": "4.0.1",
- "randombytes": "2.0.6"
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
}
},
"doctrine": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
- "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
"requires": {
- "esutils": "2.0.2",
- "isarray": "1.0.0"
+ "esutils": "^2.0.2"
}
},
"dom-serializer": {
@@ -1404,8 +2273,8 @@
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
"integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
"requires": {
- "domelementtype": "1.1.3",
- "entities": "1.1.1"
+ "domelementtype": "~1.1.1",
+ "entities": "~1.1.1"
},
"dependencies": {
"domelementtype": {
@@ -1432,7 +2301,7 @@
"integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
"dev": true,
"requires": {
- "webidl-conversions": "4.0.2"
+ "webidl-conversions": "^4.0.2"
}
},
"domhandler": {
@@ -1440,7 +2309,7 @@
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
"integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=",
"requires": {
- "domelementtype": "1.3.0"
+ "domelementtype": "1"
}
},
"domutils": {
@@ -1448,8 +2317,8 @@
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.2.tgz",
"integrity": "sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=",
"requires": {
- "dom-serializer": "0.1.0",
- "domelementtype": "1.3.0"
+ "dom-serializer": "0",
+ "domelementtype": "1"
}
},
"ecc-jsbn": {
@@ -1459,7 +2328,7 @@
"dev": true,
"optional": true,
"requires": {
- "jsbn": "0.1.1"
+ "jsbn": "~0.1.0"
}
},
"elliptic": {
@@ -1468,13 +2337,13 @@
"integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "brorand": "1.1.0",
- "hash.js": "1.1.3",
- "hmac-drbg": "1.0.1",
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.1",
- "minimalistic-crypto-utils": "1.0.1"
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
}
},
"emoji-regex": {
@@ -1494,7 +2363,7 @@
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
"requires": {
- "iconv-lite": "0.4.19"
+ "iconv-lite": "~0.4.13"
}
},
"enhanced-resolve": {
@@ -1503,9 +2372,9 @@
"integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "memory-fs": "0.2.0",
- "tapable": "0.1.10"
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.2.0",
+ "tapable": "^0.1.8"
}
},
"entities": {
@@ -1519,7 +2388,7 @@
"integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
"dev": true,
"requires": {
- "prr": "1.0.1"
+ "prr": "~1.0.1"
}
},
"error-ex": {
@@ -1528,7 +2397,7 @@
"integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
"dev": true,
"requires": {
- "is-arrayish": "0.2.1"
+ "is-arrayish": "^0.2.1"
}
},
"es-abstract": {
@@ -1537,11 +2406,11 @@
"integrity": "sha1-aQgpoHyuNrIi5/2bdcDQVz6yUic=",
"dev": true,
"requires": {
- "es-to-primitive": "1.1.1",
- "function-bind": "1.1.1",
- "has": "1.0.1",
- "is-callable": "1.1.3",
- "is-regex": "1.0.4"
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
}
},
"es-to-primitive": {
@@ -1550,19 +2419,20 @@
"integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
"dev": true,
"requires": {
- "is-callable": "1.1.3",
- "is-date-object": "1.0.1",
- "is-symbol": "1.0.1"
+ "is-callable": "^1.1.1",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.1"
}
},
"es5-ext": {
- "version": "0.10.35",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz",
- "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=",
+ "version": "0.10.45",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz",
+ "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==",
"dev": true,
"requires": {
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1"
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.1",
+ "next-tick": "1"
}
},
"es6-iterator": {
@@ -1571,9 +2441,9 @@
"integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.35",
- "es6-symbol": "3.1.1"
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
}
},
"es6-map": {
@@ -1582,12 +2452,12 @@
"integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.35",
- "es6-iterator": "2.0.3",
- "es6-set": "0.1.5",
- "es6-symbol": "3.1.1",
- "event-emitter": "0.3.5"
+ "d": "1",
+ "es5-ext": "~0.10.14",
+ "es6-iterator": "~2.0.1",
+ "es6-set": "~0.1.5",
+ "es6-symbol": "~3.1.1",
+ "event-emitter": "~0.3.5"
}
},
"es6-set": {
@@ -1596,11 +2466,11 @@
"integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.35",
- "es6-iterator": "2.0.3",
+ "d": "1",
+ "es5-ext": "~0.10.14",
+ "es6-iterator": "~2.0.1",
"es6-symbol": "3.1.1",
- "event-emitter": "0.3.5"
+ "event-emitter": "~0.3.5"
}
},
"es6-symbol": {
@@ -1609,8 +2479,8 @@
"integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.35"
+ "d": "1",
+ "es5-ext": "~0.10.14"
}
},
"es6-weak-map": {
@@ -1619,10 +2489,10 @@
"integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.35",
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1"
+ "d": "1",
+ "es5-ext": "^0.10.14",
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
}
},
"escape-string-regexp": {
@@ -1637,11 +2507,11 @@
"integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
"dev": true,
"requires": {
- "esprima": "3.1.3",
- "estraverse": "4.2.0",
- "esutils": "2.0.2",
- "optionator": "0.8.2",
- "source-map": "0.6.1"
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
},
"dependencies": {
"esprima": {
@@ -1665,79 +2535,123 @@
"integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
"dev": true,
"requires": {
- "es6-map": "0.1.5",
- "es6-weak-map": "2.0.2",
- "esrecurse": "4.2.0",
- "estraverse": "4.2.0"
+ "es6-map": "^0.1.3",
+ "es6-weak-map": "^2.0.1",
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
}
},
"eslint": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz",
- "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=",
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+ "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
"dev": true,
"requires": {
- "babel-code-frame": "6.26.0",
- "chalk": "1.1.3",
- "concat-stream": "1.6.0",
- "debug": "2.6.9",
- "doctrine": "2.0.0",
- "escope": "3.6.0",
- "espree": "3.5.1",
- "esquery": "1.0.0",
- "estraverse": "4.2.0",
- "esutils": "2.0.2",
- "file-entry-cache": "2.0.0",
- "glob": "7.1.2",
- "globals": "9.18.0",
- "ignore": "3.3.6",
- "imurmurhash": "0.1.4",
- "inquirer": "0.12.0",
- "is-my-json-valid": "2.16.1",
- "is-resolvable": "1.0.0",
- "js-yaml": "3.10.0",
- "json-stable-stringify": "1.0.1",
- "levn": "0.3.0",
- "lodash": "4.17.4",
- "mkdirp": "0.5.1",
- "natural-compare": "1.4.0",
- "optionator": "0.8.2",
- "path-is-inside": "1.0.2",
- "pluralize": "1.2.1",
- "progress": "1.1.8",
- "require-uncached": "1.0.3",
- "shelljs": "0.7.8",
- "strip-bom": "3.0.0",
- "strip-json-comments": "2.0.1",
- "table": "3.8.3",
- "text-table": "0.2.0",
- "user-home": "2.0.0"
+ "ajv": "^5.3.0",
+ "babel-code-frame": "^6.22.0",
+ "chalk": "^2.1.0",
+ "concat-stream": "^1.6.0",
+ "cross-spawn": "^5.1.0",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^3.7.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^3.5.4",
+ "esquery": "^1.0.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.0.1",
+ "ignore": "^3.3.3",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^3.0.6",
+ "is-resolvable": "^1.0.0",
+ "js-yaml": "^3.9.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^1.0.1",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.3.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "~2.0.1",
+ "table": "4.0.2",
+ "text-table": "~0.2.0"
},
"dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"globals": {
- "version": "9.18.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
- "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "version": "11.5.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz",
+ "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"lodash": {
- "version": "4.17.4",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
},
"minimatch": {
@@ -1746,16 +2660,25 @@
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.8"
+ "brace-expansion": "^1.1.7"
}
},
- "user-home": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
- "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "os-homedir": "1.0.2"
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
}
}
}
@@ -1766,7 +2689,7 @@
"integrity": "sha512-m0q9fiMBzDAIbirlGnpJNWToIhdhJmXXnMG+IFflYzzod9231ZhtmGKegKg8E9T8F1YuVaDSU1FnCm5b9iXVhQ==",
"dev": true,
"requires": {
- "eslint-config-airbnb-base": "11.3.2"
+ "eslint-config-airbnb-base": "^11.3.0"
}
},
"eslint-config-airbnb-base": {
@@ -1775,7 +2698,7 @@
"integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==",
"dev": true,
"requires": {
- "eslint-restricted-globals": "0.1.1"
+ "eslint-restricted-globals": "^0.1.1"
}
},
"eslint-import-resolver-node": {
@@ -1784,8 +2707,8 @@
"integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
"dev": true,
"requires": {
- "debug": "2.6.9",
- "resolve": "1.7.1"
+ "debug": "^2.6.9",
+ "resolve": "^1.5.0"
},
"dependencies": {
"resolve": {
@@ -1794,7 +2717,7 @@
"integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==",
"dev": true,
"requires": {
- "path-parse": "1.0.5"
+ "path-parse": "^1.0.5"
}
}
}
@@ -1805,17 +2728,17 @@
"integrity": "sha512-b6JxR57ruiMxq2tIu4T/SrYED5RKJfeBEs8u3+JWF+O2RxDmFpUH84c5uS1T5qiP0K4r0SL7CXhvd41hXdDlAg==",
"dev": true,
"requires": {
- "array-find": "1.0.0",
- "debug": "2.6.9",
- "enhanced-resolve": "0.9.1",
- "find-root": "0.1.2",
- "has": "1.0.1",
- "interpret": "1.0.4",
- "is-absolute": "0.2.6",
- "lodash.get": "3.7.0",
- "node-libs-browser": "2.1.0",
- "resolve": "1.4.0",
- "semver": "5.5.0"
+ "array-find": "^1.0.0",
+ "debug": "^2.6.8",
+ "enhanced-resolve": "~0.9.0",
+ "find-root": "^0.1.1",
+ "has": "^1.0.1",
+ "interpret": "^1.0.0",
+ "is-absolute": "^0.2.3",
+ "lodash.get": "^3.7.0",
+ "node-libs-browser": "^1.0.0 || ^2.0.0",
+ "resolve": "^1.2.0",
+ "semver": "^5.3.0"
}
},
"eslint-module-utils": {
@@ -1824,8 +2747,8 @@
"integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=",
"dev": true,
"requires": {
- "debug": "2.6.9",
- "pkg-dir": "1.0.0"
+ "debug": "^2.6.8",
+ "pkg-dir": "^1.0.0"
}
},
"eslint-plugin-import": {
@@ -1834,16 +2757,16 @@
"integrity": "sha1-Fa7qN6Z0mdhI6OmBgG1GJ7VQOBY=",
"dev": true,
"requires": {
- "contains-path": "0.1.0",
- "debug": "2.6.9",
+ "contains-path": "^0.1.0",
+ "debug": "^2.6.8",
"doctrine": "1.5.0",
- "eslint-import-resolver-node": "0.3.2",
- "eslint-module-utils": "2.2.0",
- "has": "1.0.1",
- "lodash": "4.17.10",
- "minimatch": "3.0.4",
- "read-pkg-up": "2.0.0",
- "resolve": "1.7.1"
+ "eslint-import-resolver-node": "^0.3.1",
+ "eslint-module-utils": "^2.2.0",
+ "has": "^1.0.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.3",
+ "read-pkg-up": "^2.0.0",
+ "resolve": "^1.6.0"
},
"dependencies": {
"doctrine": {
@@ -1852,8 +2775,8 @@
"integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
"dev": true,
"requires": {
- "esutils": "2.0.2",
- "isarray": "1.0.0"
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
}
},
"lodash": {
@@ -1868,7 +2791,7 @@
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.8"
+ "brace-expansion": "^1.1.7"
}
},
"resolve": {
@@ -1877,7 +2800,7 @@
"integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==",
"dev": true,
"requires": {
- "path-parse": "1.0.5"
+ "path-parse": "^1.0.5"
}
}
}
@@ -1888,13 +2811,13 @@
"integrity": "sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ==",
"dev": true,
"requires": {
- "aria-query": "0.7.0",
- "array-includes": "3.0.3",
+ "aria-query": "^0.7.0",
+ "array-includes": "^3.0.3",
"ast-types-flow": "0.0.7",
- "axobject-query": "0.1.0",
- "damerau-levenshtein": "1.0.4",
- "emoji-regex": "6.5.1",
- "jsx-ast-utils": "1.4.1"
+ "axobject-query": "^0.1.0",
+ "damerau-levenshtein": "^1.0.0",
+ "emoji-regex": "^6.1.0",
+ "jsx-ast-utils": "^1.4.0"
}
},
"eslint-plugin-react": {
@@ -1903,10 +2826,10 @@
"integrity": "sha512-H3ne8ob4Bn6NXSN9N9twsn7t8dyHT5bF/ibQepxIHi6JiPIdC2gXlfYvZYucbdrWio4FxBq7Z4mSauQP+qmMkQ==",
"dev": true,
"requires": {
- "doctrine": "2.1.0",
- "has": "1.0.1",
- "jsx-ast-utils": "2.0.1",
- "prop-types": "15.6.1"
+ "doctrine": "^2.0.2",
+ "has": "^1.0.1",
+ "jsx-ast-utils": "^2.0.1",
+ "prop-types": "^15.6.0"
},
"dependencies": {
"doctrine": {
@@ -1915,7 +2838,7 @@
"integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
"requires": {
- "esutils": "2.0.2"
+ "esutils": "^2.0.2"
}
},
"jsx-ast-utils": {
@@ -1924,7 +2847,7 @@
"integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
"dev": true,
"requires": {
- "array-includes": "3.0.3"
+ "array-includes": "^3.0.3"
}
}
}
@@ -1935,47 +2858,56 @@
"integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=",
"dev": true
},
- "espree": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz",
- "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=",
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
"dev": true,
"requires": {
- "acorn": "5.1.2",
- "acorn-jsx": "3.0.1"
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
},
"dependencies": {
"acorn": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz",
- "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==",
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.2.tgz",
+ "integrity": "sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw==",
"dev": true
}
}
},
- "esprima-fb": {
- "version": "15001.1001.0-dev-harmony-fb",
- "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz",
- "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=",
- "dev": true
- },
"esquery": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
- "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
"dev": true,
"requires": {
- "estraverse": "4.2.0"
+ "estraverse": "^4.0.0"
}
},
"esrecurse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
- "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
"dev": true,
"requires": {
- "estraverse": "4.2.0",
- "object-assign": "4.1.1"
+ "estraverse": "^4.1.0"
}
},
"estraverse": {
@@ -1996,8 +2928,8 @@
"integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.35"
+ "d": "1",
+ "es5-ext": "~0.10.14"
}
},
"events": {
@@ -2012,32 +2944,58 @@
"integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
"dev": true,
"requires": {
- "md5.js": "1.3.4",
- "safe-buffer": "5.1.1"
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
}
},
- "exit-hook": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
- "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
- "dev": true
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
},
"expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"requires": {
- "is-posix-bracket": "0.1.1"
- }
- },
- "expand-range": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
- "dev": true,
- "requires": {
- "fill-range": "2.2.4"
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
}
},
"exports-loader": {
@@ -2046,8 +3004,8 @@
"integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=",
"dev": true,
"requires": {
- "loader-utils": "1.1.0",
- "source-map": "0.5.7"
+ "loader-utils": "^1.0.2",
+ "source-map": "0.5.x"
},
"dependencies": {
"json5": {
@@ -2062,9 +3020,9 @@
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
"dev": true,
"requires": {
- "big.js": "3.2.0",
- "emojis-list": "2.1.0",
- "json5": "0.5.1"
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0"
}
},
"source-map": {
@@ -2087,13 +3045,107 @@
"integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
"dev": true
},
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
}
},
"extsprintf": {
@@ -2125,23 +3177,22 @@
"resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
"integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
"requires": {
- "core-js": "1.2.7",
- "isomorphic-fetch": "2.2.1",
- "loose-envify": "1.3.1",
- "object-assign": "4.1.1",
- "promise": "7.3.1",
- "setimmediate": "1.0.5",
- "ua-parser-js": "0.7.17"
+ "core-js": "^1.0.0",
+ "isomorphic-fetch": "^2.1.1",
+ "loose-envify": "^1.0.0",
+ "object-assign": "^4.1.0",
+ "promise": "^7.1.1",
+ "setimmediate": "^1.0.5",
+ "ua-parser-js": "^0.7.9"
}
},
"figures": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
- "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
"dev": true,
"requires": {
- "escape-string-regexp": "1.0.5",
- "object-assign": "4.1.1"
+ "escape-string-regexp": "^1.0.5"
}
},
"file-entry-cache": {
@@ -2150,8 +3201,8 @@
"integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
"dev": true,
"requires": {
- "flat-cache": "1.3.0",
- "object-assign": "4.1.1"
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
}
},
"file-saver": {
@@ -2159,23 +3210,58 @@
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz",
"integrity": "sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg=="
},
- "filename-regex": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
- "dev": true
- },
"fill-range": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"requires": {
- "is-number": "2.1.0",
- "isobject": "2.1.0",
- "randomatic": "3.0.0",
- "repeat-element": "1.1.2",
- "repeat-string": "1.6.1"
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^1.0.0",
+ "pkg-dir": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ }
}
},
"find-root": {
@@ -2190,8 +3276,8 @@
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"dev": true,
"requires": {
- "path-exists": "2.1.0",
- "pinkie-promise": "2.0.1"
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
},
"dependencies": {
"path-exists": {
@@ -2200,7 +3286,7 @@
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
"dev": true,
"requires": {
- "pinkie-promise": "2.0.1"
+ "pinkie-promise": "^2.0.0"
}
}
}
@@ -2211,7 +3297,7 @@
"integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
"dev": true,
"requires": {
- "glob": "5.0.15"
+ "glob": "~5.0.0"
}
},
"flat-cache": {
@@ -2220,10 +3306,10 @@
"integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
"dev": true,
"requires": {
- "circular-json": "0.3.3",
- "del": "2.2.2",
- "graceful-fs": "4.1.11",
- "write": "0.2.1"
+ "circular-json": "^0.3.1",
+ "del": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "write": "^0.2.1"
}
},
"for-in": {
@@ -2232,15 +3318,6 @@
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
"dev": true
},
- "for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
- "dev": true,
- "requires": {
- "for-in": "1.0.2"
- }
- },
"foreach": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
@@ -2259,9 +3336,9 @@
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
"dev": true,
"requires": {
- "asynckit": "0.4.0",
+ "asynckit": "^0.4.0",
"combined-stream": "1.0.6",
- "mime-types": "2.1.18"
+ "mime-types": "^2.1.12"
}
},
"formatio": {
@@ -2270,7 +3347,16 @@
"integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=",
"dev": true,
"requires": {
- "samsam": "1.1.3"
+ "samsam": "~1.1"
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
}
},
"fs-extra": {
@@ -2279,19 +3365,13 @@
"integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "jsonfile": "2.4.0",
- "klaw": "1.3.1",
- "path-is-absolute": "1.0.1",
- "rimraf": "2.6.2"
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
}
},
- "fs-readdir-recursive": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz",
- "integrity": "sha1-MVtPuMHKW4xH3v7zGdBz2tNWgFk=",
- "dev": true
- },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -2299,39 +3379,30 @@
"dev": true
},
"fsevents": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz",
- "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
"dev": true,
"optional": true,
"requires": {
- "nan": "2.10.0",
- "node-pre-gyp": "0.6.39"
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
},
"dependencies": {
"abbrev": {
- "version": "1.1.0",
+ "version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
},
- "ajv": {
- "version": "4.11.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
- }
- },
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"aproba": {
- "version": "1.1.1",
+ "version": "1.2.0",
"bundled": true,
"dev": true,
"optional": true
@@ -2342,92 +3413,28 @@
"dev": true,
"optional": true,
"requires": {
- "delegates": "1.0.0",
- "readable-stream": "2.2.9"
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
}
},
- "asn1": {
- "version": "0.2.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "assert-plus": {
- "version": "0.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "asynckit": {
- "version": "0.4.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aws-sign2": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aws4": {
- "version": "1.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
"balanced-match": {
- "version": "0.4.2",
+ "version": "1.0.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
- "bcrypt-pbkdf": {
- "version": "1.0.1",
+ "brace-expansion": {
+ "version": "1.1.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "tweetnacl": "0.14.5"
- }
- },
- "block-stream": {
- "version": "0.0.9",
- "bundled": true,
- "dev": true,
- "requires": {
- "inherits": "2.0.3"
- }
- },
- "boom": {
- "version": "2.10.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "hoek": "2.16.3"
- }
- },
- "brace-expansion": {
- "version": "1.1.7",
- "bundled": true,
- "dev": true,
- "requires": {
- "balanced-match": "0.4.2",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
- "buffer-shims": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "co": {
- "version": "4.6.0",
+ "chownr": {
+ "version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
@@ -2435,58 +3442,29 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.5",
- "bundled": true,
"dev": true,
- "requires": {
- "delayed-stream": "1.0.0"
- }
+ "optional": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"core-util-is": {
"version": "1.0.2",
"bundled": true,
- "dev": true
- },
- "cryptiles": {
- "version": "2.0.5",
- "bundled": true,
"dev": true,
- "requires": {
- "boom": "2.10.1"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
+ "optional": true
},
"debug": {
- "version": "2.6.8",
+ "version": "2.6.9",
"bundled": true,
"dev": true,
"optional": true,
@@ -2495,16 +3473,11 @@
}
},
"deep-extend": {
- "version": "0.4.2",
+ "version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true
},
- "delayed-stream": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
"delegates": {
"version": "1.0.0",
"bundled": true,
@@ -2512,74 +3485,25 @@
"optional": true
},
"detect-libc": {
- "version": "1.0.2",
+ "version": "1.0.3",
"bundled": true,
"dev": true,
"optional": true
},
- "ecc-jsbn": {
- "version": "0.1.1",
+ "fs-minipass": {
+ "version": "1.2.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "jsbn": "0.1.1"
- }
- },
- "extend": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "extsprintf": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "form-data": {
- "version": "2.1.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.15"
+ "minipass": "^2.2.1"
}
},
"fs.realpath": {
"version": "1.0.0",
"bundled": true,
- "dev": true
- },
- "fstream": {
- "version": "1.0.11",
- "bundled": true,
"dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "inherits": "2.0.3",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.1"
- }
- },
- "fstream-ignore": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fstream": "1.0.11",
- "inherits": "2.0.3",
- "minimatch": "3.0.4"
- }
+ "optional": true
},
"gauge": {
"version": "2.7.4",
@@ -2587,65 +3511,28 @@
"dev": true,
"optional": true,
"requires": {
- "aproba": "1.1.1",
- "console-control-strings": "1.1.0",
- "has-unicode": "2.0.1",
- "object-assign": "4.1.1",
- "signal-exit": "3.0.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wide-align": "1.1.2"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
}
},
"glob": {
"version": "7.1.2",
"bundled": true,
"dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "bundled": true,
- "dev": true
- },
- "har-schema": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "har-validator": {
- "version": "4.2.1",
- "bundled": true,
- "dev": true,
"optional": true,
"requires": {
- "ajv": "4.11.8",
- "har-schema": "1.0.5"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"has-unicode": {
@@ -2654,49 +3541,42 @@
"dev": true,
"optional": true
},
- "hawk": {
- "version": "3.1.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "boom": "2.10.1",
- "cryptiles": "2.0.5",
- "hoek": "2.16.3",
- "sntp": "1.0.9"
- }
- },
- "hoek": {
- "version": "2.16.3",
- "bundled": true,
- "dev": true
- },
- "http-signature": {
- "version": "1.1.1",
+ "iconv-lite": {
+ "version": "0.4.21",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "0.2.0",
- "jsprim": "1.4.0",
- "sshpk": "1.13.0"
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
}
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"ini": {
- "version": "1.3.4",
+ "version": "1.3.5",
"bundled": true,
"dev": true,
"optional": true
@@ -2705,119 +3585,56 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
- "is-typedarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
"isarray": {
"version": "1.0.0",
"bundled": true,
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "bundled": true,
"dev": true,
"optional": true
},
- "jodid25519": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "jsbn": "0.1.1"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "json-schema": {
- "version": "0.2.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "json-stable-stringify": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "jsonify": "0.0.0"
- }
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "jsonify": {
- "version": "0.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "jsprim": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.0.2",
- "json-schema": "0.2.3",
- "verror": "1.3.6"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "mime-db": {
- "version": "1.27.0",
- "bundled": true,
- "dev": true
- },
- "mime-types": {
- "version": "2.1.15",
- "bundled": true,
- "dev": true,
- "requires": {
- "mime-db": "1.27.0"
- }
- },
"minimatch": {
"version": "3.0.4",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "brace-expansion": "1.1.7"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -2828,23 +3645,33 @@
"dev": true,
"optional": true
},
- "node-pre-gyp": {
- "version": "0.6.39",
+ "needle": {
+ "version": "2.2.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "detect-libc": "1.0.2",
- "hawk": "3.1.3",
- "mkdirp": "0.5.1",
- "nopt": "4.0.1",
- "npmlog": "4.1.0",
- "rc": "1.2.1",
- "request": "2.81.0",
- "rimraf": "2.6.1",
- "semver": "5.3.0",
- "tar": "2.2.1",
- "tar-pack": "3.4.0"
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.0",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.1.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
}
},
"nopt": {
@@ -2853,30 +3680,41 @@
"dev": true,
"optional": true,
"requires": {
- "abbrev": "1.1.0",
- "osenv": "0.1.4"
+ "abbrev": "1",
+ "osenv": "^0.1.4"
}
},
- "npmlog": {
- "version": "4.1.0",
+ "npm-bundled": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "are-we-there-yet": "1.1.4",
- "console-control-strings": "1.1.0",
- "gauge": "2.7.4",
- "set-blocking": "2.0.0"
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
- "dev": true
- },
- "oauth-sign": {
- "version": "0.8.2",
- "bundled": true,
"dev": true,
"optional": true
},
@@ -2890,8 +3728,9 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"os-homedir": {
@@ -2907,53 +3746,37 @@
"optional": true
},
"osenv": {
- "version": "0.1.4",
+ "version": "0.1.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "os-homedir": "1.0.2",
- "os-tmpdir": "1.0.2"
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true,
- "dev": true
- },
- "performance-now": {
- "version": "0.2.0",
- "bundled": true,
"dev": true,
"optional": true
},
"process-nextick-args": {
- "version": "1.0.7",
- "bundled": true,
- "dev": true
- },
- "punycode": {
- "version": "1.4.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "qs": {
- "version": "6.4.0",
+ "version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"rc": {
- "version": "1.2.1",
+ "version": "1.2.7",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "deep-extend": "0.4.2",
- "ini": "1.3.4",
- "minimist": "1.2.0",
- "strip-json-comments": "2.0.1"
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
},
"dependencies": {
"minimist": {
@@ -2965,64 +3788,49 @@
}
},
"readable-stream": {
- "version": "2.2.9",
- "bundled": true,
- "dev": true,
- "requires": {
- "buffer-shims": "1.0.0",
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "string_decoder": "1.0.1",
- "util-deprecate": "1.0.2"
- }
- },
- "request": {
- "version": "2.81.0",
+ "version": "2.3.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "aws-sign2": "0.6.0",
- "aws4": "1.6.0",
- "caseless": "0.12.0",
- "combined-stream": "1.0.5",
- "extend": "3.0.1",
- "forever-agent": "0.6.1",
- "form-data": "2.1.4",
- "har-validator": "4.2.1",
- "hawk": "3.1.3",
- "http-signature": "1.1.1",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.15",
- "oauth-sign": "0.8.2",
- "performance-now": "0.2.0",
- "qs": "6.4.0",
- "safe-buffer": "5.0.1",
- "stringstream": "0.0.5",
- "tough-cookie": "2.3.2",
- "tunnel-agent": "0.6.0",
- "uuid": "3.0.1"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
"rimraf": {
- "version": "2.6.1",
+ "version": "2.6.2",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "glob": "7.1.2"
+ "glob": "^7.0.5"
}
},
"safe-buffer": {
- "version": "5.0.1",
+ "version": "5.1.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
},
"semver": {
- "version": "5.3.0",
+ "version": "5.5.0",
"bundled": true,
"dev": true,
"optional": true
@@ -3039,69 +3847,33 @@
"dev": true,
"optional": true
},
- "sntp": {
- "version": "1.0.9",
- "bundled": true,
- "dev": true,
- "requires": {
- "hoek": "2.16.3"
- }
- },
- "sshpk": {
- "version": "1.13.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "asn1": "0.2.3",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.1",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.1",
- "getpass": "0.1.7",
- "jodid25519": "1.0.2",
- "jsbn": "0.1.1",
- "tweetnacl": "0.14.5"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
"string-width": {
"version": "1.0.2",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
}
},
"string_decoder": {
- "version": "1.0.1",
+ "version": "1.1.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "safe-buffer": "5.0.1"
+ "safe-buffer": "~5.1.0"
}
},
- "stringstream": {
- "version": "0.0.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
@@ -3111,94 +3883,46 @@
"optional": true
},
"tar": {
- "version": "2.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "block-stream": "0.0.9",
- "fstream": "1.0.11",
- "inherits": "2.0.3"
- }
- },
- "tar-pack": {
- "version": "3.4.0",
+ "version": "4.4.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "debug": "2.6.8",
- "fstream": "1.0.11",
- "fstream-ignore": "1.0.5",
- "once": "1.4.0",
- "readable-stream": "2.2.9",
- "rimraf": "2.6.1",
- "tar": "2.2.1",
- "uid-number": "0.0.6"
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.2"
}
},
- "tough-cookie": {
- "version": "2.3.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "punycode": "1.4.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "uid-number": {
- "version": "0.0.6",
- "bundled": true,
- "dev": true,
- "optional": true
- },
"util-deprecate": {
"version": "1.0.2",
"bundled": true,
- "dev": true
- },
- "uuid": {
- "version": "3.0.1",
- "bundled": true,
"dev": true,
"optional": true
},
- "verror": {
- "version": "1.3.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "extsprintf": "1.0.2"
- }
- },
"wide-align": {
"version": "1.1.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "string-width": "1.0.2"
+ "string-width": "^1.0.2"
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
}
}
},
@@ -3208,25 +3932,28 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
- "generate-function": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
- "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
- "generate-object-property": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
- "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
- "dev": true,
- "requires": {
- "is-property": "1.0.2"
- }
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
},
- "get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
"dev": true
},
"getpass": {
@@ -3235,7 +3962,7 @@
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "^1.0.0"
}
},
"glob": {
@@ -3244,36 +3971,38 @@
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"dev": true,
"requires": {
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "2.0.10",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "requires": {
- "glob-parent": "2.0.0",
- "is-glob": "2.0.1"
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
"dev": true,
"requires": {
- "is-glob": "2.0.1"
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
}
},
"globals": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/globals/-/globals-6.4.1.tgz",
- "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=",
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true
},
"globby": {
@@ -3282,12 +4011,12 @@
"integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
"dev": true,
"requires": {
- "array-union": "1.0.2",
- "arrify": "1.0.1",
- "glob": "7.1.2",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
+ "array-union": "^1.0.1",
+ "arrify": "^1.0.0",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
},
"dependencies": {
"glob": {
@@ -3296,12 +4025,12 @@
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"minimatch": {
@@ -3310,7 +4039,7 @@
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.8"
+ "brace-expansion": "^1.1.7"
}
}
}
@@ -3322,9 +4051,9 @@
"dev": true
},
"growl": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.8.1.tgz",
- "integrity": "sha1-Sy3sjZB+k9szZiTc7AGDUC+MlCg=",
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
"dev": true
},
"grunt-cli": {
@@ -3333,10 +4062,10 @@
"integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
"dev": true,
"requires": {
- "findup-sync": "0.3.0",
- "grunt-known-options": "1.1.0",
- "nopt": "3.0.6",
- "resolve": "1.1.7"
+ "findup-sync": "~0.3.0",
+ "grunt-known-options": "~1.1.0",
+ "nopt": "~3.0.6",
+ "resolve": "~1.1.0"
},
"dependencies": {
"resolve": {
@@ -3358,10 +4087,10 @@
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
"integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
"requires": {
- "async": "1.5.2",
- "optimist": "0.6.1",
- "source-map": "0.4.4",
- "uglify-js": "2.8.29"
+ "async": "^1.4.0",
+ "optimist": "^0.6.1",
+ "source-map": "^0.4.4",
+ "uglify-js": "^2.6"
},
"dependencies": {
"source-map": {
@@ -3369,7 +4098,7 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"requires": {
- "amdefine": "1.0.1"
+ "amdefine": ">=0.0.4"
}
}
}
@@ -3386,8 +4115,8 @@
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
"dev": true,
"requires": {
- "ajv": "5.5.2",
- "har-schema": "2.0.0"
+ "ajv": "^5.1.0",
+ "har-schema": "^2.0.0"
},
"dependencies": {
"ajv": {
@@ -3396,10 +4125,10 @@
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"dev": true,
"requires": {
- "co": "4.6.0",
- "fast-deep-equal": "1.1.0",
- "fast-json-stable-stringify": "2.0.0",
- "json-schema-traverse": "0.3.1"
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
}
}
}
@@ -3410,7 +4139,7 @@
"integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
"dev": true,
"requires": {
- "function-bind": "1.1.1"
+ "function-bind": "^1.0.2"
}
},
"has-ansi": {
@@ -3419,23 +4148,55 @@
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
"dev": true
},
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"hash-base": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
"integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"hash.js": {
@@ -3444,8 +4205,8 @@
"integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.1"
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.0"
}
},
"hawk": {
@@ -3454,21 +4215,27 @@
"integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
"dev": true,
"requires": {
- "boom": "4.3.1",
- "cryptiles": "3.1.2",
- "hoek": "4.2.1",
- "sntp": "2.1.0"
+ "boom": "4.x.x",
+ "cryptiles": "3.x.x",
+ "hoek": "4.x.x",
+ "sntp": "2.x.x"
}
},
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
"history": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/history/-/history-1.13.1.tgz",
"integrity": "sha1-HQZk5mfwMdV1fvc+ge+Ee+s67c0=",
"requires": {
- "deep-equal": "1.0.1",
- "invariant": "2.2.2",
- "qs": "4.0.0",
- "warning": "2.1.0"
+ "deep-equal": "^1.0.0",
+ "invariant": "^2.0.0",
+ "qs": "^4.0.0",
+ "warning": "^2.0.0"
}
},
"hmac-drbg": {
@@ -3477,9 +4244,9 @@
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
"dev": true,
"requires": {
- "hash.js": "1.1.3",
- "minimalistic-assert": "1.0.1",
- "minimalistic-crypto-utils": "1.0.1"
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
}
},
"hoek": {
@@ -3494,13 +4261,13 @@
"integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs="
},
"home-or-tmp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz",
- "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
"dev": true,
"requires": {
- "os-tmpdir": "1.0.2",
- "user-home": "1.1.1"
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
}
},
"hosted-git-info": {
@@ -3515,7 +4282,7 @@
"integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
"dev": true,
"requires": {
- "whatwg-encoding": "1.0.3"
+ "whatwg-encoding": "^1.0.1"
}
},
"html2canvas": {
@@ -3531,22 +4298,12 @@
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
"integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
"requires": {
- "domelementtype": "1.3.0",
- "domhandler": "2.4.1",
- "domutils": "1.6.2",
- "entities": "1.1.1",
- "inherits": "2.0.3",
- "readable-stream": "2.3.3"
- }
- },
- "http-browserify": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.7.0.tgz",
- "integrity": "sha1-M3la3nLfiKz7/TZ3PO/tp2RzWyA=",
- "dev": true,
- "requires": {
- "Base64": "0.2.1",
- "inherits": "2.0.3"
+ "domelementtype": "^1.3.0",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
}
},
"http-signature": {
@@ -3555,9 +4312,9 @@
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0",
- "jsprim": "1.4.1",
- "sshpk": "1.14.1"
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
}
},
"https-browserify": {
@@ -3578,9 +4335,9 @@
"dev": true
},
"ignore": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.6.tgz",
- "integrity": "sha512-HrxmNxKTGZ9a3uAl/FNG66Sdt0G9L4TtMbbUQjP1WhGmSj0FOyHvSgx7623aGJvXfPOur8MwmarlHT+37jmzlw==",
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz",
+ "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==",
"dev": true
},
"imports-loader": {
@@ -3589,8 +4346,8 @@
"integrity": "sha1-8gS180cCoywdt9SNidXoZ6BEElM=",
"dev": true,
"requires": {
- "loader-utils": "1.1.0",
- "source-map": "0.5.7"
+ "loader-utils": "^1.0.2",
+ "source-map": "^0.5.6"
},
"dependencies": {
"json5": {
@@ -3605,9 +4362,9 @@
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
"dev": true,
"requires": {
- "big.js": "3.2.0",
- "emojis-list": "2.1.0",
- "json5": "0.5.1"
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0"
}
},
"source-map": {
@@ -3636,8 +4393,8 @@
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
"inherits": {
@@ -3646,31 +4403,82 @@
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"inquirer": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
- "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
"dev": true,
"requires": {
- "ansi-escapes": "1.4.0",
- "ansi-regex": "2.1.1",
- "chalk": "1.1.3",
- "cli-cursor": "1.0.2",
- "cli-width": "2.2.0",
- "figures": "1.7.0",
- "lodash": "4.17.4",
- "readline2": "1.0.1",
- "run-async": "0.1.0",
- "rx-lite": "3.1.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "through": "2.3.8"
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.0.4",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
},
"dependencies": {
- "lodash": {
- "version": "4.17.4",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
}
}
},
@@ -3690,7 +4498,7 @@
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
"integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
"requires": {
- "loose-envify": "1.3.1"
+ "loose-envify": "^1.0.0"
}
},
"invert-kv": {
@@ -3705,8 +4513,8 @@
"integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=",
"dev": true,
"requires": {
- "is-relative": "0.2.1",
- "is-windows": "0.2.0"
+ "is-relative": "^0.2.1",
+ "is-windows": "^0.2.0"
},
"dependencies": {
"is-windows": {
@@ -3717,6 +4525,15 @@
}
}
},
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -3729,7 +4546,7 @@
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
"dev": true,
"requires": {
- "binary-extensions": "1.11.0"
+ "binary-extensions": "^1.0.0"
}
},
"is-buffer": {
@@ -3743,7 +4560,7 @@
"integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
"dev": true,
"requires": {
- "builtin-modules": "1.1.1"
+ "builtin-modules": "^1.0.0"
}
},
"is-callable": {
@@ -3752,25 +4569,38 @@
"integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
"dev": true
},
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
"is-date-object": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
"integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
"dev": true
},
- "is-dotfile": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true
- },
- "is-equal-shallow": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
- "is-primitive": "2.0.0"
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
}
},
"is-extendable": {
@@ -3780,9 +4610,9 @@
"dev": true
},
"is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
},
"is-finite": {
@@ -3791,55 +4621,48 @@
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "1.0.1"
- }
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
},
"is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
- }
- },
- "is-integer": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz",
- "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=",
- "dev": true,
- "requires": {
- "is-finite": "1.0.2"
- }
- },
- "is-my-json-valid": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz",
- "integrity": "sha1-WoRnd+LCYg0eaRBOXToDsfYIjxE=",
- "dev": true,
- "requires": {
- "generate-function": "2.0.0",
- "generate-object-property": "1.2.0",
- "jsonpointer": "4.0.1",
- "xtend": "4.0.1"
+ "is-extglob": "^2.1.1"
}
},
"is-number": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
- "kind-of": "3.2.2"
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
}
},
"is-path-cwd": {
@@ -3849,39 +4672,36 @@
"dev": true
},
"is-path-in-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
- "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
+ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
"dev": true,
"requires": {
- "is-path-inside": "1.0.0"
+ "is-path-inside": "^1.0.0"
}
},
"is-path-inside": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz",
- "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
"dev": true,
"requires": {
- "path-is-inside": "1.0.2"
+ "path-is-inside": "^1.0.1"
}
},
- "is-posix-bracket": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
- "dev": true
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
},
- "is-primitive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
- "dev": true
- },
- "is-property": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
- "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
"dev": true
},
"is-regex": {
@@ -3890,7 +4710,7 @@
"integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
"dev": true,
"requires": {
- "has": "1.0.1"
+ "has": "^1.0.1"
}
},
"is-relative": {
@@ -3899,17 +4719,14 @@
"integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=",
"dev": true,
"requires": {
- "is-unc-path": "0.1.2"
+ "is-unc-path": "^0.1.1"
}
},
"is-resolvable": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz",
- "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=",
- "dev": true,
- "requires": {
- "tryit": "1.0.3"
- }
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
},
"is-stream": {
"version": "1.1.0",
@@ -3934,7 +4751,7 @@
"integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=",
"dev": true,
"requires": {
- "unc-path-regex": "0.1.2"
+ "unc-path-regex": "^0.1.0"
}
},
"is-windows": {
@@ -3955,21 +4772,18 @@
"dev": true
},
"isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
},
"isomorphic-fetch": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
"integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
"requires": {
- "node-fetch": "1.7.3",
- "whatwg-fetch": "2.0.3"
+ "node-fetch": "^1.0.1",
+ "whatwg-fetch": ">=0.10.0"
}
},
"isstream": {
@@ -3978,30 +4792,6 @@
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
},
- "jade": {
- "version": "0.26.3",
- "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz",
- "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=",
- "dev": true,
- "requires": {
- "commander": "0.6.1",
- "mkdirp": "0.3.0"
- },
- "dependencies": {
- "commander": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz",
- "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz",
- "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=",
- "dev": true
- }
- }
- },
"jquery": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
@@ -4018,19 +4808,19 @@
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
},
"js-yaml": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
- "integrity": "sha1-LnhEFka9RoLpY/IrbpKCPDCcYtw=",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
"dev": true,
"requires": {
- "argparse": "1.0.9",
- "esprima": "4.0.0"
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
},
"dependencies": {
"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
}
}
@@ -4048,32 +4838,32 @@
"integrity": "sha512-x5No5FpJgBg3j5aBwA8ka6eGuS5IxbC8FOkmyccKvObtFT0bDMict/LOxINZsZGZSfGdNomLZ/qRV9Bpq/GIBA==",
"dev": true,
"requires": {
- "abab": "1.0.4",
- "acorn": "5.5.3",
- "acorn-globals": "4.1.0",
- "array-equal": "1.0.0",
- "cssom": "0.3.2",
- "cssstyle": "0.2.37",
- "data-urls": "1.0.0",
- "domexception": "1.0.1",
- "escodegen": "1.9.1",
- "html-encoding-sniffer": "1.0.2",
- "left-pad": "1.3.0",
- "nwmatcher": "1.4.4",
+ "abab": "^1.0.4",
+ "acorn": "^5.3.0",
+ "acorn-globals": "^4.1.0",
+ "array-equal": "^1.0.0",
+ "cssom": ">= 0.3.2 < 0.4.0",
+ "cssstyle": ">= 0.2.37 < 0.3.0",
+ "data-urls": "^1.0.0",
+ "domexception": "^1.0.0",
+ "escodegen": "^1.9.0",
+ "html-encoding-sniffer": "^1.0.2",
+ "left-pad": "^1.2.0",
+ "nwmatcher": "^1.4.3",
"parse5": "4.0.0",
- "pn": "1.1.0",
- "request": "2.86.0",
- "request-promise-native": "1.0.5",
- "sax": "1.2.4",
- "symbol-tree": "3.2.2",
- "tough-cookie": "2.3.4",
- "w3c-hr-time": "1.0.1",
- "webidl-conversions": "4.0.2",
- "whatwg-encoding": "1.0.3",
- "whatwg-mimetype": "2.1.0",
- "whatwg-url": "6.4.1",
- "ws": "4.1.0",
- "xml-name-validator": "3.0.0"
+ "pn": "^1.1.0",
+ "request": "^2.83.0",
+ "request-promise-native": "^1.0.5",
+ "sax": "^1.2.4",
+ "symbol-tree": "^3.2.2",
+ "tough-cookie": "^2.3.3",
+ "w3c-hr-time": "^1.0.1",
+ "webidl-conversions": "^4.0.2",
+ "whatwg-encoding": "^1.0.3",
+ "whatwg-mimetype": "^2.1.0",
+ "whatwg-url": "^6.4.0",
+ "ws": "^4.0.0",
+ "xml-name-validator": "^3.0.0"
},
"dependencies": {
"acorn": {
@@ -4091,9 +4881,9 @@
}
},
"jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
"dev": true
},
"json-loader": {
@@ -4114,14 +4904,11 @@
"integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
"dev": true
},
- "json-stable-stringify": {
+ "json-stable-stringify-without-jsonify": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
- "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
- "dev": true,
- "requires": {
- "jsonify": "0.0.0"
- }
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
},
"json-stringify-safe": {
"version": "5.0.1",
@@ -4130,9 +4917,9 @@
"dev": true
},
"json5": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz",
- "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=",
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
"dev": true
},
"jsonfile": {
@@ -4141,21 +4928,9 @@
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11"
+ "graceful-fs": "^4.1.6"
}
},
- "jsonify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
- "dev": true
- },
- "jsonpointer": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
- "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
- "dev": true
- },
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@@ -4179,7 +4954,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"requires": {
- "is-buffer": "1.1.5"
+ "is-buffer": "^1.1.5"
}
},
"klaw": {
@@ -4188,7 +4963,7 @@
"integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11"
+ "graceful-fs": "^4.1.9"
}
},
"lazy-cache": {
@@ -4202,7 +4977,7 @@
"integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
"dev": true,
"requires": {
- "invert-kv": "1.0.0"
+ "invert-kv": "^1.0.0"
}
},
"left-pad": {
@@ -4211,20 +4986,14 @@
"integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
"dev": true
},
- "leven": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz",
- "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=",
- "dev": true
- },
"levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"dev": true,
"requires": {
- "prelude-ls": "1.1.2",
- "type-check": "0.3.2"
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
}
},
"load-json-file": {
@@ -4233,30 +5002,27 @@
"integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "parse-json": "2.2.0",
- "pify": "2.3.0",
- "strip-bom": "3.0.0"
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
}
},
+ "loader-runner": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz",
+ "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=",
+ "dev": true
+ },
"loader-utils": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
- "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
"dev": true,
"requires": {
- "big.js": "3.2.0",
- "emojis-list": "2.1.0",
- "json5": "0.5.1",
- "object-assign": "4.1.1"
- },
- "dependencies": {
- "json5": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
- "dev": true
- }
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0"
}
},
"locate-path": {
@@ -4265,8 +5031,8 @@
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
"dev": true,
"requires": {
- "p-locate": "2.0.0",
- "path-exists": "3.0.0"
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
},
"dependencies": {
"path-exists": {
@@ -4295,7 +5061,7 @@
"integrity": "sha1-PsXiYGAU9MuX91X+aRTt2L/ADqw=",
"dev": true,
"requires": {
- "lodash.isarray": "3.0.4"
+ "lodash.isarray": "^3.0.0"
}
},
"lodash.escaperegexp": {
@@ -4314,8 +5080,8 @@
"integrity": "sha1-POaK4skWg7KBzFOUEoMDy/deaR8=",
"dev": true,
"requires": {
- "lodash._baseget": "3.7.2",
- "lodash._topath": "3.8.1"
+ "lodash._baseget": "^3.0.0",
+ "lodash._topath": "^3.0.0"
}
},
"lodash.isarray": {
@@ -4356,7 +5122,7 @@
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
"integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
"requires": {
- "js-tokens": "3.0.2"
+ "js-tokens": "^3.0.0"
}
},
"lru-cache": {
@@ -4365,25 +5131,51 @@
"integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
"dev": true,
"requires": {
- "pseudomap": "1.0.2",
- "yallist": "2.1.2"
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
}
},
- "math-random": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
- "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
"dev": true
},
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
"md5": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
"integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
"dev": true,
"requires": {
- "charenc": "0.0.2",
- "crypt": "0.0.2",
- "is-buffer": "1.1.5"
+ "charenc": "~0.0.1",
+ "crypt": "~0.0.1",
+ "is-buffer": "~1.1.1"
}
},
"md5.js": {
@@ -4392,8 +5184,17 @@
"integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
"dev": true,
"requires": {
- "hash-base": "3.0.4",
- "inherits": "2.0.3"
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
}
},
"memory-fs": {
@@ -4403,24 +5204,32 @@
"dev": true
},
"micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
"requires": {
- "arr-diff": "2.0.0",
- "array-unique": "0.2.1",
- "braces": "1.8.5",
- "expand-brackets": "0.1.5",
- "extglob": "0.3.2",
- "filename-regex": "2.0.1",
- "is-extglob": "1.0.0",
- "is-glob": "2.0.1",
- "kind-of": "3.2.2",
- "normalize-path": "2.1.1",
- "object.omit": "2.0.1",
- "parse-glob": "3.0.4",
- "regex-cache": "0.4.4"
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
}
},
"miller-rabin": {
@@ -4429,8 +5238,8 @@
"integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "brorand": "1.1.0"
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
}
},
"mime-db": {
@@ -4445,9 +5254,15 @@
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
"dev": true,
"requires": {
- "mime-db": "1.33.0"
+ "mime-db": "~1.33.0"
}
},
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -4461,12 +5276,12 @@
"dev": true
},
"minimatch": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
- "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "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.8"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
@@ -4474,6 +5289,27 @@
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
},
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
@@ -4492,102 +5328,76 @@
}
},
"mocha": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.2.1.tgz",
- "integrity": "sha1-BKL4rrFJ/lAXfgCn710IxjnpEms=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
+ "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
"dev": true,
"requires": {
- "commander": "2.3.0",
- "debug": "2.0.0",
- "diff": "1.0.8",
- "escape-string-regexp": "1.0.2",
- "glob": "3.2.3",
- "growl": "1.8.1",
- "jade": "0.26.3",
- "mkdirp": "0.5.0",
- "supports-color": "1.2.1"
+ "browser-stdout": "1.3.1",
+ "commander": "2.15.1",
+ "debug": "3.1.0",
+ "diff": "3.5.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.2",
+ "growl": "1.10.5",
+ "he": "1.1.1",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "supports-color": "5.4.0"
},
"dependencies": {
"commander": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz",
- "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=",
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
"dev": true
},
"debug": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.0.0.tgz",
- "integrity": "sha1-ib2d9nMrUSVrxnBTQrugLtEhMe8=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
- "ms": "0.6.2"
+ "ms": "2.0.0"
}
},
- "escape-string-regexp": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz",
- "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=",
- "dev": true
- },
"glob": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz",
- "integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
- "graceful-fs": "2.0.3",
- "inherits": "2.0.3",
- "minimatch": "0.2.14"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
- "graceful-fs": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz",
- "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=",
- "dev": true
- },
- "lru-cache": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
- "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"minimatch": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
- "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "lru-cache": "2.7.3",
- "sigmund": "1.0.1"
+ "brace-expansion": "^1.1.7"
}
},
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
- "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz",
- "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=",
- "dev": true
- },
"supports-color": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.1.tgz",
- "integrity": "sha1-Eu4hUHCGzZjBBY2ewPSsR2t687I=",
- "dev": true
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
}
}
},
@@ -4603,9 +5413,9 @@
"dev": true
},
"mute-stream": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz",
- "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=",
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
"dev": true
},
"nan": {
@@ -4615,12 +5425,52 @@
"dev": true,
"optional": true
},
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-odd": "^2.0.0",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true
},
+ "neo-async": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz",
+ "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==",
+ "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
+ },
"nib": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/nib/-/nib-1.1.2.tgz",
@@ -4635,8 +5485,8 @@
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
"requires": {
- "encoding": "0.1.12",
- "is-stream": "1.1.0"
+ "encoding": "^0.1.11",
+ "is-stream": "^1.0.1"
}
},
"node-libs-browser": {
@@ -4645,28 +5495,28 @@
"integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
"dev": true,
"requires": {
- "assert": "1.4.1",
- "browserify-zlib": "0.2.0",
- "buffer": "4.9.1",
- "console-browserify": "1.1.0",
- "constants-browserify": "1.0.0",
- "crypto-browserify": "3.12.0",
- "domain-browser": "1.1.7",
- "events": "1.1.1",
- "https-browserify": "1.0.0",
- "os-browserify": "0.3.0",
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^1.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
"path-browserify": "0.0.0",
- "process": "0.11.10",
- "punycode": "1.4.1",
- "querystring-es3": "0.2.1",
- "readable-stream": "2.3.3",
- "stream-browserify": "2.0.1",
- "stream-http": "2.8.2",
- "string_decoder": "1.0.3",
- "timers-browserify": "2.0.10",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
"tty-browserify": "0.0.0",
- "url": "0.11.0",
- "util": "0.10.3",
+ "url": "^0.11.0",
+ "util": "^0.10.3",
"vm-browserify": "0.0.4"
},
"dependencies": {
@@ -4676,7 +5526,7 @@
"integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
"dev": true,
"requires": {
- "pako": "1.0.6"
+ "pako": "~1.0.5"
}
},
"pako": {
@@ -4691,7 +5541,7 @@
"integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
"dev": true,
"requires": {
- "setimmediate": "1.0.5"
+ "setimmediate": "^1.0.4"
}
}
}
@@ -4702,7 +5552,7 @@
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"dev": true,
"requires": {
- "abbrev": "1.1.1"
+ "abbrev": "1"
}
},
"normalize-package-data": {
@@ -4711,10 +5561,10 @@
"integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
"dev": true,
"requires": {
- "hosted-git-info": "2.6.0",
- "is-builtin-module": "1.0.0",
- "semver": "5.5.0",
- "validate-npm-package-license": "3.0.3"
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
}
},
"normalize-path": {
@@ -4723,7 +5573,16 @@
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
"requires": {
- "remove-trailing-separator": "1.1.0"
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
}
},
"number-is-nan": {
@@ -4749,20 +5608,50 @@
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
"object-keys": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
"integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
"dev": true
},
- "object.omit": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
"dev": true,
"requires": {
- "for-own": "0.1.5",
- "is-extendable": "0.1.1"
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
}
},
"once": {
@@ -4771,22 +5660,25 @@
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"onetime": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
- "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
- "dev": true
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
},
"optimist": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
"requires": {
- "minimist": "0.0.10",
- "wordwrap": "0.0.3"
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
}
},
"optionator": {
@@ -4795,12 +5687,12 @@
"integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
"dev": true,
"requires": {
- "deep-is": "0.1.3",
- "fast-levenshtein": "2.0.6",
- "levn": "0.3.0",
- "prelude-ls": "1.1.2",
- "type-check": "0.3.2",
- "wordwrap": "1.0.0"
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
},
"dependencies": {
"wordwrap": {
@@ -4824,12 +5716,14 @@
"dev": true
},
"os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
"dev": true,
"requires": {
- "lcid": "1.0.0"
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
}
},
"os-tmpdir": {
@@ -4838,16 +5732,11 @@
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true
},
- "output-file-sync": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz",
- "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "mkdirp": "0.5.1",
- "object-assign": "4.1.1"
- }
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
},
"p-limit": {
"version": "1.2.0",
@@ -4855,7 +5744,7 @@
"integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
"dev": true,
"requires": {
- "p-try": "1.0.0"
+ "p-try": "^1.0.0"
}
},
"p-locate": {
@@ -4864,7 +5753,7 @@
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"dev": true,
"requires": {
- "p-limit": "1.2.0"
+ "p-limit": "^1.1.0"
}
},
"p-try": {
@@ -4873,12 +5762,6 @@
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
"dev": true
},
- "pako": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
- "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
- "dev": true
- },
"papaparse": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/papaparse/-/papaparse-4.1.1.tgz",
@@ -4890,23 +5773,11 @@
"integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
"dev": true,
"requires": {
- "asn1.js": "4.10.1",
- "browserify-aes": "1.2.0",
- "create-hash": "1.2.0",
- "evp_bytestokey": "1.0.3",
- "pbkdf2": "3.0.16"
- }
- },
- "parse-glob": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
- "dev": true,
- "requires": {
- "glob-base": "0.3.0",
- "is-dotfile": "1.0.3",
- "is-extglob": "1.0.0",
- "is-glob": "2.0.1"
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3"
}
},
"parse-json": {
@@ -4915,7 +5786,7 @@
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
"dev": true,
"requires": {
- "error-ex": "1.3.1"
+ "error-ex": "^1.2.0"
}
},
"parse5": {
@@ -4929,19 +5800,25 @@
"resolved": "https://registry.npmjs.org/parsleyjs/-/parsleyjs-2.8.1.tgz",
"integrity": "sha1-oEq/kcIUZHXm1NVAS0WUCtb7uKQ=",
"requires": {
- "jquery": "3.3.1"
+ "jquery": ">=1.8.0"
}
},
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
"path-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
"integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
"dev": true
},
- "path-exists": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz",
- "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=",
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
"dev": true
},
"path-is-absolute": {
@@ -4956,6 +5833,12 @@
"integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
"dev": true
},
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
"path-parse": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
@@ -4968,7 +5851,7 @@
"integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
"dev": true,
"requires": {
- "pify": "2.3.0"
+ "pify": "^2.0.0"
}
},
"pbkdf2": {
@@ -4977,19 +5860,13 @@
"integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==",
"dev": true,
"requires": {
- "create-hash": "1.2.0",
- "create-hmac": "1.1.7",
- "ripemd160": "2.0.2",
- "safe-buffer": "5.1.1",
- "sha.js": "2.4.11"
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
}
},
- "pbkdf2-compat": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz",
- "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=",
- "dev": true
- },
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -5014,7 +5891,7 @@
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
"dev": true,
"requires": {
- "pinkie": "2.0.4"
+ "pinkie": "^2.0.0"
}
},
"pkg-dir": {
@@ -5023,13 +5900,13 @@
"integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
"dev": true,
"requires": {
- "find-up": "1.1.2"
+ "find-up": "^1.0.0"
}
},
"pluralize": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
- "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
"dev": true
},
"pn": {
@@ -5038,18 +5915,18 @@
"integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
"dev": true
},
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
"dev": true
},
- "preserve": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
- "dev": true
- },
"private": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
@@ -5068,9 +5945,9 @@
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
},
"progress": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
- "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
"dev": true
},
"promise": {
@@ -5078,7 +5955,7 @@
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"requires": {
- "asap": "2.0.6"
+ "asap": "~2.0.3"
}
},
"prop-types": {
@@ -5086,9 +5963,9 @@
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz",
"integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==",
"requires": {
- "fbjs": "0.8.16",
- "loose-envify": "1.3.1",
- "object-assign": "4.1.1"
+ "fbjs": "^0.8.16",
+ "loose-envify": "^1.3.1",
+ "object-assign": "^4.1.1"
}
},
"prr": {
@@ -5109,11 +5986,11 @@
"integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "browserify-rsa": "4.0.1",
- "create-hash": "1.2.0",
- "parse-asn1": "5.1.1",
- "randombytes": "2.0.6"
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1"
}
},
"punycode": {
@@ -5122,12 +5999,6 @@
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true
},
- "q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
- "dev": true
- },
"qs": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz",
@@ -5138,8 +6009,8 @@
"resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
"integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
"requires": {
- "object-assign": "4.1.1",
- "strict-uri-encode": "1.1.0"
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
}
},
"querystring": {
@@ -5154,38 +6025,13 @@
"integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
"dev": true
},
- "randomatic": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
- "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
- "dev": true,
- "requires": {
- "is-number": "4.0.0",
- "kind-of": "6.0.2",
- "math-random": "1.0.1"
- },
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
- }
- },
"randombytes": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
"integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "^5.1.0"
}
},
"randomfill": {
@@ -5194,8 +6040,8 @@
"integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
"dev": true,
"requires": {
- "randombytes": "2.0.6",
- "safe-buffer": "5.1.1"
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
}
},
"react": {
@@ -5203,9 +6049,9 @@
"resolved": "https://registry.npmjs.org/react/-/react-15.4.2.tgz",
"integrity": "sha1-QfeZGyYYU5K6m66WyIiefgGDl+8=",
"requires": {
- "fbjs": "0.8.16",
- "loose-envify": "1.3.1",
- "object-assign": "4.1.1"
+ "fbjs": "^0.8.4",
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.0"
}
},
"react-confirm-alert": {
@@ -5218,9 +6064,9 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.4.2.tgz",
"integrity": "sha1-AVNj8FsKH9Uq6e/dOgBg2QaVII8=",
"requires": {
- "fbjs": "0.8.16",
- "loose-envify": "1.3.1",
- "object-assign": "4.1.1"
+ "fbjs": "^0.8.1",
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.0"
}
},
"react-html-parser": {
@@ -5228,7 +6074,7 @@
"resolved": "https://registry.npmjs.org/react-html-parser/-/react-html-parser-1.0.3.tgz",
"integrity": "sha1-KDWPDMEe7jv0kPirbJwxvSyAZ5A=",
"requires": {
- "htmlparser2": "3.9.2"
+ "htmlparser2": "^3.9.0"
}
},
"react-router": {
@@ -5236,13 +6082,13 @@
"resolved": "https://registry.npmjs.org/react-router/-/react-router-3.0.5.tgz",
"integrity": "sha1-w7eHN1gEWou8lWKu9P9LyMznwTY=",
"requires": {
- "create-react-class": "15.6.2",
- "history": "3.3.0",
- "hoist-non-react-statics": "1.2.0",
- "invariant": "2.2.2",
- "loose-envify": "1.3.1",
- "prop-types": "15.6.1",
- "warning": "3.0.0"
+ "create-react-class": "^15.5.1",
+ "history": "^3.0.0",
+ "hoist-non-react-statics": "^1.2.0",
+ "invariant": "^2.2.1",
+ "loose-envify": "^1.2.0",
+ "prop-types": "^15.5.6",
+ "warning": "^3.0.0"
},
"dependencies": {
"history": {
@@ -5250,10 +6096,10 @@
"resolved": "https://registry.npmjs.org/history/-/history-3.3.0.tgz",
"integrity": "sha1-/O3M6PEpdTcVRdc1RhAzV5ptrpw=",
"requires": {
- "invariant": "2.2.2",
- "loose-envify": "1.3.1",
- "query-string": "4.3.4",
- "warning": "3.0.0"
+ "invariant": "^2.2.1",
+ "loose-envify": "^1.2.0",
+ "query-string": "^4.2.2",
+ "warning": "^3.0.0"
}
},
"warning": {
@@ -5261,7 +6107,7 @@
"resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
"integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
"requires": {
- "loose-envify": "1.3.1"
+ "loose-envify": "^1.0.0"
}
}
}
@@ -5271,10 +6117,10 @@
"resolved": "https://registry.npmjs.org/react-string-replace/-/react-string-replace-0.3.4.tgz",
"integrity": "sha1-vxBm2xvzPCIhFh32sGtMIpDeYLc=",
"requires": {
- "lodash.escaperegexp": "4.1.2",
- "lodash.flatten": "4.4.0",
- "lodash.isregexp": "4.0.1",
- "lodash.isstring": "4.0.1"
+ "lodash.escaperegexp": "^4.1.1",
+ "lodash.flatten": "^4.2.0",
+ "lodash.isregexp": "^4.0.1",
+ "lodash.isstring": "^4.0.1"
}
},
"react-tooltip": {
@@ -5282,8 +6128,8 @@
"resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-3.5.1.tgz",
"integrity": "sha512-jbyNaG5EgC3YhlD1+UWtlN++tbfLMKy/dP+SKFKxlTXCqKelN2KJSqfSXJ4u5I5nhRmK4eD8BnU0vEBNhHzQGQ==",
"requires": {
- "classnames": "2.2.5",
- "prop-types": "15.6.1"
+ "classnames": "^2.2.5",
+ "prop-types": "^15.6.0"
}
},
"read-pkg": {
@@ -5292,9 +6138,9 @@
"integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
"dev": true,
"requires": {
- "load-json-file": "2.0.0",
- "normalize-package-data": "2.4.0",
- "path-type": "2.0.0"
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
}
},
"read-pkg-up": {
@@ -5303,8 +6149,8 @@
"integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
"dev": true,
"requires": {
- "find-up": "2.1.0",
- "read-pkg": "2.0.0"
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
},
"dependencies": {
"find-up": {
@@ -5313,7 +6159,7 @@
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"requires": {
- "locate-path": "2.0.0"
+ "locate-path": "^2.0.0"
}
}
}
@@ -5323,13 +6169,13 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.0.3",
+ "util-deprecate": "~1.0.1"
}
},
"readdirp": {
@@ -5338,10 +6184,10 @@
"integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "minimatch": "3.0.4",
- "readable-stream": "2.3.3",
- "set-immediate-shim": "1.0.1"
+ "graceful-fs": "^4.1.2",
+ "minimatch": "^3.0.2",
+ "readable-stream": "^2.0.2",
+ "set-immediate-shim": "^1.0.1"
},
"dependencies": {
"minimatch": {
@@ -5350,105 +6196,59 @@
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.8"
+ "brace-expansion": "^1.1.7"
}
}
}
},
- "readline2": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
- "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
- "dev": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "mute-stream": "0.0.5"
- }
- },
- "recast": {
- "version": "0.10.33",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz",
- "integrity": "sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc=",
- "dev": true,
- "requires": {
- "ast-types": "0.8.12",
- "esprima-fb": "15001.1001.0-dev-harmony-fb",
- "private": "0.1.8",
- "source-map": "0.5.7"
- },
- "dependencies": {
- "ast-types": {
- "version": "0.8.12",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz",
- "integrity": "sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w=",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
- "dev": true,
- "requires": {
- "resolve": "1.4.0"
- }
- },
"regenerate": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
- "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
"dev": true
},
- "regenerator": {
- "version": "0.8.40",
- "resolved": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz",
- "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=",
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
"dev": true,
"requires": {
- "commoner": "0.10.8",
- "defs": "1.1.1",
- "esprima-fb": "15001.1001.0-dev-harmony-fb",
- "private": "0.1.8",
- "recast": "0.10.33",
- "through": "2.3.8"
+ "babel-runtime": "^6.18.0",
+ "babel-types": "^6.19.0",
+ "private": "^0.1.6"
}
},
- "regex-cache": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"dev": true,
"requires": {
- "is-equal-shallow": "0.1.3"
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
}
},
- "regexpu": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz",
- "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=",
+ "regexpp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+ "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
"dev": true,
"requires": {
- "esprima": "2.7.3",
- "recast": "0.10.33",
- "regenerate": "1.3.3",
- "regjsgen": "0.2.0",
- "regjsparser": "0.1.5"
- },
- "dependencies": {
- "esprima": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
- "dev": true
- }
+ "regenerate": "^1.2.1",
+ "regjsgen": "^0.2.0",
+ "regjsparser": "^0.1.4"
}
},
"regjsgen": {
@@ -5463,7 +6263,15 @@
"integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
"dev": true,
"requires": {
- "jsesc": "0.5.0"
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
}
},
"remove-trailing-separator": {
@@ -5484,12 +6292,12 @@
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
},
"repeating": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz",
- "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
"dev": true,
"requires": {
- "is-finite": "1.0.2"
+ "is-finite": "^1.0.0"
}
},
"request": {
@@ -5498,27 +6306,27 @@
"integrity": "sha512-BQZih67o9r+Ys94tcIW4S7Uu8pthjrQVxhsZ/weOwHbDfACxvIyvnAbzFQxjy1jMtvFSzv5zf4my6cZsJBbVzw==",
"dev": true,
"requires": {
- "aws-sign2": "0.7.0",
- "aws4": "1.7.0",
- "caseless": "0.12.0",
- "combined-stream": "1.0.6",
- "extend": "3.0.1",
- "forever-agent": "0.6.1",
- "form-data": "2.3.2",
- "har-validator": "5.0.3",
- "hawk": "6.0.2",
- "http-signature": "1.2.0",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.18",
- "oauth-sign": "0.8.2",
- "performance-now": "2.1.0",
- "qs": "6.5.2",
- "safe-buffer": "5.1.1",
- "tough-cookie": "2.3.4",
- "tunnel-agent": "0.6.0",
- "uuid": "3.2.1"
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.6.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.1",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.1",
+ "har-validator": "~5.0.3",
+ "hawk": "~6.0.2",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.17",
+ "oauth-sign": "~0.8.2",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.1",
+ "safe-buffer": "^5.1.1",
+ "tough-cookie": "~2.3.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.1.0"
},
"dependencies": {
"qs": {
@@ -5535,7 +6343,7 @@
"integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
"dev": true,
"requires": {
- "lodash": "4.17.10"
+ "lodash": "^4.13.1"
},
"dependencies": {
"lodash": {
@@ -5553,18 +6361,30 @@
"dev": true,
"requires": {
"request-promise-core": "1.1.1",
- "stealthy-require": "1.1.1",
- "tough-cookie": "2.3.4"
+ "stealthy-require": "^1.1.0",
+ "tough-cookie": ">=2.3.3"
}
},
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
"require-uncached": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
"integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
"dev": true,
"requires": {
- "caller-path": "0.1.0",
- "resolve-from": "1.0.1"
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
}
},
"resolve": {
@@ -5573,7 +6393,7 @@
"integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==",
"dev": true,
"requires": {
- "path-parse": "1.0.5"
+ "path-parse": "^1.0.5"
}
},
"resolve-from": {
@@ -5582,22 +6402,34 @@
"integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
"dev": true
},
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
"restore-cursor": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
- "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
"dev": true,
"requires": {
- "exit-hook": "1.1.1",
- "onetime": "1.1.0"
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
}
},
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
"right-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
"integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
"requires": {
- "align-text": "0.1.4"
+ "align-text": "^0.1.1"
}
},
"rimraf": {
@@ -5606,7 +6438,7 @@
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"dev": true,
"requires": {
- "glob": "7.1.2"
+ "glob": "^7.0.5"
},
"dependencies": {
"glob": {
@@ -5615,12 +6447,12 @@
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"minimatch": {
@@ -5629,7 +6461,7 @@
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.8"
+ "brace-expansion": "^1.1.7"
}
}
}
@@ -5640,30 +6472,48 @@
"integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
"dev": true,
"requires": {
- "hash-base": "3.0.4",
- "inherits": "2.0.3"
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
}
},
"run-async": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
- "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
"dev": true,
"requires": {
- "once": "1.4.0"
+ "is-promise": "^2.1.0"
}
},
"rx-lite": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
- "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
"dev": true
},
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "*"
+ }
+ },
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
},
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
"samsam": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.3.tgz",
@@ -5681,8 +6531,8 @@
"resolved": "https://registry.npmjs.org/select2/-/select2-4.0.5.tgz",
"integrity": "sha1-eqxQaSVhmFs007guxV4ib4lg1Ao=",
"requires": {
- "almond": "0.3.3",
- "jquery-mousewheel": "3.1.13"
+ "almond": "~0.3.1",
+ "jquery-mousewheel": "~3.1.13"
}
},
"semver": {
@@ -5691,12 +6541,41 @@
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
"dev": true
},
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
"set-immediate-shim": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
"integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
"dev": true
},
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -5708,8 +6587,8 @@
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"shebang-command": {
@@ -5718,7 +6597,7 @@
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": {
- "shebang-regex": "1.0.0"
+ "shebang-regex": "^1.0.0"
}
},
"shebang-regex": {
@@ -5727,58 +6606,10 @@
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
- "shelljs": {
- "version": "0.7.8",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
- "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
- "dev": true,
- "requires": {
- "glob": "7.1.2",
- "interpret": "1.0.4",
- "rechoir": "0.6.2"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "minimatch": {
- "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.8"
- }
- }
- }
- },
- "sigmund": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
- "dev": true
- },
- "simple-fmt": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz",
- "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=",
- "dev": true
- },
- "simple-is": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz",
- "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=",
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
},
"sinon": {
@@ -5789,7 +6620,7 @@
"requires": {
"formatio": "1.1.1",
"lolex": "1.1.0",
- "util": "0.10.3"
+ "util": ">=0.10.3 <1"
}
},
"sinon-chai": {
@@ -5805,10 +6636,121 @@
"dev": true
},
"slice-ansi": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
- "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
- "dev": true
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ }
},
"sntp": {
"version": "2.1.0",
@@ -5816,13 +6758,13 @@
"integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
"dev": true,
"requires": {
- "hoek": "4.2.1"
+ "hoek": "4.x.x"
}
},
"source-list-map": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz",
- "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
+ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==",
"dev": true
},
"source-map": {
@@ -5831,37 +6773,53 @@
"integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "amdefine": ">=0.0.4"
+ }
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
}
},
"source-map-support": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz",
- "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=",
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
"dev": true,
"requires": {
- "source-map": "0.1.32"
+ "source-map": "^0.5.6"
},
"dependencies": {
"source-map": {
- "version": "0.1.32",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz",
- "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=",
- "dev": true,
- "requires": {
- "amdefine": "1.0.1"
- }
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
}
}
},
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
"spdx-correct": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
"integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
"dev": true,
"requires": {
- "spdx-expression-parse": "3.0.0",
- "spdx-license-ids": "3.0.0"
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
}
},
"spdx-exceptions": {
@@ -5876,8 +6834,8 @@
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
"dev": true,
"requires": {
- "spdx-exceptions": "2.1.0",
- "spdx-license-ids": "3.0.0"
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
}
},
"spdx-license-ids": {
@@ -5891,6 +6849,15 @@
"resolved": "https://registry.npmjs.org/spectrum-colorpicker/-/spectrum-colorpicker-1.8.0.tgz",
"integrity": "sha1-uSbPUALAp3hgtfg1HhwJPGUgAQc="
},
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -5903,21 +6870,36 @@
"integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
"dev": true,
"requires": {
- "asn1": "0.2.3",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.1",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.1",
- "getpass": "0.1.7",
- "jsbn": "0.1.1",
- "tweetnacl": "0.14.5"
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "tweetnacl": "~0.14.0"
}
},
- "stable": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
- "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
- "dev": true
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
},
"stealthy-require": {
"version": "1.1.1",
@@ -5931,8 +6913,8 @@
"integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.3"
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
}
},
"stream-http": {
@@ -5941,11 +6923,11 @@
"integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==",
"dev": true,
"requires": {
- "builtin-status-codes": "3.0.0",
- "inherits": "2.0.3",
- "readable-stream": "2.3.6",
- "to-arraybuffer": "1.0.1",
- "xtend": "4.0.1"
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
},
"dependencies": {
"process-nextick-args": {
@@ -5960,13 +6942,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.1.1",
- "util-deprecate": "1.0.2"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
"string_decoder": {
@@ -5975,7 +6957,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "~5.1.0"
}
}
}
@@ -5986,14 +6968,30 @@
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
},
"string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
}
},
"string_decoder": {
@@ -6001,28 +6999,16 @@
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "~5.1.0"
}
},
- "stringmap": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz",
- "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=",
- "dev": true
- },
- "stringset": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz",
- "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=",
- "dev": true
- },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"strip-bom": {
@@ -6031,6 +7017,12 @@
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
},
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
@@ -6043,12 +7035,12 @@
"integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
"dev": true,
"requires": {
- "css-parse": "1.7.0",
- "debug": "2.6.9",
- "glob": "7.0.6",
- "mkdirp": "0.5.1",
- "sax": "0.5.8",
- "source-map": "0.1.43"
+ "css-parse": "1.7.x",
+ "debug": "*",
+ "glob": "7.0.x",
+ "mkdirp": "0.5.x",
+ "sax": "0.5.x",
+ "source-map": "0.1.x"
},
"dependencies": {
"glob": {
@@ -6057,12 +7049,12 @@
"integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"minimatch": {
@@ -6071,7 +7063,7 @@
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.8"
+ "brace-expansion": "^1.1.7"
}
}
}
@@ -6089,54 +7081,58 @@
"dev": true
},
"table": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
- "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
"dev": true,
"requires": {
- "ajv": "4.11.8",
- "ajv-keywords": "1.5.1",
- "chalk": "1.1.3",
- "lodash": "4.17.4",
- "slice-ansi": "0.0.4",
- "string-width": "2.1.1"
+ "ajv": "^5.2.3",
+ "ajv-keywords": "^2.1.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
},
"dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
},
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"lodash": {
- "version": "4.17.4",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
},
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
- "is-fullwidth-code-point": "2.0.0",
- "strip-ansi": "4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "3.0.0"
+ "has-flag": "^3.0.0"
}
}
}
@@ -6159,20 +7155,20 @@
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
},
- "timers-browserify": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
- "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
- "dev": true,
- "requires": {
- "process": "0.11.10"
- }
- },
"tinymce": {
"version": "4.5.6",
"resolved": "https://registry.npmjs.org/tinymce/-/tinymce-4.5.6.tgz",
"integrity": "sha1-Os2bUVMx2vP/TM2B1UTpFjDtDhs="
},
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
"to-arraybuffer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
@@ -6185,13 +7181,44 @@
"integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
"dev": true
},
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
"tough-cookie": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
"integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"dev": true,
"requires": {
- "punycode": "1.4.1"
+ "punycode": "^1.4.1"
}
},
"tr46": {
@@ -6200,7 +7227,7 @@
"integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
"dev": true,
"requires": {
- "punycode": "2.1.0"
+ "punycode": "^2.1.0"
},
"dependencies": {
"punycode": {
@@ -6217,24 +7244,6 @@
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
"dev": true
},
- "try-resolve": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz",
- "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=",
- "dev": true
- },
- "tryit": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
- "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
- "dev": true
- },
- "tryor": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz",
- "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=",
- "dev": true
- },
"tty-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
@@ -6247,7 +7256,7 @@
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
@@ -6263,7 +7272,7 @@
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
"dev": true,
"requires": {
- "prelude-ls": "1.1.2"
+ "prelude-ls": "~1.1.2"
}
},
"type-detect": {
@@ -6287,34 +7296,30 @@
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
- "optional": true,
"requires": {
- "source-map": "0.5.7",
- "uglify-to-browserify": "1.0.2",
- "yargs": "3.10.0"
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
},
"dependencies": {
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "optional": true
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
},
"window-size": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
- "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
- "optional": true
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
},
"yargs": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
"integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
- "optional": true,
"requires": {
- "camelcase": "1.2.1",
- "cliui": "2.1.0",
- "decamelize": "1.2.0",
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
"window-size": "0.1.0"
}
}
@@ -6323,7 +7328,27 @@
"uglify-to-browserify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
- "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "optional": true
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
+ "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6",
+ "uglify-js": "^2.8.29",
+ "webpack-sources": "^1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
},
"unc-path-regex": {
"version": "0.1.2",
@@ -6336,6 +7361,110 @@
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
},
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
"url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
@@ -6354,11 +7483,22 @@
}
}
},
- "user-home": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
- "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
- "dev": true
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
},
"util": {
"version": "0.10.3",
@@ -6394,8 +7534,8 @@
"integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
"dev": true,
"requires": {
- "spdx-correct": "3.0.0",
- "spdx-expression-parse": "3.0.0"
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
}
},
"velocity-animate": {
@@ -6403,7 +7543,7 @@
"resolved": "https://registry.npmjs.org/velocity-animate/-/velocity-animate-1.2.3.tgz",
"integrity": "sha1-+LfGb++c/VrPpgXN8K3KjjAttyg=",
"requires": {
- "jquery": "3.2.1"
+ "jquery": ">= 1.4.3"
},
"dependencies": {
"jquery": {
@@ -6419,9 +7559,9 @@
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0",
+ "assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
- "extsprintf": "1.3.0"
+ "extsprintf": "^1.2.0"
}
},
"vm-browserify": {
@@ -6439,7 +7579,7 @@
"integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
"dev": true,
"requires": {
- "browser-process-hrtime": "0.1.2"
+ "browser-process-hrtime": "^0.1.2"
}
},
"warning": {
@@ -6447,26 +7587,18 @@
"resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz",
"integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=",
"requires": {
- "loose-envify": "1.3.1"
+ "loose-envify": "^1.0.0"
}
},
"watchpack": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz",
- "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
"dev": true,
"requires": {
- "async": "0.9.2",
- "chokidar": "1.7.0",
- "graceful-fs": "4.1.11"
- },
- "dependencies": {
- "async": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
- "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
- "dev": true
- }
+ "chokidar": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0"
}
},
"webidl-conversions": {
@@ -6476,263 +7608,133 @@
"dev": true
},
"webpack": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.12.9.tgz",
- "integrity": "sha1-KgMdZhiYOcxcvyxo+AVm2i4U/04=",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz",
+ "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==",
"dev": true,
"requires": {
- "async": "1.5.2",
- "clone": "1.0.4",
- "enhanced-resolve": "0.9.1",
- "esprima": "2.7.3",
- "interpret": "0.6.6",
- "loader-utils": "0.2.17",
- "memory-fs": "0.3.0",
- "mkdirp": "0.5.1",
- "node-libs-browser": "0.6.0",
- "optimist": "0.6.1",
- "supports-color": "3.2.3",
- "tapable": "0.1.10",
- "uglify-js": "2.6.4",
- "watchpack": "0.2.9",
- "webpack-core": "0.6.9"
+ "acorn": "^5.0.0",
+ "acorn-dynamic-import": "^2.0.0",
+ "ajv": "^6.1.0",
+ "ajv-keywords": "^3.1.0",
+ "async": "^2.1.2",
+ "enhanced-resolve": "^3.4.0",
+ "escope": "^3.6.0",
+ "interpret": "^1.0.0",
+ "json-loader": "^0.5.4",
+ "json5": "^0.5.1",
+ "loader-runner": "^2.3.0",
+ "loader-utils": "^1.1.0",
+ "memory-fs": "~0.4.1",
+ "mkdirp": "~0.5.0",
+ "node-libs-browser": "^2.0.0",
+ "source-map": "^0.5.3",
+ "supports-color": "^4.2.1",
+ "tapable": "^0.2.7",
+ "uglifyjs-webpack-plugin": "^0.4.6",
+ "watchpack": "^1.4.0",
+ "webpack-sources": "^1.0.1",
+ "yargs": "^8.0.2"
},
"dependencies": {
- "constants-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-0.0.1.tgz",
- "integrity": "sha1-kld9tSe6bEzwpFaNhLwDH0QeIfI=",
- "dev": true
- },
- "crypto-browserify": {
- "version": "3.2.8",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.2.8.tgz",
- "integrity": "sha1-ubEdvm2WUd2IKgHmzEZ99xjs8Yk=",
+ "ajv": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.1.tgz",
+ "integrity": "sha512-pgZos1vgOHDiC7gKNbZW8eKvCnNXARv2oqrGQT7Hzbq5Azp7aZG6DJzADnkuSq7RH6qkXp4J/m68yPX/2uBHyQ==",
"dev": true,
"requires": {
- "pbkdf2-compat": "2.0.1",
- "ripemd160": "0.2.0",
- "sha.js": "2.2.6"
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.1"
}
},
- "esprima": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "ajv-keywords": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+ "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
"dev": true
},
- "https-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.0.tgz",
- "integrity": "sha1-s//f5zSyo9Sp79WOhlTJH86G6v0=",
+ "async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
+ "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "object-assign": "^4.0.1",
+ "tapable": "^0.2.7"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
"dev": true
},
- "interpret": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz",
- "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=",
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "dev": true,
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
},
"memory-fs": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz",
- "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
"dev": true,
"requires": {
- "errno": "0.1.7",
- "readable-stream": "2.3.3"
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
}
},
- "node-libs-browser": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.6.0.tgz",
- "integrity": "sha1-JEgG1E0xngSLyGB7XMTq+aKdLjw=",
- "dev": true,
- "requires": {
- "assert": "1.4.1",
- "browserify-zlib": "0.1.4",
- "buffer": "4.9.1",
- "console-browserify": "1.1.0",
- "constants-browserify": "0.0.1",
- "crypto-browserify": "3.2.8",
- "domain-browser": "1.1.7",
- "events": "1.1.1",
- "http-browserify": "1.7.0",
- "https-browserify": "0.0.0",
- "os-browserify": "0.1.2",
- "path-browserify": "0.0.0",
- "process": "0.11.10",
- "punycode": "1.4.1",
- "querystring-es3": "0.2.1",
- "readable-stream": "1.1.14",
- "stream-browserify": "1.0.0",
- "string_decoder": "0.10.31",
- "timers-browserify": "1.4.2",
- "tty-browserify": "0.0.0",
- "url": "0.10.3",
- "util": "0.10.3",
- "vm-browserify": "0.0.4"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "dev": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
- }
- }
- }
- },
- "os-browserify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz",
- "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=",
- "dev": true
- },
- "ripemd160": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz",
- "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=",
- "dev": true
- },
- "sha.js": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz",
- "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=",
- "dev": true
- },
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
- "stream-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-1.0.0.tgz",
- "integrity": "sha1-v5tKv7QrJ011FHnkTg/yZWtvEZM=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "1.1.14"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "dev": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
- }
- }
- }
- },
- "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
- },
"supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
"dev": true,
"requires": {
- "has-flag": "1.0.0"
+ "has-flag": "^2.0.0"
}
},
- "uglify-js": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz",
- "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=",
- "dev": true,
- "requires": {
- "async": "0.2.10",
- "source-map": "0.5.7",
- "uglify-to-browserify": "1.0.2",
- "yargs": "3.10.0"
- },
- "dependencies": {
- "async": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
- "dev": true
- }
- }
- },
- "url": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
- "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
- "dev": true,
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
- }
- }
- },
- "window-size": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
- "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "tapable": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
+ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=",
"dev": true
- },
- "yargs": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
- "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
- "dev": true,
- "requires": {
- "camelcase": "1.2.1",
- "cliui": "2.1.0",
- "decamelize": "1.2.0",
- "window-size": "0.1.0"
- }
- }
- }
- },
- "webpack-core": {
- "version": "0.6.9",
- "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz",
- "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=",
- "dev": true,
- "requires": {
- "source-list-map": "0.1.8",
- "source-map": "0.4.4"
- },
- "dependencies": {
- "source-map": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
- "dev": true,
- "requires": {
- "amdefine": "1.0.1"
- }
}
}
},
@@ -6742,8 +7744,8 @@
"integrity": "sha512-MX60Bv2G83Zks9pi3oLOmRgnPAnwrlMn+lftMrWBm199VQjk46/xgzBi9lPfpZldw2+EI2S+OevuLIaDuxCWRw==",
"dev": true,
"requires": {
- "fs-extra": "0.30.0",
- "lodash": "3.10.1"
+ "fs-extra": "^0.30.0",
+ "lodash": ">=3.5 <5"
}
},
"webpack-md5-hash": {
@@ -6752,7 +7754,25 @@
"integrity": "sha1-2fGJnq1mRFndi2sMkmrHHPvXvHo=",
"dev": true,
"requires": {
- "md5": "2.2.1"
+ "md5": "^2.0.0"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz",
+ "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==",
+ "dev": true,
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
}
},
"whatwg-encoding": {
@@ -6781,9 +7801,9 @@
"integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==",
"dev": true,
"requires": {
- "lodash.sortby": "4.7.0",
- "tr46": "1.0.1",
- "webidl-conversions": "4.0.2"
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
}
},
"which": {
@@ -6792,13 +7812,13 @@
"integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
"dev": true,
"requires": {
- "isexe": "2.0.0"
+ "isexe": "^2.0.0"
}
},
- "window-size": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
- "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
"wordwrap": {
@@ -6806,6 +7826,38 @@
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
},
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -6818,7 +7870,7 @@
"integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
"dev": true,
"requires": {
- "mkdirp": "0.5.1"
+ "mkdirp": "^0.5.1"
}
},
"ws": {
@@ -6827,8 +7879,8 @@
"integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==",
"dev": true,
"requires": {
- "async-limiter": "1.0.0",
- "safe-buffer": "5.1.1"
+ "async-limiter": "~1.0.0",
+ "safe-buffer": "~5.1.0"
}
},
"xml-name-validator": {
@@ -6856,17 +7908,82 @@
"dev": true
},
"yargs": {
- "version": "3.27.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz",
- "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
"dev": true,
"requires": {
- "camelcase": "1.2.1",
- "cliui": "2.1.0",
- "decamelize": "1.2.0",
- "os-locale": "1.4.0",
- "window-size": "0.1.4",
- "y18n": "3.2.1"
+ "camelcase": "^4.1.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "read-pkg-up": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^7.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ }
}
}
}
diff --git a/package.json b/package.json
index c950eb13e6..16761f8391 100644
--- a/package.json
+++ b/package.json
@@ -41,13 +41,16 @@
},
"devDependencies": {
"amd-inject-loader": "~0.5.0",
- "babel-core": "^5.8.22",
- "babel-loader": "^5.3.2",
+ "babel-core": "6.26.3",
+ "babel-loader": "7.1.4",
+ "babel-preset-es2015": "6.24.1",
+ "babel-preset-react": "6.24.1",
+ "babel-preset-stage-2": "6.24.1",
"chai": "2.2.0",
"chai-jq": "0.0.8",
"clean-webpack-plugin": "^0.1.19",
"cross-env": "^5.1.5",
- "eslint": "^3.19.0",
+ "eslint": "^4.19.1",
"eslint-config-airbnb": "^15.0.1",
"eslint-import-resolver-webpack": "^0.8.4",
"eslint-plugin-import": "^2.11.0",
@@ -59,12 +62,12 @@
"imports-loader": "~0.7.1",
"jsdom": "^11.10.0",
"json-loader": "^0.5.7",
- "mocha": "2.2.1",
+ "mocha": "^5.2.0",
"nib": "~1.1.2",
"sinon": "1.14.1",
"sinon-chai": "2.7.0",
"stylus": "~0.54.5",
- "webpack": "1.12.9",
+ "webpack": "3.12.0",
"webpack-manifest-plugin": "^1.1.0",
"webpack-md5-hash": "0.0.5"
}
diff --git a/plugin_repository/assets/icon-256x256.png b/plugin_repository/assets/icon-256x256.png
new file mode 100644
index 0000000000..790727047e
Binary files /dev/null and b/plugin_repository/assets/icon-256x256.png differ
diff --git a/readme.txt b/readme.txt
index 3fc208357e..d66a8408f5 100644
--- a/readme.txt
+++ b/readme.txt
@@ -4,7 +4,7 @@ Tags: newsletter, email, welcome email, post notification, autoresponder, signup
Requires at least: 4.7
Tested up to: 4.9
Requires PHP: 5.6
-Stable tag: 3.7.4
+Stable tag: 3.7.7
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html
@@ -118,6 +118,31 @@ Stop by our [support site](https://www.mailpoet.com/support).
== Changelog ==
+= 3.7.7 - 2018-06-20 =
+* Changed: MailPoet 3 to no longer work with PHP version 5.3 or older. Please upgrade to PHP 7!
+* Added: exit user survey;
+* Added: retina display optimized images for MailPoet 3 WordPress plugin entry;
+* Fixed: welcome emails are not being sent;
+* Fixed: non-Premium users now see a proper call to action for WooCommerce automatic email events;
+* Fixed: errors when using Title Only and Display as List setting in ALC content block;
+* Fixed: API reports errors when confirmation emails aren't sent. Thanks, Team BrainstormForce;
+* Fixed: in some cases, button fonts in newsletter would display in preview incorrectly;
+* Fixed: using double quotes cause rendering issues;
+* Fixed: MailPoet translation string should not be available on translate.wordpress.org;
+* Fixed: word "beta" is duplicated on WooCommerce automatic email select screen;
+
+= 3.7.6 - 2018-06-12 =
+* Fixed: Woocommerce email template thumbnail overflowing over content.
+* Fixed: Newsletters created before 3.7.4 now follow featured image display rules implemented in latest release;
+* Fixed: form subscription success message is now displayed only upon form submission. Thanks, Mariener;
+* Fixed: it is now possible to delete smaller content rows;
+* Improved: welcome emails to unconfirmed subscribers not to block sending. Thanks, Donald!
+* Improved: layout for welcome and update pages.
+
+= 3.7.5 - 2018-06-05 =
+* Added: align images left or right of posts excerpts;
+* Fixed: post content block image alignment issues.
+
= 3.7.4 - 2018-05-30 =
* Added: What's New page no longer shows after every update;
* Improved: template selection page thumbnails are larger;
diff --git a/tests/_data/test-image.jpg b/tests/_data/test-image.jpg
new file mode 100644
index 0000000000..54fd1499bd
Binary files /dev/null and b/tests/_data/test-image.jpg differ
diff --git a/tests/acceptance/NewsletterCreationCest.php b/tests/acceptance/NewsletterCreationCest.php
index f6a850273c..7504eff5b7 100644
--- a/tests/acceptance/NewsletterCreationCest.php
+++ b/tests/acceptance/NewsletterCreationCest.php
@@ -29,14 +29,14 @@ class NewsletterCreationCest {
$I->seeInCurrentUrl('#/template');
$I->click($post_notification_template);
- // step 3 - design newsletter (update subject)
+ // step 4 - design newsletter (update subject)
$title_element = '[data-automation-id=\'newsletter_title\']';
$I->waitForElement($title_element);
$I->seeInCurrentUrl('mailpoet-newsletter-editor');
$I->fillField($title_element, $newsletter_title);
$I->click('Next');
- // step 4 - activate
+ // step 5 - activate
$search_field_element = 'input.select2-search__field';
$I->waitForElement($search_field_element);
$I->seeInCurrentUrl('#/send');
@@ -50,4 +50,40 @@ class NewsletterCreationCest {
$I->see("Send immediately if there's new content to WordPress Users.", $newsletter_listing_element);
$I->wait(20);
}
-}
\ No newline at end of file
+
+ function createStandardNewsletter(\AcceptanceTester $I) {
+ $I->wantTo('Create and configure standard newsletter');
+
+ $newsletter_title = 'Testing Newsletter ' . \MailPoet\Util\Security::generateRandomString();
+
+ $I->login();
+ $I->amOnMailpoetPage('Emails');
+ $I->click('[data-automation-id=\'new_email\']');
+
+ // step 1 - select notification type
+ $I->seeInCurrentUrl('#/new');
+ $I->click('[data-automation-id=\'create_standard\']');
+
+ // step 2 - select template
+ $standard_template = '[data-automation-id=\'select_template_0\']';
+ $I->waitForElement($standard_template);
+ $I->see('Newsletters', ['css' => 'a.current']);
+ $I->seeInCurrentUrl('#/template');
+ $I->click($standard_template);
+
+ // step 3 - design newsletter (update subject)
+ $title_element = '[data-automation-id=\'newsletter_title\']';
+ $I->waitForElement($title_element);
+ $I->seeInCurrentUrl('mailpoet-newsletter-editor');
+ $I->fillField($title_element, $newsletter_title);
+ $I->click('Next');
+
+ // step 4 - Choose list and send
+ $I->waitForText('Final Step: Last Details');
+ $I->seeInCurrentUrl('mailpoet-newsletters#/send/');
+ $search_field_element = 'input.select2-search__field';
+ $I->fillField($search_field_element, 'WordPress Users');
+ $I->pressKey($search_field_element, \WebDriverKeys::ENTER);
+ $I->click('Send');
+ }
+}
diff --git a/tests/acceptance/SaveNewsletterAsDraftCest.php b/tests/acceptance/SaveNewsletterAsDraftCest.php
new file mode 100644
index 0000000000..6ccd4e14ae
--- /dev/null
+++ b/tests/acceptance/SaveNewsletterAsDraftCest.php
@@ -0,0 +1,41 @@
+wantTo('Create standard newsletter and save as a draft');
+
+ $newsletter_title = 'Testing Newsletter ' . \MailPoet\Util\Security::generateRandomString();
+
+ $I->login();
+ $I->amOnMailpoetPage('Emails');
+ $I->click('[data-automation-id=\'new_email\']');
+
+ // step 1 - select notification type
+ $I->seeInCurrentUrl('#/new');
+ $I->click('[data-automation-id=\'create_standard\']');
+
+ // step 2 - select template
+ $standard_template = '[data-automation-id=\'select_template_0\']';
+ $I->waitForElement($standard_template);
+ $I->see('Newsletters', ['css' => 'a.current']);
+ $I->seeInCurrentUrl('#/template');
+ $I->click($standard_template);
+
+ // step 3 - design newsletter (update subject)
+ $title_element = '[data-automation-id=\'newsletter_title\']';
+ $I->waitForElement($title_element);
+ $I->seeInCurrentUrl('mailpoet-newsletter-editor');
+ $I->fillField($title_element, $newsletter_title);
+ $I->click('Next');
+ // step 4 - Choose list and send
+ $I->waitForText('Final Step: Last Details');
+ $I->seeInCurrentUrl('mailpoet-newsletters#/send/');
+ $search_field_element = 'input.select2-search__field';
+ $I->fillField($search_field_element, 'WordPress Users');
+ $I->pressKey($search_field_element, \WebDriverKeys::ENTER);
+ $I->click('Save as draft and close');
+ $I->waitForText('Standard newsletter', 5, '[data-automation-id="listing_item_1"]');
+ }
+}
diff --git a/tests/javascript/newsletter_editor/blocks/automatedLatestContent.spec.js b/tests/javascript/newsletter_editor/blocks/automatedLatestContent.spec.js
index 12236fdf36..57625d1a23 100644
--- a/tests/javascript/newsletter_editor/blocks/automatedLatestContent.spec.js
+++ b/tests/javascript/newsletter_editor/blocks/automatedLatestContent.spec.js
@@ -15,7 +15,7 @@ define([
ContainerBlock,
AutomatedLatestContentInjector,
Communication
- ) {
+) {
var EditorApplication = App;
var CommunicationComponent = Communication;
diff --git a/tests/javascript/newsletter_editor/blocks/container.spec.js b/tests/javascript/newsletter_editor/blocks/container.spec.js
index c4f08c0cb5..ef0e7ebfe9 100644
--- a/tests/javascript/newsletter_editor/blocks/container.spec.js
+++ b/tests/javascript/newsletter_editor/blocks/container.spec.js
@@ -109,8 +109,8 @@ define([
expect(model.get('blocks').at(0).get('blocks')).to.have.length(2);
expect(
model.get('blocks').at(0)
- .get('blocks').at(1)
- .get('someField')
+ .get('blocks').at(1)
+ .get('someField')
).to.equal('some text 2');
});
});
diff --git a/tests/javascript/newsletter_editor/components/communication.spec.js b/tests/javascript/newsletter_editor/components/communication.spec.js
index 1be1e77b13..63e353f42a 100644
--- a/tests/javascript/newsletter_editor/components/communication.spec.js
+++ b/tests/javascript/newsletter_editor/components/communication.spec.js
@@ -215,8 +215,8 @@ define([
var deferred = jQuery.Deferred();
deferred.resolve({
data: [
- { post_title: 'title 1' },
- { post_title: 'post title 2' }
+ { post_title: 'title 1' },
+ { post_title: 'post title 2' }
]
});
return deferred;
@@ -286,8 +286,8 @@ define([
var deferred = jQuery.Deferred();
deferred.resolve({
data: [
- { type: 'text', text: 'something' },
- { type: 'text', text: 'something else' }
+ { type: 'text', text: 'something' },
+ { type: 'text', text: 'something else' }
]
});
return deferred;
diff --git a/tests/unit/API/JSON/APITest.php b/tests/unit/API/JSON/APITest.php
index 274de39601..84dc6f7131 100644
--- a/tests/unit/API/JSON/APITest.php
+++ b/tests/unit/API/JSON/APITest.php
@@ -2,7 +2,8 @@
namespace MailPoet\Test\API\JSON;
-use Codeception\Util\Stub;
+use Codeception\Stub;
+use Codeception\Stub\Expected;
use Helper\WordPressHooks as WPHooksHelper;
use MailPoet\API\API;
use MailPoet\API\JSON\API as JSONAPI;
@@ -197,7 +198,7 @@ class APITest extends \MailPoetTest {
$access_control = Stub::make(
new AccessControl(),
array(
- 'validatePermission' => Stub::once(function($cap) {
+ 'validatePermission' => Expected::once(function($cap) {
expect($cap)->equals(AccessControl::PERMISSION_MANAGE_SETTINGS);
return false;
})
@@ -209,7 +210,7 @@ class APITest extends \MailPoetTest {
$access_control = Stub::make(
new AccessControl(),
array(
- 'validatePermission' => Stub::once(function($cap) {
+ 'validatePermission' => Expected::once(function($cap) {
expect($cap)->equals(AccessControl::PERMISSION_MANAGE_SETTINGS);
return true;
})
@@ -230,7 +231,7 @@ class APITest extends \MailPoetTest {
$access_control = Stub::make(
new AccessControl(),
array(
- 'validatePermission' => Stub::once(function($cap) {
+ 'validatePermission' => Expected::once(function($cap) {
expect($cap)->equals(AccessControl::PERMISSION_MANAGE_SETTINGS);
return false;
})
@@ -242,7 +243,7 @@ class APITest extends \MailPoetTest {
$access_control = Stub::make(
new AccessControl(),
array(
- 'validatePermission' => Stub::once(function($cap) {
+ 'validatePermission' => Expected::once(function($cap) {
expect($cap)->equals(AccessControl::PERMISSION_MANAGE_SETTINGS);
return true;
})
diff --git a/tests/unit/API/JSON/v1/NewslettersTest.php b/tests/unit/API/JSON/v1/NewslettersTest.php
index 4d171132c2..abcd55c577 100644
--- a/tests/unit/API/JSON/v1/NewslettersTest.php
+++ b/tests/unit/API/JSON/v1/NewslettersTest.php
@@ -132,7 +132,7 @@ class NewslettersTest extends \MailPoetTest {
$router = new Newsletters();
$response = $router->save($valid_data);
- $saved_newsletter = Newsletter::filter('filterWithOptions')
+ $saved_newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_STANDARD)
->findOne($response->data['id']);
expect($response->status)->equals(APIResponse::STATUS_OK);
expect($response->data)->equals($saved_newsletter->asArray());
@@ -253,7 +253,7 @@ class NewslettersTest extends \MailPoetTest {
)
);
$response = $router->save($newsletter_data);
- $saved_newsletter = Newsletter::filter('filterWithOptions')
+ $saved_newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
->findOne($response->data['id']);
expect($response->status)->equals(APIResponse::STATUS_OK);
expect($response->data)->equals($saved_newsletter->asArray());
@@ -261,7 +261,7 @@ class NewslettersTest extends \MailPoetTest {
// schedule should be recalculated when options change
$newsletter_data['options']['intervalType'] = Scheduler::INTERVAL_IMMEDIATELY;
$response = $router->save($newsletter_data);
- $saved_newsletter = Newsletter::filter('filterWithOptions')
+ $saved_newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
->findOne($response->data['id']);
expect($response->status)->equals(APIResponse::STATUS_OK);
expect($saved_newsletter->schedule)->equals('* * * * *');
diff --git a/tests/unit/API/JSON/v1/ServicesTest.php b/tests/unit/API/JSON/v1/ServicesTest.php
index 3c3b2181c7..c96e63f0ed 100644
--- a/tests/unit/API/JSON/v1/ServicesTest.php
+++ b/tests/unit/API/JSON/v1/ServicesTest.php
@@ -1,7 +1,8 @@
array('state' => Bridge::KEY_VALID),
- 'storeMSSKeyAndState' => Stub::once()
+ 'storeMSSKeyAndState' => Expected::once()
),
$this
);
@@ -37,7 +38,7 @@ class ServicesTest extends \MailPoetTest {
new Bridge(),
array(
'checkMSSKey' => array('state' => Bridge::KEY_INVALID),
- 'storeMSSKeyAndState' => Stub::once()
+ 'storeMSSKeyAndState' => Expected::once()
),
$this
);
@@ -54,7 +55,7 @@ class ServicesTest extends \MailPoetTest {
'state' => Bridge::KEY_EXPIRING,
'data' => array('expire_at' => $date->format('c'))
),
- 'storeMSSKeyAndState' => Stub::once()
+ 'storeMSSKeyAndState' => Expected::once()
),
$this
);
@@ -69,7 +70,7 @@ class ServicesTest extends \MailPoetTest {
new Bridge(),
array(
'checkMSSKey' => array('code' => Bridge::CHECK_ERROR_UNAVAILABLE),
- 'storeMSSKeyAndState' => Stub::once()
+ 'storeMSSKeyAndState' => Expected::once()
),
$this
);
@@ -87,7 +88,7 @@ class ServicesTest extends \MailPoetTest {
new Bridge(),
array(
'checkMSSKey' => null,
- 'storeMSSKeyAndState' => Stub::once()
+ 'storeMSSKeyAndState' => Expected::once()
),
$this
);
@@ -105,7 +106,7 @@ class ServicesTest extends \MailPoetTest {
new Bridge(),
array(
'checkMSSKey' => array('code' => 404),
- 'storeMSSKeyAndState' => Stub::once()
+ 'storeMSSKeyAndState' => Expected::once()
),
$this
);
@@ -121,7 +122,7 @@ class ServicesTest extends \MailPoetTest {
'checkMSSKey' => function() {
throw new \Exception('test');
},
- 'storeMSSKeyAndState' => Stub::never()
+ 'storeMSSKeyAndState' => Expected::never()
),
$this
);
@@ -141,7 +142,7 @@ class ServicesTest extends \MailPoetTest {
new Bridge(),
array(
'checkPremiumKey' => array('state' => Bridge::KEY_VALID),
- 'storePremiumKeyAndState' => Stub::once()
+ 'storePremiumKeyAndState' => Expected::once()
),
$this
);
@@ -157,7 +158,7 @@ class ServicesTest extends \MailPoetTest {
new Bridge(),
array(
'checkPremiumKey' => array('state' => Bridge::KEY_INVALID),
- 'storePremiumKeyAndState' => Stub::once()
+ 'storePremiumKeyAndState' => Expected::once()
),
$this
);
@@ -170,7 +171,7 @@ class ServicesTest extends \MailPoetTest {
new Bridge(),
array(
'checkPremiumKey' => array('state' => Bridge::KEY_ALREADY_USED),
- 'storePremiumKeyAndState' => Stub::once()
+ 'storePremiumKeyAndState' => Expected::once()
),
$this
);
@@ -187,7 +188,7 @@ class ServicesTest extends \MailPoetTest {
'state' => Bridge::KEY_EXPIRING,
'data' => array('expire_at' => $date->format('c'))
),
- 'storePremiumKeyAndState' => Stub::once()
+ 'storePremiumKeyAndState' => Expected::once()
),
$this
);
@@ -202,7 +203,7 @@ class ServicesTest extends \MailPoetTest {
new Bridge(),
array(
'checkPremiumKey' => array('code' => Bridge::CHECK_ERROR_UNAVAILABLE),
- 'storePremiumKeyAndState' => Stub::once()
+ 'storePremiumKeyAndState' => Expected::once()
),
$this
);
@@ -220,7 +221,7 @@ class ServicesTest extends \MailPoetTest {
new Bridge(),
array(
'checkPremiumKey' => null,
- 'storePremiumKeyAndState' => Stub::once()
+ 'storePremiumKeyAndState' => Expected::once()
),
$this
);
@@ -234,11 +235,11 @@ class ServicesTest extends \MailPoetTest {
}
function testItPrintsErrorCodeIfServiceReturnedAnUnexpectedResponseCodeDuringPremiumCheck() {
- $this->services_endpoint->bridge = Stub::make(
+ $this->services_endpoint->bridge = \Codeception\Stub::make(
new Bridge(),
array(
'checkPremiumKey' => array('code' => 404),
- 'storePremiumKeyAndState' => Stub::once()
+ 'storePremiumKeyAndState' => Expected::once()
),
$this
);
@@ -254,7 +255,7 @@ class ServicesTest extends \MailPoetTest {
'checkPremiumKey' => function() {
throw new \Exception('test');
},
- 'storePremiumKeyAndState' => Stub::never()
+ 'storePremiumKeyAndState' => Expected::never()
),
$this
);
diff --git a/tests/unit/API/MP/APITest.php b/tests/unit/API/MP/APITest.php
index 95fb312198..71c6cc9ea6 100644
--- a/tests/unit/API/MP/APITest.php
+++ b/tests/unit/API/MP/APITest.php
@@ -2,13 +2,17 @@
namespace MailPoet\Test\API\MP;
+use AspectMock\Test as Mock;
use Codeception\Util\Fixtures;
-use Codeception\Util\Stub;
+use Codeception\Stub;
+use Codeception\Stub\Expected;
use MailPoet\API\API;
use MailPoet\Models\CustomField;
+use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Segment;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
+use MailPoet\Tasks\Sending;
class APITest extends \MailPoetTest {
const VERSION = 'v1';
@@ -180,7 +184,7 @@ class APITest extends \MailPoetTest {
new \MailPoet\API\MP\v1\API(),
'subscribeToLists',
array(
- '_scheduleWelcomeNotification' => Stub::once()
+ '_scheduleWelcomeNotification' => Expected::once()
), $this);
$subscriber = Subscriber::create();
$subscriber->hydrate(Fixtures::get('subscriber_template'));
@@ -199,7 +203,7 @@ class APITest extends \MailPoetTest {
new \MailPoet\API\MP\v1\API(),
'subscribeToLists',
array(
- '_scheduleWelcomeNotification' => Stub::never()
+ '_scheduleWelcomeNotification' => Expected::never()
), $this);
$subscriber = Subscriber::create();
$subscriber->hydrate(Fixtures::get('subscriber_template'));
@@ -298,6 +302,12 @@ class APITest extends \MailPoetTest {
}
function testItSubscribesToSegmentsWhenAddingSubscriber() {
+ $API = Stub::makeEmptyExcept(
+ new \MailPoet\API\MP\v1\API(),
+ 'addSubscriber',
+ array(
+ '_sendConfirmationEmail' => Expected::once()
+ ), $this);
$segment = Segment::createOrUpdate(
array(
'name' => 'Default',
@@ -308,7 +318,7 @@ class APITest extends \MailPoetTest {
'email' => 'test@example.com'
);
- $result = API::MP(self::VERSION)->addSubscriber($subscriber, array($segment->id));
+ $result = $API->addSubscriber($subscriber, array($segment->id));
expect($result['id'])->greaterThan(0);
expect($result['email'])->equals($subscriber['email']);
expect($result['subscriptions'][0]['segment_id'])->equals($segment->id);
@@ -319,7 +329,7 @@ class APITest extends \MailPoetTest {
new \MailPoet\API\MP\v1\API(),
'addSubscriber',
array(
- '_scheduleWelcomeNotification' => Stub::once()
+ '_scheduleWelcomeNotification' => Expected::once()
), $this);
$subscriber = array(
'email' => 'test@example.com',
@@ -329,12 +339,36 @@ class APITest extends \MailPoetTest {
$API->addSubscriber($subscriber, $segments);
}
+ function testItThrowsIfWelcomeEmailFails() {
+ $task = ScheduledTask::create();
+ $task->type = 'sending';
+ $task->setError("Big Error");
+ $sendingStub = Sending::create($task, SendingQueue::create());
+ Mock::double('MailPoet\Newsletter\Scheduler\Scheduler', array(
+ 'scheduleSubscriberWelcomeNotification' => array($sendingStub),
+ ));
+ $segment = Segment::createOrUpdate(
+ array(
+ 'name' => 'Default',
+ 'type' => Segment::TYPE_DEFAULT
+ )
+ );
+ $API = new \MailPoet\API\MP\v1\API();
+ $subscriber = array(
+ 'email' => 'test@example.com',
+ 'status' => Subscriber::STATUS_SUBSCRIBED
+ );
+ $segments = array($segment->id());
+ $this->setExpectedException('\Exception');
+ $API->addSubscriber($subscriber, $segments, array('schedule_welcome_email' => true, 'send_confirmation_email' => false));
+ }
+
function testItDoesNotScheduleWelcomeNotificationAfterAddingSubscriberIfStatusIsNotSubscribed() {
$API = Stub::makeEmptyExcept(
new \MailPoet\API\MP\v1\API(),
'addSubscriber',
array(
- '_scheduleWelcomeNotification' => Stub::never()
+ '_scheduleWelcomeNotification' => Expected::never()
), $this);
$subscriber = array(
'email' => 'test@example.com'
@@ -348,7 +382,7 @@ class APITest extends \MailPoetTest {
new \MailPoet\API\MP\v1\API(),
'addSubscriber',
array(
- '_scheduleWelcomeNotification' => Stub::never()
+ '_scheduleWelcomeNotification' => Expected::never()
), $this);
$subscriber = array(
'email' => 'test@example.com',
@@ -364,7 +398,7 @@ class APITest extends \MailPoetTest {
new \MailPoet\API\MP\v1\API(),
'addSubscriber',
array(
- '_sendConfirmationEmail' => Stub::once()
+ '_sendConfirmationEmail' => Expected::once()
), $this);
$subscriber = array(
'email' => 'test@example.com'
@@ -373,12 +407,34 @@ class APITest extends \MailPoetTest {
$API->addSubscriber($subscriber, $segments);
}
+ function testItThrowsWhenConfirmationEmailFailsToSend() {
+ $API = new \MailPoet\API\MP\v1\API();
+ Mock::double($API, array(
+ '_sendConfirmationEmail' => function ($subscriber) {
+ $subscriber->setError('Big Error');
+ return false;
+ }
+ )
+ );
+ $segment = Segment::createOrUpdate(
+ array(
+ 'name' => 'Default',
+ 'type' => Segment::TYPE_DEFAULT
+ )
+ );
+ $subscriber = array(
+ 'email' => 'test@example.com'
+ );
+ $this->setExpectedException('\Exception', 'Subscriber added, but confirmation email failed to send: big error');
+ $API->addSubscriber($subscriber, array($segment->id), array('send_confirmation_email' => true));
+ }
+
function testItDoesNotSendConfirmationEmailAfterAddingSubscriberWhenOptionIsSet() {
$API = Stub::makeEmptyExcept(
new \MailPoet\API\MP\v1\API(),
'addSubscriber',
array(
- '_sendConfirmationEmail' => Stub::never()
+ '_sendConfirmationEmail' => Expected::never()
), $this);
$subscriber = array(
'email' => 'test@example.com'
@@ -562,6 +618,7 @@ class APITest extends \MailPoetTest {
}
function _after() {
+ Mock::clean();
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . CustomField::$_table);
\ORM::raw_execute('TRUNCATE ' . Segment::$_table);
diff --git a/tests/unit/Analytics/AnalyticsTest.php b/tests/unit/Analytics/AnalyticsTest.php
index 2e8e2bb258..35b0ea8e05 100644
--- a/tests/unit/Analytics/AnalyticsTest.php
+++ b/tests/unit/Analytics/AnalyticsTest.php
@@ -3,7 +3,8 @@
namespace MailPoet\Analytics;
use Carbon\Carbon;
-use Codeception\Util\Stub;
+use Codeception\Stub;
+use Codeception\Stub\Expected;
use MailPoet\Models\Setting;
class AnalyticsTest extends \MailPoetTest {
@@ -38,7 +39,7 @@ class AnalyticsTest extends \MailPoetTest {
$reporter = Stub::makeEmpty(
'MailPoet\Analytics\Reporter',
array(
- 'getData' => Stub::never(),
+ 'getData' => Expected::never(),
),
$this
);
@@ -52,7 +53,7 @@ class AnalyticsTest extends \MailPoetTest {
$reporter = Stub::makeEmpty(
'MailPoet\Analytics\Reporter',
array(
- 'getData' => Stub::never(),
+ 'getData' => Expected::never(),
),
$this
);
@@ -68,7 +69,7 @@ class AnalyticsTest extends \MailPoetTest {
$reporter = Stub::makeEmpty(
'MailPoet\Analytics\Reporter',
array(
- 'getData' => Stub::once(function() use ($data){
+ 'getData' => Expected::once(function() use ($data){
return $data;
}),
),
@@ -87,7 +88,7 @@ class AnalyticsTest extends \MailPoetTest {
$reporter = Stub::makeEmpty(
'MailPoet\Analytics\Reporter',
array(
- 'getData' => Stub::once(function() use ($data){
+ 'getData' => Expected::once(function() use ($data){
return $data;
}),
),
diff --git a/tests/unit/Config/CapabilitiesTest.php b/tests/unit/Config/CapabilitiesTest.php
index 05e91bde2f..a38e686f5e 100644
--- a/tests/unit/Config/CapabilitiesTest.php
+++ b/tests/unit/Config/CapabilitiesTest.php
@@ -2,7 +2,8 @@
namespace MailPoet\Test\Config;
use AspectMock\Test as Mock;
-use Codeception\Util\Stub;
+use Codeception\Stub;
+use Codeception\Stub\Expected;
use Helper\WordPressHooks as WPHooksHelper;
use MailPoet\Config\AccessControl;
use MailPoet\Config\Capabilities;
@@ -19,7 +20,7 @@ class CapabilitiesTest extends \MailPoetTest {
$caps = Stub::makeEmptyExcept(
$this->caps,
'init',
- array('setupMembersCapabilities' => Stub::once()),
+ array('setupMembersCapabilities' => Expected::once()),
$this
);
$caps->init();
diff --git a/tests/unit/Config/InstallerTest.php b/tests/unit/Config/InstallerTest.php
index fbada07a77..e6f261fb97 100644
--- a/tests/unit/Config/InstallerTest.php
+++ b/tests/unit/Config/InstallerTest.php
@@ -1,7 +1,8 @@
installer,
array(
- 'getPluginInformation' => Stub::once()
+ 'getPluginInformation' => Expected::once()
),
$this
);
diff --git a/tests/unit/Config/PHPVersionWarningsTest.php b/tests/unit/Config/PHPVersionWarningsTest.php
index ec5b029ef9..d5d80ff62a 100644
--- a/tests/unit/Config/PHPVersionWarningsTest.php
+++ b/tests/unit/Config/PHPVersionWarningsTest.php
@@ -18,13 +18,13 @@ class PHPVersionWarningsTest extends \MailPoetTest {
function testItPrintsWarningFor53() {
$warning = $this->phpVersionWarning->init('5.3.2', true);
- expect($warning)->contains('Your website is running on PHP 5.3.2');
+ expect($warning)->contains('MailPoet requires PHP version 7 or newer.');
expect($warning)->notContains('is-dismissible');
}
function testItPrintsWarningFor54() {
$warning = $this->phpVersionWarning->init('5.4.1', true);
- expect($warning)->contains('Your website is running on PHP 5.4.1');
+ expect($warning)->contains('MailPoet requires PHP version 7 or newer.');
expect($warning)->notContains('is-dismissible');
}
diff --git a/tests/unit/Config/PluginActivatedHookTest.php b/tests/unit/Config/PluginActivatedHookTest.php
index ad386c849a..d27cbeca1a 100644
--- a/tests/unit/Config/PluginActivatedHookTest.php
+++ b/tests/unit/Config/PluginActivatedHookTest.php
@@ -2,7 +2,8 @@
namespace MailPoet\Config;
-use Codeception\Util\Stub;
+use Codeception\Stub;
+use Codeception\Stub\Expected;
class PluginActivatedHookTest extends \MailPoetTest {
@@ -11,7 +12,7 @@ class PluginActivatedHookTest extends \MailPoetTest {
$deferred_admin_notices = Stub::makeEmpty(
'MailPoet\Config\DeferredAdminNotices',
array(
- 'addNetworkAdminNotice' => Stub::exactly(1, function () {
+ 'addNetworkAdminNotice' => Expected::exactly(1, function () {
}),
),
$this
@@ -24,7 +25,7 @@ class PluginActivatedHookTest extends \MailPoetTest {
$deferred_admin_notices = Stub::makeEmpty(
'MailPoet\Config\DeferredAdminNotices',
array(
- 'addNetworkAdminNotice' => Stub::never(),
+ 'addNetworkAdminNotice' => Expected::never(),
),
$this
);
@@ -36,7 +37,7 @@ class PluginActivatedHookTest extends \MailPoetTest {
$deferred_admin_notices = Stub::makeEmpty(
'MailPoet\Config\DeferredAdminNotices',
array(
- 'addNetworkAdminNotice' => Stub::never(),
+ 'addNetworkAdminNotice' => Expected::never(),
),
$this
);
diff --git a/tests/unit/Config/RendererTest.php b/tests/unit/Config/RendererTest.php
index d1d26a9fc2..55c353331c 100644
--- a/tests/unit/Config/RendererTest.php
+++ b/tests/unit/Config/RendererTest.php
@@ -1,7 +1,8 @@
Stub::makeEmpty('Twig_Environment',
array(
- 'render' => Stub::atLeastOnce(function() {
+ 'render' => Expected::atLeastOnce(function() {
return 'test render';
}),
),
@@ -95,7 +96,7 @@ class RendererTest extends \MailPoetTest {
array(
'renderer' => Stub::makeEmpty('Twig_Environment',
array(
- 'render' => Stub::atLeastOnce(function() use ($exception_message) {
+ 'render' => Expected::atLeastOnce(function() use ($exception_message) {
throw new \RuntimeException($exception_message);
}),
),
diff --git a/tests/unit/Config/UpdaterTest.php b/tests/unit/Config/UpdaterTest.php
index 5a876c6699..7fa58fadcd 100644
--- a/tests/unit/Config/UpdaterTest.php
+++ b/tests/unit/Config/UpdaterTest.php
@@ -1,7 +1,8 @@
updater,
array(
- 'checkForUpdate' => Stub::once()
+ 'checkForUpdate' => Expected::once()
),
$this
);
diff --git a/tests/unit/Cron/DaemonTest.php b/tests/unit/Cron/DaemonTest.php
index 9d2d211825..df7b98cba4 100644
--- a/tests/unit/Cron/DaemonTest.php
+++ b/tests/unit/Cron/DaemonTest.php
@@ -1,7 +1,8 @@
Stub::exactly(1),
- 'executeQueueWorker' => Stub::exactly(1),
+ 'executeScheduleWorker' => Expected::exactly(1),
+ 'executeQueueWorker' => Expected::exactly(1),
'pauseExecution' => null,
'callSelf' => null
), $this);
@@ -102,7 +103,7 @@ class DaemonTest extends \MailPoetTest {
$daemon = Stub::make(new Daemon(true), array(
'executeScheduleWorker' => null,
'executeQueueWorker' => null,
- 'pauseExecution' => Stub::exactly(1, function($pause_delay) {
+ 'pauseExecution' => Expected::exactly(1, function($pause_delay) {
expect($pause_delay)->lessThan(CronHelper::DAEMON_EXECUTION_LIMIT);
expect($pause_delay)->greaterThan(CronHelper::DAEMON_EXECUTION_LIMIT - 1);
}),
@@ -124,7 +125,7 @@ class DaemonTest extends \MailPoetTest {
},
'executeQueueWorker' => null,
'pauseExecution' => null,
- 'terminateRequest' => Stub::exactly(1)
+ 'terminateRequest' => Expected::exactly(1)
), $this);
$data = array(
'token' => 123
@@ -144,7 +145,7 @@ class DaemonTest extends \MailPoetTest {
},
'executeQueueWorker' => null,
'pauseExecution' => null,
- 'terminateRequest' => Stub::exactly(1)
+ 'terminateRequest' => Expected::exactly(1)
), $this);
$data = array(
'token' => 123
@@ -177,10 +178,10 @@ class DaemonTest extends \MailPoetTest {
$daemon = Stub::make(new Daemon(true), array(
'pauseExecution' => null,
// workers should be executed
- 'executeScheduleWorker' => Stub::exactly(1),
- 'executeQueueWorker' => Stub::exactly(1),
+ 'executeScheduleWorker' => Expected::exactly(1),
+ 'executeQueueWorker' => Expected::exactly(1),
// daemon should call itself
- 'callSelf' => Stub::exactly(1),
+ 'callSelf' => Expected::exactly(1),
), $this);
$data = array(
'token' => 123
@@ -193,7 +194,7 @@ class DaemonTest extends \MailPoetTest {
function testItRespondsToPingRequest() {
$daemon = Stub::make(new Daemon(true), array(
- 'terminateRequest' => Stub::exactly(1, function($message) {
+ 'terminateRequest' => Expected::exactly(1, function($message) {
expect($message)->equals('pong');
})
), $this);
diff --git a/tests/unit/Cron/Workers/KeyCheck/KeyCheckWorkerTest.php b/tests/unit/Cron/Workers/KeyCheck/KeyCheckWorkerTest.php
index 977a598b23..dfa0f89af9 100644
--- a/tests/unit/Cron/Workers/KeyCheck/KeyCheckWorkerTest.php
+++ b/tests/unit/Cron/Workers/KeyCheck/KeyCheckWorkerTest.php
@@ -2,7 +2,8 @@
namespace MailPoet\Test\Cron\Workers\KeyCheck;
use Carbon\Carbon;
-use Codeception\Util\Stub;
+use Codeception\Stub;
+use Codeception\Stub\Expected;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Setting;
use MailPoet\Services\Bridge;
@@ -33,7 +34,7 @@ class KeyCheckWorkerTest extends \MailPoetTest {
'checkKey' => function () {
throw new \Exception;
},
- 'reschedule' => Stub::once()
+ 'reschedule' => Expected::once()
),
$this
);
@@ -47,7 +48,7 @@ class KeyCheckWorkerTest extends \MailPoetTest {
$this->worker,
array(
'checkKey' => array('code' => Bridge::CHECK_ERROR_UNAVAILABLE),
- 'reschedule' => Stub::once()
+ 'reschedule' => Expected::once()
),
$this
);
diff --git a/tests/unit/Cron/Workers/KeyCheck/SendingServiceKeyCheckTest.php b/tests/unit/Cron/Workers/KeyCheck/SendingServiceKeyCheckTest.php
index bb4de6baa6..507d39d425 100644
--- a/tests/unit/Cron/Workers/KeyCheck/SendingServiceKeyCheckTest.php
+++ b/tests/unit/Cron/Workers/KeyCheck/SendingServiceKeyCheckTest.php
@@ -1,7 +1,8 @@
$response,
'storeMSSKeyAndState' => null,
- 'updateSubscriberCount' => Stub::once()
+ 'updateSubscriberCount' => Expected::once()
),
$this
);
diff --git a/tests/unit/Cron/Workers/SchedulerTest.php b/tests/unit/Cron/Workers/SchedulerTest.php
index 04d4985674..1ce0b065b8 100644
--- a/tests/unit/Cron/Workers/SchedulerTest.php
+++ b/tests/unit/Cron/Workers/SchedulerTest.php
@@ -3,7 +3,8 @@ namespace MailPoet\Test\Cron\Workers;
use AspectMock\Test as Mock;
use Carbon\Carbon;
-use Codeception\Util\Stub;
+use Codeception\Stub;
+use Codeception\Stub\Expected;
use MailPoet\Cron\CronHelper;
use MailPoet\Cron\Workers\Scheduler;
use MailPoet\Models\Newsletter;
@@ -76,7 +77,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter_option_field =
$this->_createNewsletterOptionField('intervalType', Newsletter::TYPE_WELCOME);
$newsletter_option = $this->_createNewsletterOption($newsletter_option_field->id, $newsletter->id, 'immediately');
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id);
$scheduler = new Scheduler();
@@ -92,7 +93,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter_option_field =
$this->_createNewsletterOptionField('intervalType', Newsletter::TYPE_WELCOME);
$newsletter_option = $this->_createNewsletterOption($newsletter_option_field->id, $newsletter->id, 'daily');
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id);
$scheduler = new Scheduler();
@@ -102,7 +103,7 @@ class SchedulerTest extends \MailPoetTest {
$queue = $this->_createQueue($newsletter->id);
$newsletter_option->value = 'daily';
$newsletter_option->save();
- $newsletter = Newsletter::filter('filterWithOptions')->findOne($newsletter->id);
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)->findOne($newsletter->id);
expect($queue->scheduled_at)->null();
$newsletter->schedule = '0 5 * * *'; // set it to daily at 5
$scheduler->deleteQueueOrUpdateNextRunDate($queue, $newsletter);
@@ -122,7 +123,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter_option_field->id,
$newsletter->id, 'author'
);
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id);
$scheduler = new Scheduler();
@@ -145,7 +146,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter_option_field->id,
$newsletter->id, 'author'
);
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id);
$scheduler = new Scheduler();
@@ -167,7 +168,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter_option_field->id,
$newsletter->id, 'author'
);
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id);
$scheduler = new Scheduler();
@@ -187,7 +188,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter_option = $this->_createNewsletterOption(
$newsletter_option_field->id, $newsletter->id,
\MailPoet\Newsletter\Scheduler\Scheduler::WORDPRESS_ALL_ROLES);
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id);
$scheduler = new Scheduler();
@@ -218,7 +219,7 @@ class SchedulerTest extends \MailPoetTest {
// return false when WP user cannot be verified
$scheduler = Stub::make(new Scheduler(), array(
- 'verifyWPSubscriber' => Stub::exactly(1, function() {
+ 'verifyWPSubscriber' => Expected::exactly(1, function() {
return false;
})
), $this);
@@ -233,7 +234,7 @@ class SchedulerTest extends \MailPoetTest {
// return false when subscriber cannot be verified
$scheduler = Stub::make(new Scheduler(), array(
- 'verifyMailpoetSubscriber' => Stub::exactly(1, function() {
+ 'verifyMailpoetSubscriber' => Expected::exactly(1, function() {
return false;
})
), $this);
@@ -248,7 +249,7 @@ class SchedulerTest extends \MailPoetTest {
$queue = $this->_createQueue($newsletter->id);
$queue->setSubscribers(array(1));
$scheduler = Stub::make(new Scheduler(), array(
- 'verifyMailpoetSubscriber' => Stub::exactly(1)
+ 'verifyMailpoetSubscriber' => Expected::exactly(1)
), $this);
expect($queue->status)->notNull();
expect($scheduler->processWelcomeNewsletter($newsletter, $queue))->true();
@@ -264,7 +265,7 @@ class SchedulerTest extends \MailPoetTest {
$queue = $this->_createQueue($newsletter->id);
$queue->setSubscribers(array(1));
$scheduler = Stub::make(new Scheduler(), array(
- 'verifyWPSubscriber' => Stub::exactly(1)
+ 'verifyWPSubscriber' => Expected::exactly(1)
), $this);
expect($queue->status)->notNull();
expect($scheduler->processWelcomeNewsletter($newsletter, $queue))->true();
@@ -291,7 +292,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter = $this->_createNewsletter();
$newsletter_option_field = $this->_createNewsletterOptionField('segment', Newsletter::TYPE_NOTIFICATION);
$newsletter_option = $this->_createNewsletterOption($newsletter_option_field->id, $newsletter->id, $segment->id);
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id);
$scheduler = new Scheduler();
@@ -314,7 +315,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter_option_field->id, $newsletter->id,
$segment->id
);
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id);
$scheduler = new Scheduler();
@@ -341,7 +342,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter_option_field->id, $newsletter->id,
$segment->id
);
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id);
$scheduler = new Scheduler();
@@ -363,7 +364,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter_option_field->id, $newsletter->id,
$segment->id
);
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id);
$scheduler = new Scheduler();
@@ -390,7 +391,7 @@ class SchedulerTest extends \MailPoetTest {
// delete or reschedule queue when segments don't exist
$scheduler = Stub::make(new Scheduler(), array(
- 'deleteQueueOrUpdateNextRunDate' => Stub::exactly(1, function() {
+ 'deleteQueueOrUpdateNextRunDate' => Expected::exactly(1, function() {
return false;
})
), $this);
@@ -405,7 +406,7 @@ class SchedulerTest extends \MailPoetTest {
// delete or reschedule queue when there are no subscribers in segments
$scheduler = Stub::make(new Scheduler(), array(
- 'deleteQueueOrUpdateNextRunDate' => Stub::exactly(1, function() {
+ 'deleteQueueOrUpdateNextRunDate' => Expected::exactly(1, function() {
return false;
})
), $this);
@@ -425,7 +426,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter_option_field->id, $newsletter->id,
$segment->id
);
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
->findOne($newsletter->id);
$scheduler = new Scheduler();
$finder = Mock::double('MailPoet\Segments\SubscribersFinder');
@@ -482,7 +483,7 @@ class SchedulerTest extends \MailPoetTest {
$queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
$queue->save();
$scheduler = Stub::make(new Scheduler(), array(
- 'processWelcomeNewsletter' => Stub::exactly(1)
+ 'processWelcomeNewsletter' => Expected::exactly(1)
), $this);
$scheduler->timer = microtime(true);
$scheduler->process();
@@ -494,7 +495,7 @@ class SchedulerTest extends \MailPoetTest {
$queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
$queue->save();
$scheduler = Stub::make(new Scheduler(), array(
- 'processPostNotificationNewsletter' => Stub::exactly(1)
+ 'processPostNotificationNewsletter' => Expected::exactly(1)
), $this);
$scheduler->timer = microtime(true);
$scheduler->process();
@@ -506,7 +507,7 @@ class SchedulerTest extends \MailPoetTest {
$queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
$queue->save();
$scheduler = Stub::make(new Scheduler(), array(
- 'processScheduledStandardNewsletter' => Stub::exactly(1)
+ 'processScheduledStandardNewsletter' => Expected::exactly(1)
), $this);
$scheduler->timer = microtime(true);
$scheduler->process();
@@ -518,7 +519,7 @@ class SchedulerTest extends \MailPoetTest {
$queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
$queue->save();
$scheduler = Stub::make(new Scheduler(), array(
- 'processPostNotificationNewsletter' => Stub::exactly(1)
+ 'processPostNotificationNewsletter' => Expected::exactly(1)
), $this);
$scheduler->timer = microtime(true) - CronHelper::DAEMON_EXECUTION_LIMIT;
try {
@@ -536,7 +537,7 @@ class SchedulerTest extends \MailPoetTest {
$queue->save();
$scheduler = Stub::make(new Scheduler(), array(
- 'processScheduledStandardNewsletter' => Stub::never()
+ 'processScheduledStandardNewsletter' => Expected::never()
), $this);
// scheduled job is not processed
$scheduler->timer = microtime(true);
@@ -550,7 +551,7 @@ class SchedulerTest extends \MailPoetTest {
$queue->save();
$scheduler = Stub::make(new Scheduler(), array(
- 'processScheduledStandardNewsletter' => Stub::once()
+ 'processScheduledStandardNewsletter' => Expected::once()
), $this);
// scheduled job is processed
$scheduler->timer = microtime(true);
@@ -564,13 +565,106 @@ class SchedulerTest extends \MailPoetTest {
$queue->save();
$scheduler = Stub::make(new Scheduler(), array(
- 'processScheduledStandardNewsletter' => Stub::once()
+ 'processScheduledStandardNewsletter' => Expected::once()
), $this);
// scheduled job is processed
$scheduler->timer = microtime(true);
$scheduler->process();
}
+ function testItProcessesScheduledAutomaticEmailWhenSendingToUser() {
+ $newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC, Newsletter::STATUS_SCHEDULED);
+ $subscriber = $this->_createSubscriber();
+ $task = SendingTask::create();
+ $task->newsletter_id = $newsletter->id;
+ $task->status = SendingQueue::STATUS_SCHEDULED;
+ $task->scheduled_at = Carbon::now()->subDay(1)->toDateTimeString();
+ $task->setSubscribers(array($subscriber->id));
+ $task->save();
+
+ // scheduled task should exist
+ $task = SendingTask::getByNewsletterId($newsletter->id);
+ expect($task->status)->equals(SendingQueue::STATUS_SCHEDULED);
+ expect($task->newsletter_id)->equals($newsletter->id);
+ expect($task->getSubscribers())->equals(array($subscriber->id));
+
+ // task should have its status set to null (i.e., sending)
+ $scheduler = new Scheduler();
+ $scheduler->process();
+ $task = SendingTask::getByNewsletterId($newsletter->id);
+ expect($task->status)->null();
+ }
+
+ function testItDeletesScheduledAutomaticEmailWhenUserDoesNotExist() {
+ $newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC, Newsletter::STATUS_SCHEDULED);
+ $subscriber = $this->_createSubscriber();
+ $task = SendingTask::create();
+ $task->newsletter_id = $newsletter->id;
+ $task->status = SendingQueue::STATUS_SCHEDULED;
+ $task->scheduled_at = Carbon::now()->subDay(1)->toDateTimeString();
+ $task->setSubscribers(array($subscriber->id));
+ $task->save();
+ $subscriber->delete();
+
+ // scheduled task should exist
+ $task = SendingTask::getByNewsletterId($newsletter->id);
+ expect($task->status)->equals(SendingQueue::STATUS_SCHEDULED);
+ expect($task->newsletter_id)->equals($newsletter->id);
+ expect($task->getSubscribers())->equals(array($subscriber->id));
+
+ // task should be deleted
+ $scheduler = new Scheduler();
+ $scheduler->process();
+ $task = SendingTask::getByNewsletterId($newsletter->id);
+ expect($task)->false();
+ }
+
+ function testItProcessesScheduledAutomaticEmailWhenSendingToSegment() {
+ $newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC, Newsletter::STATUS_SCHEDULED);
+ $segment = $this->_createSegment();
+ $subscriber = $this->_createSubscriber();
+ $segment_subscriber = $this->_createSubscriberSegment($subscriber->id, $segment->id);
+ $options = array('sendTo' => 'segment', 'segment' => $segment->id);
+ foreach($options as $option => $value) {
+ $newsletter_option_field = $this->_createNewsletterOptionField($option, Newsletter::TYPE_AUTOMATIC);
+ $newsletter_option = $this->_createNewsletterOption($newsletter_option_field->id, $newsletter->id, $value);
+ }
+ $task = SendingTask::create();
+ $task->newsletter_id = $newsletter->id;
+ $task->status = SendingQueue::STATUS_SCHEDULED;
+ $task->scheduled_at = Carbon::now()->subDay(1)->toDateTimeString();
+ $task->save();
+
+ // scheduled task should exist
+ $task = SendingTask::getByNewsletterId($newsletter->id);
+ expect($task->status)->equals(SendingQueue::STATUS_SCHEDULED);
+ expect($task->newsletter_id)->equals($newsletter->id);
+
+ // task should have its status set to null (i.e., sending)
+ $scheduler = new Scheduler();
+ $scheduler->process();
+ $task = SendingTask::getByNewsletterId($newsletter->id);
+ expect($task->status)->null();
+ // task should have 1 subscriber added from segment
+ $subscribers = $task->subscribers()->findMany();
+ expect($subscribers)->count(1);
+ expect($subscribers[0]->id)->equals($subscriber->id);
+ }
+
+ function testItUpdatesUpdateTime() {
+ $originalUpdated = Carbon::createFromTimestamp(current_time('timestamp'))->subHours(5)->toDateTimeString();
+ $newsletter = $this->_createNewsletter(Newsletter::TYPE_WELCOME, Newsletter::STATUS_DRAFT);
+ $queue = $this->_createQueue($newsletter->id);
+ $queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
+ $queue->updated_at = $originalUpdated;
+ $queue->save();
+ $scheduler = new Scheduler();
+ $scheduler->timer = microtime(true);
+ $scheduler->process();
+ $newQueue = ScheduledTask::findOne($queue->task_id);
+ expect($newQueue->updated_at)->notEquals($originalUpdated);
+ }
+
function _createNewsletterSegment($newsletter_id, $segment_id) {
$newsletter_segment = NewsletterSegment::create();
$newsletter_segment->newsletter_id = $newsletter_id;
diff --git a/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php b/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php
index 758c62f7cd..40aab9beb7 100644
--- a/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php
+++ b/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php
@@ -5,7 +5,8 @@ namespace MailPoet\Test\Cron\Workers\SendingQueue;
use AspectMock\Test as Mock;
use Carbon\Carbon;
use Codeception\Util\Fixtures;
-use Codeception\Util\Stub;
+use Codeception\Stub;
+use Codeception\Stub\Expected;
use MailPoet\Config\Populator;
use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueWorker;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask;
@@ -108,8 +109,8 @@ class SendingQueueTest extends \MailPoetTest {
$sending_queue_worker = Stub::make(
new SendingQueueWorker(),
array(
- 'processQueue' => Stub::never(),
- 'enforceSendingAndExecutionLimits' => Stub::exactly(1, function() {
+ 'processQueue' => Expected::never(),
+ 'enforceSendingAndExecutionLimits' => Expected::exactly(1, function() {
throw new \Exception();
})
), $this);
@@ -126,7 +127,7 @@ class SendingQueueTest extends \MailPoetTest {
$sending_queue_worker = Stub::make(
new SendingQueueWorker(),
array(
- 'enforceSendingAndExecutionLimits' => Stub::exactly(1)
+ 'enforceSendingAndExecutionLimits' => Expected::exactly(1)
), $this);
$sending_queue_worker->__construct(
$timer = false,
@@ -159,7 +160,7 @@ class SendingQueueTest extends \MailPoetTest {
$sending_queue_worker = Stub::make(
new SendingQueueWorker(),
array(
- 'enforceSendingAndExecutionLimits' => Stub::never()
+ 'enforceSendingAndExecutionLimits' => Expected::never()
), $this);
$sending_queue_worker->__construct(
$timer = false,
@@ -191,7 +192,7 @@ class SendingQueueTest extends \MailPoetTest {
// this function returns a queue object
return (object)array('status' => null);
},
- 'enforceSendingAndExecutionLimits' => Stub::exactly(2)
+ 'enforceSendingAndExecutionLimits' => Expected::exactly(2)
), $this);
$sending_queue_worker->__construct();
$sending_queue_worker->process();
@@ -220,7 +221,7 @@ class SendingQueueTest extends \MailPoetTest {
Stub::make(
new MailerTask(),
array(
- 'send' => Stub::exactly(1, function($newsletter, $subscriber, $extra_params) use ($directUnsubscribeURL) {
+ 'send' => Expected::exactly(1, function($newsletter, $subscriber, $extra_params) use ($directUnsubscribeURL) {
expect(isset($extra_params['unsubscribe_url']))->true();
expect($extra_params['unsubscribe_url'])->equals($directUnsubscribeURL);
return true;
@@ -240,7 +241,7 @@ class SendingQueueTest extends \MailPoetTest {
Stub::make(
new MailerTask(),
array(
- 'send' => Stub::exactly(1, function($newsletter, $subscriber, $extra_params) use ($trackedUnsubscribeURL) {
+ 'send' => Expected::exactly(1, function($newsletter, $subscriber, $extra_params) use ($trackedUnsubscribeURL) {
expect(isset($extra_params['unsubscribe_url']))->true();
expect($extra_params['unsubscribe_url'])->equals($trackedUnsubscribeURL);
return true;
@@ -258,7 +259,7 @@ class SendingQueueTest extends \MailPoetTest {
Stub::make(
new MailerTask(),
array(
- 'send' => Stub::exactly(1, function($newsletter, $subscriber, $extra_params) {
+ 'send' => Expected::exactly(1, function($newsletter, $subscriber, $extra_params) {
// newsletter body should not be empty
expect(!empty($newsletter['body']['html']))->true();
expect(!empty($newsletter['body']['text']))->true();
@@ -301,13 +302,13 @@ class SendingQueueTest extends \MailPoetTest {
Stub::make(
new MailerTask(),
array(
- 'send' => Stub::exactly(1, function($newsletter, $subscriber) {
+ 'send' => Expected::exactly(1, function($newsletter, $subscriber) {
// newsletter body should not be empty
expect(!empty($newsletter[0]['body']['html']))->true();
expect(!empty($newsletter[0]['body']['text']))->true();
return true;
}),
- 'getProcessingMethod' => Stub::exactly(1, function() {
+ 'getProcessingMethod' => Expected::exactly(1, function() {
return 'bulk';
})
),
@@ -347,7 +348,7 @@ class SendingQueueTest extends \MailPoetTest {
Stub::make(
new MailerTask(),
array(
- 'send' => Stub::exactly(1, function($newsletter, $subscriber) {
+ 'send' => Expected::exactly(1, function($newsletter, $subscriber) {
// newsletter body should not be empty
expect(!empty($newsletter['body']['html']))->true();
expect(!empty($newsletter['body']['text']))->true();
@@ -385,6 +386,26 @@ class SendingQueueTest extends \MailPoetTest {
expect($statistics)->notEquals(false);
}
+ function testItUpdatesUpdateTime() {
+ $originalUpdated = Carbon::createFromTimestamp(current_time('timestamp'))->subHours(5)->toDateTimeString();
+
+ $this->queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
+ $this->queue->updated_at = $originalUpdated;
+ $this->queue->save();
+
+ $this->newsletter->type = Newsletter::TYPE_WELCOME;
+ $this->newsletter_segment->delete();
+
+ $sending_queue_worker = new SendingQueueWorker(
+ $timer = false,
+ Stub::makeEmpty(new MailerTask(), array(), $this)
+ );
+ $sending_queue_worker->process();
+
+ $newQueue = ScheduledTask::findOne($this->queue->task_id);
+ expect($newQueue->updated_at)->notEquals($originalUpdated);
+ }
+
function testItCanProcessWelcomeNewsletters() {
$this->newsletter->type = Newsletter::TYPE_WELCOME;
$this->newsletter_segment->delete();
@@ -394,7 +415,7 @@ class SendingQueueTest extends \MailPoetTest {
Stub::make(
new MailerTask(),
array(
- 'send' => Stub::exactly(1, function($newsletter, $subscriber) {
+ 'send' => Expected::exactly(1, function($newsletter, $subscriber) {
// newsletter body should not be empty
expect(!empty($newsletter['body']['html']))->true();
expect(!empty($newsletter['body']['text']))->true();
@@ -443,7 +464,7 @@ class SendingQueueTest extends \MailPoetTest {
$sending_queue_worker->mailer_task = Stub::make(
new MailerTask(),
array(
- 'send' => Stub::exactly(1, function() {
+ 'send' => Expected::exactly(1, function() {
return true;
})
),
@@ -594,7 +615,7 @@ class SendingQueueTest extends \MailPoetTest {
Stub::make(
new MailerTask(),
array(
- 'send' => Stub::once()
+ 'send' => Expected::once()
),
$this
)
@@ -631,4 +652,4 @@ class SendingQueueTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . NewsletterSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . StatisticsNewsletters::$_table);
}
-}
\ No newline at end of file
+}
diff --git a/tests/unit/Cron/Workers/SendingQueue/Tasks/MailerTest.php b/tests/unit/Cron/Workers/SendingQueue/Tasks/MailerTest.php
index d16ab11efe..eec241a6a8 100644
--- a/tests/unit/Cron/Workers/SendingQueue/Tasks/MailerTest.php
+++ b/tests/unit/Cron/Workers/SendingQueue/Tasks/MailerTest.php
@@ -1,7 +1,8 @@
Stub::make(
$php_mail_class,
- array('send' => Stub::exactly(1, function() {
+ array('send' => Expected::exactly(1, function() {
return true;
})),
$this
diff --git a/tests/unit/Cron/Workers/SimpleWorkerTest.php b/tests/unit/Cron/Workers/SimpleWorkerTest.php
index 84da5d2f13..114d8436ec 100644
--- a/tests/unit/Cron/Workers/SimpleWorkerTest.php
+++ b/tests/unit/Cron/Workers/SimpleWorkerTest.php
@@ -2,7 +2,8 @@
namespace MailPoet\Test\Cron\Workers;
use Carbon\Carbon;
-use Codeception\Util\Stub;
+use Codeception\Stub;
+use Codeception\Stub\Expected;
use MailPoet\Cron\CronHelper;
use MailPoet\Cron\Workers\SimpleWorker;
use MailPoet\Models\ScheduledTask;
@@ -141,7 +142,7 @@ class SimpleWorkerTest extends \MailPoetTest {
function testItCanInitBeforeProcessing() {
$worker = Stub::make(
$this->worker,
- array('init' => Stub::once()),
+ array('init' => Expected::once()),
$this
);
$worker->process();
diff --git a/tests/unit/Models/NewsletterTest.php b/tests/unit/Models/NewsletterTest.php
index df93bb3cb8..9db86a02fb 100644
--- a/tests/unit/Models/NewsletterTest.php
+++ b/tests/unit/Models/NewsletterTest.php
@@ -273,7 +273,7 @@ class NewsletterTest extends \MailPoetTest {
function testItCanHaveOptions() {
$newsletter_options = array(
'name' => 'Event',
- 'newsletter_type' => 'welcome',
+ 'newsletter_type' => Newsletter::TYPE_WELCOME,
);
$option_field = NewsletterOptionField::create();
$option_field->hydrate($newsletter_options);
@@ -283,7 +283,7 @@ class NewsletterTest extends \MailPoetTest {
$association->option_field_id = $option_field->id;
$association->value = 'list';
$association->save();
- $newsletter = Newsletter::filter('filterWithOptions')
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
->findOne($this->newsletter->id);
expect($newsletter->Event)->equals($association->value);
}
@@ -840,7 +840,42 @@ class NewsletterTest extends \MailPoetTest {
expect($result[1]->id)->equals($newsletter_2->id);
}
- function testPauseTaskWhenDisablePostNotification() {
+ function testItGetsAndDecodesNewsletterOptionMetaField() {
+ $newsletter = Newsletter::createOrUpdate(
+ array(
+ 'subject' => 'Test Option Meta Field',
+ 'preheader' => 'Pre Header',
+ 'type' => Newsletter::TYPE_AUTOMATIC
+ )
+ );
+ $newsletter_option_field = NewsletterOptionField::create();
+ $newsletter_option_field->hydrate(
+ array(
+ 'newsletter_type' => Newsletter::TYPE_AUTOMATIC,
+ 'name' => 'meta'
+ )
+ );
+ $newsletter_option_field->save();
+ $newsletter_option = NewsletterOption::create();
+ $meta = array('some' => 'value');
+ $newsletter_option->hydrate(
+ array(
+ 'newsletter_id' => $newsletter->id,
+ 'option_field_id' => $newsletter_option_field->id,
+ 'value' => json_encode($meta)
+ )
+ );
+ $newsletter_option->save();
+
+ // by default meta option does not exist on newsletter object
+ expect($newsletter->getMeta())->isEmpty();
+
+ // if meta option exists, it should be returned as an array
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_AUTOMATIC)->findOne($newsletter->id);
+ expect($newsletter->getMeta())->equals($meta);
+ }
+
+ function testPausesTaskWhenPostNotificationIsDisabled() {
$newsletter = Newsletter::createOrUpdate(array(
'type' => Newsletter::TYPE_NOTIFICATION
));
@@ -854,7 +889,7 @@ class NewsletterTest extends \MailPoetTest {
expect($task_found->status)->equals(ScheduledTask::STATUS_PAUSED);
}
- function testUnPauseTaskWhenEnablePostNotification() {
+ function testUnpausesTaskWhenPostNotificationIsEnabled() {
$newsletter = Newsletter::createOrUpdate(array(
'type' => Newsletter::TYPE_NOTIFICATION
));
@@ -870,8 +905,6 @@ class NewsletterTest extends \MailPoetTest {
$task_found = ScheduledTask::findOne($task->id());
expect($task_found->status)->equals(ScheduledTask::STATUS_SCHEDULED);
}
-
-
function _after() {
\ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
diff --git a/tests/unit/Models/SendingQueueTest.php b/tests/unit/Models/SendingQueueTest.php
index eac1833017..572c97ff72 100644
--- a/tests/unit/Models/SendingQueueTest.php
+++ b/tests/unit/Models/SendingQueueTest.php
@@ -96,6 +96,22 @@ class SendingQueueTest extends \MailPoetTest {
expect(json_decode($queue->newsletter_rendered_body, true))->equals($data);
}
+ function testItJsonEncodesMetaWhenSaving() {
+ $queue = SendingQueue::create();
+ $meta = array(
+ 'some' => 'value'
+ );
+ $queue->task_id = 0;
+ $queue->newsletter_id = 1;
+ $queue->meta = $meta;
+ $queue->save();
+
+ $queue = SendingQueue::findOne($queue->id);
+
+ expect(Helpers::isJson($queue->meta))->true();
+ expect(json_decode($queue->meta, true))->equals($meta);
+ }
+
function testItReencodesSerializedObjectToJsonEncoded() {
$queue = $this->queue;
$newsletter_rendered_body = $this->rendered_body;
diff --git a/tests/unit/Newsletter/Editor/PostContentTransformerTest.php b/tests/unit/Newsletter/Editor/PostContentTransformerTest.php
new file mode 100644
index 0000000000..42367f9215
--- /dev/null
+++ b/tests/unit/Newsletter/Editor/PostContentTransformerTest.php
@@ -0,0 +1,207 @@
+content_mock = array(
+ array(
+ 'type' => 'button',
+ 'text' => 'foo',
+ ),
+ );
+ $this->title_mock = array(
+ 'text' => 'Title',
+ );
+ $this->image_mock = array(
+ 'type' => 'image',
+ );
+ }
+
+ function testShouldAddImageAboveTitleForExcerptWithoutLayout() {
+ $args = array (
+ 'withLayout' => false,
+ 'displayType' => 'excerpt',
+ 'featuredImagePosition' => 'aboveTitle',
+ );
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, $this->image_mock);
+ $result = $transformer->transform(array());
+ expect($result)->equals(array($this->image_mock, $this->title_mock, $this->content_mock[0]));
+ }
+
+ function testShouldAddImageBelowTitleForExcerptWithoutLayout() {
+ $args = array (
+ 'withLayout' => false,
+ 'displayType' => 'excerpt',
+ 'featuredImagePosition' => 'belowTitle',
+ );
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, $this->image_mock);
+ $result = $transformer->transform(array());
+ expect($result)->equals(array($this->title_mock, $this->image_mock, $this->content_mock[0]));
+ }
+
+ function testShouldTransformContentWithoutLayoutWhenImageIsMissing() {
+ $args = array (
+ 'withLayout' => false,
+ 'displayType' => 'excerpt',
+ 'featuredImagePosition' => 'belowTitle',
+ );
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, null);
+ $result = $transformer->transform(array());
+ expect($result)->equals(array($this->title_mock, $this->content_mock[0]));
+ }
+
+ function testShouldNotAddImageForTitleOnlyWhenImageIsPresentWithoutLayout() {
+ $args = array (
+ 'withLayout' => false,
+ 'displayType' => 'titleOnly',
+ 'featuredImagePosition' => 'aboveTitle',
+ );
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, $this->image_mock);
+ $result = $transformer->transform(array());
+ expect($result)->equals(array($this->title_mock, $this->content_mock[0]));
+ }
+
+ function testShouldPrependTitleTextToContentTextIfFirstContentBlockIsTextual() {
+ $args = array (
+ 'withLayout' => false,
+ 'displayType' => 'titleOnly',
+ 'featuredImagePosition' => 'aboveTitle',
+ );
+
+ $this->content_mock[0]['type'] = 'text';
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, $this->image_mock);
+ $result = $transformer->transform(array());
+ $expected = $this->content_mock[0];
+ $expected['text'] = 'Titlefoo';
+ expect($result)->equals(array($expected));
+ }
+
+ function testShouldCreateLayoutStructureForCenteredImageWithLayout() {
+ $args = array (
+ 'withLayout' => true,
+ 'displayType' => 'excerpt',
+ 'featuredImagePosition' => 'centered',
+ );
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, $this->image_mock);
+ $result = $transformer->transform(array());
+ expect($result[0]['type'])->equals('container');
+ expect($result[0]['orientation'])->equals('horizontal');
+ expect($result[0]['styles'])->notEmpty();
+ expect($result[0]['blocks'][0]['type'])->equals('container');
+ expect($result[0]['blocks'][0]['orientation'])->equals('vertical');
+ expect($result[0]['blocks'][0]['styles'])->notEmpty();
+ expect(count($result[0]['blocks'][0]['blocks']))->equals(3);
+ }
+
+ function testShouldCreateLayoutStructureForOtherThanCenteredPositionedImageWithLayout() {
+ $args = array (
+ 'withLayout' => true,
+ 'displayType' => 'excerpt',
+ 'featuredImagePosition' => 'alternate',
+ );
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, $this->image_mock);
+ $result = $transformer->transform(array());
+ expect($result[0]['type'])->equals('container');
+ expect($result[0]['orientation'])->equals('horizontal');
+ expect($result[0]['styles'])->notEmpty();
+ expect($result[0]['blocks'][0]['type'])->equals('container');
+ expect($result[0]['blocks'][0]['orientation'])->equals('vertical');
+ expect($result[0]['blocks'][0]['styles'])->notEmpty();
+ expect(count($result[0]['blocks'][0]['blocks']))->equals(1);
+ expect(count($result[1]['blocks']))->equals(2);
+ }
+
+ function testShouldAddCenteredImageForExcerptWithLayout() {
+ $args = array (
+ 'withLayout' => true,
+ 'displayType' => 'excerpt',
+ 'featuredImagePosition' => 'centered',
+ );
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, $this->image_mock);
+ $result = $transformer->transform(array());
+ expect($result[0]['blocks'][0]['blocks'])->equals(array($this->title_mock, $this->image_mock, $this->content_mock[0]));
+ }
+
+ function testShouldHandleOldStructureImagePositionValueAndAddImageForExcerptWithLayout() {
+ $args = array (
+ 'withLayout' => true,
+ 'displayType' => 'excerpt',
+ 'featuredImagePosition' => 'aboveTitle',
+ );
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, $this->image_mock);
+ $result = $transformer->transform(array());
+ expect($result[0]['blocks'][0]['blocks'])->equals(array($this->title_mock, $this->image_mock, $this->content_mock[0]));
+ }
+
+ function testShouldAddLeftPositionedImageForExcerptWithLayout() {
+ $args = array (
+ 'withLayout' => true,
+ 'displayType' => 'excerpt',
+ 'featuredImagePosition' => 'left',
+ );
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, $this->image_mock);
+ $result = $transformer->transform(array());
+ expect($result[0]['blocks'][0]['blocks'])->equals(array($this->title_mock));
+ expect($result[1]['blocks'][0]['blocks'])->equals(array($this->image_mock));
+ expect($result[1]['blocks'][1]['blocks'])->equals(array($this->content_mock[0]));
+ }
+
+ function testShouldAddRightPositionedImageForExcerptWithLayout() {
+ $args = array (
+ 'withLayout' => true,
+ 'displayType' => 'excerpt',
+ 'featuredImagePosition' => 'right',
+ );
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, $this->image_mock);
+ $result = $transformer->transform(array());
+ expect($result[0]['blocks'][0]['blocks'])->equals(array($this->title_mock));
+ expect($result[1]['blocks'][0]['blocks'])->equals(array($this->content_mock[0]));
+ expect($result[1]['blocks'][1]['blocks'])->equals(array($this->image_mock));
+ }
+
+ function testShouldNotAddImageForTitleOnlyWithLayout() {
+ $args = array (
+ 'withLayout' => true,
+ 'displayType' => 'titleOnly',
+ 'featuredImagePosition' => 'centered',
+ );
+
+ $transformer = $this->getTransformer($args, $this->content_mock, $this->title_mock, $this->image_mock);
+ $result = $transformer->transform(array());
+ expect($result[0]['blocks'][0]['blocks'])->equals(array($this->title_mock, $this->content_mock[0]));
+ }
+
+ /**
+ * @return PostTransformer
+ */
+ private function getTransformer(array $args, array $content, array $title, array $image = null) {
+ $transformer = new PostTransformer($args);
+ Mock::double($transformer, array('getContent' => $content));
+ Mock::double($transformer, array('getFeaturedImage' => $image));
+ Mock::double($transformer, array('getTitle' => $title));
+ return $transformer;
+ }
+}
\ No newline at end of file
diff --git a/tests/unit/Newsletter/RendererTest.php b/tests/unit/Newsletter/RendererTest.php
index aeb2980daf..a600fa2e3c 100644
--- a/tests/unit/Newsletter/RendererTest.php
+++ b/tests/unit/Newsletter/RendererTest.php
@@ -346,6 +346,18 @@ class RendererTest extends \MailPoetTest {
)->equals(1);
}
+ function testItUsesFullFontFamilyNameInElementStyles() {
+ $newsletter = $this->newsletter['body'];
+ $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][5];
+ $template['styles']['block']['fontFamily'] = 'Lucida';
+ $DOM = $this->DOM_parser->parseStr(Button::render($template, $columnCount = 1));
+ expect(
+ preg_match(
+ '/font-family: \'Lucida Sans Unicode\', \'Lucida Grande\', sans-serif/',
+ $DOM('a.mailpoet_button', 0)->attr('style'))
+ )->equals(1);
+ }
+
function testItRendersSocialIcons() {
$newsletter = $this->newsletter['body'];
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][6];
diff --git a/tests/unit/Newsletter/Scheduler/SchedulerTest.php b/tests/unit/Newsletter/Scheduler/SchedulerTest.php
index 2d77acac5e..ec6f68c302 100644
--- a/tests/unit/Newsletter/Scheduler/SchedulerTest.php
+++ b/tests/unit/Newsletter/Scheduler/SchedulerTest.php
@@ -2,13 +2,16 @@
namespace MailPoet\Test\Newsletter\Scheduler;
use Carbon\Carbon;
+use Codeception\Util\Fixtures;
use Mailpoet\Config\Hooks;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\NewsletterPost;
use MailPoet\Models\ScheduledTask;
+use MailPoet\Models\ScheduledTaskSubscriber;
use MailPoet\Models\SendingQueue;
+use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WP\Posts as WPPosts;
@@ -26,7 +29,7 @@ class SchedulerTest extends \MailPoetTest {
expect(Scheduler::INTERVAL_NTHWEEKDAY)->notEmpty();
}
- function testItGetsActiveNewslettersFilteredByType() {
+ function testItGetsActiveNewslettersFilteredByTypeAndGroup() {
$newsletter = $this->_createNewsletter($type = Newsletter::TYPE_WELCOME);
// no newsletters with type "notification" should be found
@@ -34,6 +37,19 @@ class SchedulerTest extends \MailPoetTest {
// one newsletter with type "welcome" should be found
expect(Scheduler::getNewsletters(Newsletter::TYPE_WELCOME))->count(1);
+
+ // one automatic email belonging to "test" group should be found
+ $newsletter = $this->_createNewsletter($type = Newsletter::TYPE_AUTOMATIC);
+ $this->_createNewsletterOptions(
+ $newsletter->id,
+ Newsletter::TYPE_AUTOMATIC,
+ array(
+ 'group' => 'test'
+ )
+ );
+
+ expect(Scheduler::getNewsletters(Newsletter::TYPE_AUTOMATIC, 'group_does_not_exist'))->isEmpty();
+ expect(Scheduler::getNewsletters(Newsletter::TYPE_WELCOME, 'test'))->count(1);
}
function testItCanGetNextRunDate() {
@@ -59,12 +75,12 @@ class SchedulerTest extends \MailPoetTest {
->equals('2016-04-20 16:00:00');
}
- function testItCreatesPostNotificationQueueRecord() {
+ function testItCreatesPostNotificationSendingTask() {
$newsletter = $this->_createNewsletter();
$newsletter->schedule = '* 5 * * *';
// new queue record should be created
- $queue = Scheduler::createPostNotificationQueue($newsletter);
+ $queue = Scheduler::createPostNotificationSendingTask($newsletter);
expect(SendingQueue::findMany())->count(1);
expect($queue->newsletter_id)->equals($newsletter->id);
expect($queue->status)->equals(SendingQueue::STATUS_SCHEDULED);
@@ -72,11 +88,11 @@ class SchedulerTest extends \MailPoetTest {
expect($queue->priority)->equals(SendingQueue::PRIORITY_MEDIUM);
// duplicate queue record should not be created
- Scheduler::createPostNotificationQueue($newsletter);
+ Scheduler::createPostNotificationSendingTask($newsletter);
expect(SendingQueue::findMany())->count(1);
}
- function testItDoesNotCreateDuplicateWelcomeNotificationQueueRecords() {
+ function testItDoesNotCreateDuplicateWelcomeNotificationSendingTasks() {
$newsletter = (object)array(
'id' => 1,
'afterTimeNumber' => 2,
@@ -89,15 +105,15 @@ class SchedulerTest extends \MailPoetTest {
$existing_queue->save();
// queue is not scheduled
- Scheduler::createWelcomeNotificationQueue($newsletter, $existing_subscriber);
+ Scheduler::createWelcomeNotificationSendingTask($newsletter, $existing_subscriber);
expect(SendingQueue::findMany())->count(1);
// queue is not scheduled
- Scheduler::createWelcomeNotificationQueue($newsletter, 1);
+ Scheduler::createWelcomeNotificationSendingTask($newsletter, 1);
expect(SendingQueue::findMany())->count(2);
}
- function testItCreatesWelcomeNotificationQueueRecord() {
+ function testItCreatesWelcomeNotificationSendingTaskScheduledToSendInHours() {
$newsletter = (object)array(
'id' => 1,
'afterTimeNumber' => 2
@@ -105,7 +121,7 @@ class SchedulerTest extends \MailPoetTest {
// queue is scheduled delivery in 2 hours
$newsletter->afterTimeType = 'hours';
- Scheduler::createWelcomeNotificationQueue($newsletter, $subscriber_id = 1);
+ Scheduler::createWelcomeNotificationSendingTask($newsletter, $subscriber_id = 1);
$queue = SendingQueue::findTaskByNewsletterId(1)
->findOne();
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
@@ -114,10 +130,17 @@ class SchedulerTest extends \MailPoetTest {
expect(Carbon::parse($queue->scheduled_at)->format('Y-m-d H:i'))
->equals($current_time->addHours(2)->format('Y-m-d H:i'));
$this->_after();
+ }
+
+ function testItCreatesWelcomeNotificationSendingTaskScheduledToSendInDays() {
+ $newsletter = (object)array(
+ 'id' => 1,
+ 'afterTimeNumber' => 2
+ );
// queue is scheduled for delivery in 2 days
$newsletter->afterTimeType = 'days';
- Scheduler::createWelcomeNotificationQueue($newsletter, $subscriber_id = 1);
+ Scheduler::createWelcomeNotificationSendingTask($newsletter, $subscriber_id = 1);
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
$queue = SendingQueue::findTaskByNewsletterId(1)
->findOne();
@@ -126,10 +149,17 @@ class SchedulerTest extends \MailPoetTest {
expect(Carbon::parse($queue->scheduled_at)->format('Y-m-d H:i'))
->equals($current_time->addDays(2)->format('Y-m-d H:i'));
$this->_after();
+ }
+
+ function testItCreatesWelcomeNotificationSendingTaskScheduledToSendInWeeks() {
+ $newsletter = (object)array(
+ 'id' => 1,
+ 'afterTimeNumber' => 2
+ );
// queue is scheduled for delivery in 2 weeks
$newsletter->afterTimeType = 'weeks';
- Scheduler::createWelcomeNotificationQueue($newsletter, $subscriber_id = 1);
+ Scheduler::createWelcomeNotificationSendingTask($newsletter, $subscriber_id = 1);
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
$queue = SendingQueue::findTaskByNewsletterId(1)
->findOne();
@@ -138,13 +168,19 @@ class SchedulerTest extends \MailPoetTest {
expect(Carbon::parse($queue->scheduled_at)->format('Y-m-d H:i'))
->equals($current_time->addWeeks(2)->format('Y-m-d H:i'));
$this->_after();
+ }
+
+ function testItCreatesWelcomeNotificationSendingTaskScheduledToSendImmediately() {
+ $newsletter = (object)array(
+ 'id' => 1,
+ 'afterTimeNumber' => 2
+ );
// queue is scheduled for immediate delivery
$newsletter->afterTimeType = null;
- Scheduler::createWelcomeNotificationQueue($newsletter, $subscriber_id = 1);
+ Scheduler::createWelcomeNotificationSendingTask($newsletter, $subscriber_id = 1);
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
- $queue = SendingQueue::findTaskByNewsletterId(1)
- ->findOne();
+ $queue = SendingQueue::findTaskByNewsletterId(1)->findOne();
expect($queue->id)->greaterOrEquals(1);
expect($queue->priority)->equals(SendingQueue::PRIORITY_HIGH);
expect(Carbon::parse($queue->scheduled_at)->format('Y-m-d H:i'))
@@ -214,7 +250,7 @@ class SchedulerTest extends \MailPoetTest {
);
// queue is created and scheduled for delivery one day later
- Scheduler::scheduleSubscriberWelcomeNotification(
+ $result = Scheduler::scheduleSubscriberWelcomeNotification(
$subscriber_id = 10,
$segments = array(
3,
@@ -227,6 +263,7 @@ class SchedulerTest extends \MailPoetTest {
->findOne();
expect(Carbon::parse($queue->scheduled_at)->format('Y-m-d H:i'))
->equals($current_time->addDay()->format('Y-m-d H:i'));
+ expect($result[0]->id())->equals($queue->id());
}
function itDoesNotScheduleAnythingWhenNewsletterDoesNotExist() {
@@ -345,10 +382,10 @@ class SchedulerTest extends \MailPoetTest {
->equals($current_time->addDay()->format('Y-m-d H:i'));
}
- function testItProcessesPostNotificationSchedule() {
+ function testItProcessesPostNotificationScheduledForDailyDelivery() {
$newsletter_option_field = NewsletterOptionField::create();
$newsletter_option_field->name = 'schedule';
- $newsletter_option_field->newsletter_type = Newsletter::TYPE_WELCOME;
+ $newsletter_option_field->newsletter_type = Newsletter::TYPE_NOTIFICATION;
$newsletter_option_field->save();
// daily notification is scheduled at 14:00
@@ -367,6 +404,13 @@ class SchedulerTest extends \MailPoetTest {
$current_time = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
expect(Scheduler::getNextRunDate($newsletter_option->value, $current_time))
->equals('2017-01-01 14:00:00');
+ }
+
+ function testItProcessesPostNotificationScheduledForWeeklyDelivery() {
+ $newsletter_option_field = NewsletterOptionField::create();
+ $newsletter_option_field->name = 'schedule';
+ $newsletter_option_field->newsletter_type = Newsletter::TYPE_NOTIFICATION;
+ $newsletter_option_field->save();
// weekly notification is scheduled every Tuesday at 14:00
$newsletter = (object)array(
@@ -378,13 +422,19 @@ class SchedulerTest extends \MailPoetTest {
'timeOfDay' => 50400 // 2 p.m.
);
Scheduler::processPostNotificationSchedule($newsletter);
- $current_time = Carbon::createFromTimestamp(current_time('timestamp'));
$newsletter_option = NewsletterOption::where('newsletter_id', $newsletter->id)
->where('option_field_id', $newsletter_option_field->id)
->findOne();
$current_time = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
expect(Scheduler::getNextRunDate($newsletter_option->value, $current_time))
->equals('2017-01-03 14:00:00');
+ }
+
+ function testItProcessesPostNotificationScheduledForMonthlyDeliveryOnSpecificDay() {
+ $newsletter_option_field = NewsletterOptionField::create();
+ $newsletter_option_field->name = 'schedule';
+ $newsletter_option_field->newsletter_type = Newsletter::TYPE_NOTIFICATION;
+ $newsletter_option_field->save();
// monthly notification is scheduled every 20th day at 14:00
$newsletter = (object)array(
@@ -393,7 +443,7 @@ class SchedulerTest extends \MailPoetTest {
'monthDay' => 19, // 20th (count starts from 0)
'nthWeekDay' => null,
'weekDay' => null,
- 'timeOfDay' => 50400 // 2 p.m.
+ 'timeOfDay' => 50400// 2 p.m.
);
Scheduler::processPostNotificationSchedule($newsletter);
$newsletter_option = NewsletterOption::where('newsletter_id', $newsletter->id)
@@ -402,6 +452,13 @@ class SchedulerTest extends \MailPoetTest {
$current_time = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
expect(Scheduler::getNextRunDate($newsletter_option->value, $current_time))
->equals('2017-01-19 14:00:00');
+ }
+
+ function testItProcessesPostNotificationScheduledForMonthlyDeliveryOnLastWeekDay() {
+ $newsletter_option_field = NewsletterOptionField::create();
+ $newsletter_option_field->name = 'schedule';
+ $newsletter_option_field->newsletter_type = Newsletter::TYPE_NOTIFICATION;
+ $newsletter_option_field->save();
// monthly notification is scheduled every last Saturday at 14:00
$newsletter = (object)array(
@@ -410,7 +467,7 @@ class SchedulerTest extends \MailPoetTest {
'monthDay' => null,
'nthWeekDay' => 'L', // L = last
'weekDay' => Carbon::SATURDAY,
- 'timeOfDay' => 50400 // 2 p.m.
+ 'timeOfDay' => 50400// 2 p.m.
);
Scheduler::processPostNotificationSchedule($newsletter);
$newsletter_option = NewsletterOption::where('newsletter_id', $newsletter->id)
@@ -419,6 +476,13 @@ class SchedulerTest extends \MailPoetTest {
$current_time = 1485694800; // Sunday, 29 January 2017 @ 1:00pm (UTC)
expect(Scheduler::getNextRunDate($newsletter_option->value, $current_time))
->equals('2017-02-25 14:00:00');
+ }
+
+ function testItProcessesPostNotificationScheduledForImmediateDelivery() {
+ $newsletter_option_field = NewsletterOptionField::create();
+ $newsletter_option_field->name = 'schedule';
+ $newsletter_option_field->newsletter_type = Newsletter::TYPE_NOTIFICATION;
+ $newsletter_option_field->save();
// notification is scheduled immediately (next minute)
$newsletter = (object)array(
@@ -438,11 +502,174 @@ class SchedulerTest extends \MailPoetTest {
->equals('2017-01-01 13:01:00');
}
+ function testItCreatesScheduledAutomaticEmailSendingTaskForUser() {
+ $newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC);
+ $this->_createNewsletterOptions(
+ $newsletter->id,
+ Newsletter::TYPE_AUTOMATIC,
+ array(
+ 'sendTo' => 'user',
+ 'afterTimeType' => 'hours',
+ 'afterTimeNumber' => 2
+ )
+ );
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_AUTOMATIC)->findOne($newsletter->id);
+ $subscriber = Subscriber::create();
+ $subscriber->hydrate(Fixtures::get('subscriber_template'));
+ $subscriber->save();
+
+ Scheduler::createAutomaticEmailSendingTask($newsletter, $subscriber->id, $meta = null);
+ // new scheduled task should be created
+ $task = SendingTask::getByNewsletterId($newsletter->id);
+ $current_time = Carbon::createFromTimestamp(current_time('timestamp'));
+ expect($task->id)->greaterOrEquals(1);
+ expect($task->priority)->equals(SendingQueue::PRIORITY_MEDIUM);
+ expect($task->status)->equals(SendingQueue::STATUS_SCHEDULED);
+ expect(Carbon::parse($task->scheduled_at)->format('Y-m-d H:i'))
+ ->equals($current_time->addHours(2)->format('Y-m-d H:i'));
+ // task should have 1 associated user
+ $subscribers = $task->subscribers()->findMany();
+ expect($subscribers)->count(1);
+ expect($subscribers[0]->id)->equals($subscriber->id);
+ }
+
+ function testItAddsMetaToSendingQueueWhenCreatingAutomaticEmailSendingTask() {
+ $newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC);
+ $this->_createNewsletterOptions(
+ $newsletter->id,
+ Newsletter::TYPE_AUTOMATIC,
+ array(
+ 'sendTo' => 'user',
+ 'afterTimeType' => 'hours',
+ 'afterTimeNumber' => 2
+ )
+ );
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_AUTOMATIC)->findOne($newsletter->id);
+ $subscriber = Subscriber::create();
+ $subscriber->hydrate(Fixtures::get('subscriber_template'));
+ $subscriber->save();
+ $meta = array('some' => 'value');
+
+ Scheduler::createAutomaticEmailSendingTask($newsletter, $subscriber->id, $meta);
+ // new queue record should be created with meta data
+ $queue = SendingQueue::where('newsletter_id', $newsletter->id)->findOne();
+ expect($queue->getMeta())->equals($meta);
+ }
+
+ function testItCreatesAutomaticEmailSendingTaskForSegment() {
+ $newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC);
+ $this->_createNewsletterOptions(
+ $newsletter->id,
+ Newsletter::TYPE_AUTOMATIC,
+ array(
+ 'sendTo' => 'segment',
+ 'afterTimeType' => 'hours',
+ 'afterTimeNumber' => 2
+ )
+ );
+ $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_AUTOMATIC)->findOne($newsletter->id);
+
+ Scheduler::createAutomaticEmailSendingTask($newsletter, $subscriber = null, $meta = null);
+ // new scheduled task should be created
+ $task = SendingTask::getByNewsletterId($newsletter->id);
+ $current_time = Carbon::createFromTimestamp(current_time('timestamp'));
+ expect($task->id)->greaterOrEquals(1);
+ expect($task->priority)->equals(SendingQueue::PRIORITY_MEDIUM);
+ expect($task->status)->equals(SendingQueue::STATUS_SCHEDULED);
+ expect(Carbon::parse($task->scheduled_at)->format('Y-m-d H:i'))
+ ->equals($current_time->addHours(2)->format('Y-m-d H:i'));
+ // task should not have any subscribers
+ $subscribers = $task->subscribers()->findMany();
+ expect($subscribers)->count(0);
+ }
+
+ function testItDoesNotScheduleAutomaticEmailWhenGroupDoesNotMatch() {
+ $newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC);
+ $this->_createNewsletterOptions(
+ $newsletter->id,
+ Newsletter::TYPE_AUTOMATIC,
+ array(
+ 'group' => 'some_group',
+ 'event' => 'some_event',
+ 'sendTo' => 'user',
+ 'afterTimeType' => 'hours',
+ 'afterTimeNumber' => 2
+ )
+ );
+
+ // email should not be scheduled when group is not matched
+ Scheduler::scheduleAutomaticEmail('group_does_not_exist', 'some_event');
+ expect(SendingQueue::findMany())->count(0);
+ }
+
+ function testItDoesNotScheduleAutomaticEmailWhenEventDoesNotMatch() {
+ $newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC);
+ $this->_createNewsletterOptions(
+ $newsletter->id,
+ Newsletter::TYPE_AUTOMATIC,
+ array(
+ 'group' => 'some_group',
+ 'event' => 'some_event',
+ 'sendTo' => 'user',
+ 'afterTimeType' => 'hours',
+ 'afterTimeNumber' => 2
+ )
+ );
+
+ // email should not be scheduled when event is not matched
+ Scheduler::scheduleAutomaticEmail('some_group', 'event_does_not_exist');
+ expect(SendingQueue::findMany())->count(0);
+ }
+
+ function testItSchedulesAutomaticEmailWhenConditionMatches() {
+ $newsletter_1 = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC);
+ $this->_createNewsletterOptions(
+ $newsletter_1->id,
+ Newsletter::TYPE_AUTOMATIC,
+ array(
+ 'group' => 'some_group',
+ 'event' => 'some_event',
+ 'sendTo' => 'user',
+ 'afterTimeType' => 'hours',
+ 'afterTimeNumber' => 2
+ )
+ );
+ $newsletter_2 = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC);
+ $this->_createNewsletterOptions(
+ $newsletter_2->id,
+ Newsletter::TYPE_AUTOMATIC,
+ array(
+ 'group' => 'some_group',
+ 'event' => 'some_event',
+ 'sendTo' => 'segment',
+ 'afterTimeType' => 'hours',
+ 'afterTimeNumber' => 2
+ )
+ );
+ $condition = function($email) {
+ return $email->sendTo === 'segment';
+ };
+
+ // email should only be scheduled if it matches condition ("send to segment")
+ Scheduler::scheduleAutomaticEmail('some_group', 'some_event', $condition);
+ $result = SendingQueue::findMany();
+ expect($result)->count(1);
+ expect($result[0]->newsletter_id)->equals($newsletter_2->id);
+ // scheduled task should be created
+ $task = $result[0]->getTasks()->findOne();
+ $current_time = Carbon::createFromTimestamp(current_time('timestamp'));
+ expect($task->id)->greaterOrEquals(1);
+ expect($task->priority)->equals(SendingQueue::PRIORITY_MEDIUM);
+ expect($task->status)->equals(SendingQueue::STATUS_SCHEDULED);
+ expect(Carbon::parse($task->scheduled_at)->format('Y-m-d H:i'))
+ ->equals($current_time->addHours(2)->format('Y-m-d H:i'));
+ }
+
function testUnsearchablePostTypeDoesNotSchedulePostNotification() {
$hook = new Hooks;
-
+
$newsletter = $this->_createNewsletter(Newsletter::TYPE_NOTIFICATION);
-
+
$this->_createNewsletterOptions(
$newsletter->id,
Newsletter::TYPE_NOTIFICATION,
@@ -451,33 +678,33 @@ class SchedulerTest extends \MailPoetTest {
'schedule' => '* * * * *'
)
);
-
+
$this->_removePostNotificationHooks();
register_post_type('post', array('exclude_from_search' => true));
$hook->setupPostNotifications();
-
+
$post_data = array(
'post_title' => 'title',
'post_status' => 'publish',
);
wp_insert_post($post_data);
-
+
$queue = SendingQueue::findTaskByNewsletterId($newsletter->id)->findOne();
expect($queue)->equals(false);
-
+
$this->_removePostNotificationHooks();
register_post_type('post', array('exclude_from_search' => false));
$hook->setupPostNotifications();
-
+
wp_insert_post($post_data);
-
+
$queue = SendingQueue::findTaskByNewsletterId($newsletter->id)->findOne();
expect($queue)->notequals(false);
}
-
+
function testSchedulerWontRunIfUnsentNotificationHistoryExists() {
$newsletter = $this->_createNewsletter(Newsletter::TYPE_NOTIFICATION);
-
+
$this->_createNewsletterOptions(
$newsletter->id,
Newsletter::TYPE_NOTIFICATION,
@@ -486,22 +713,22 @@ class SchedulerTest extends \MailPoetTest {
'schedule' => '* * * * *'
)
);
-
+
$notification_history = Newsletter::create();
$notification_history->type = Newsletter::TYPE_NOTIFICATION_HISTORY;
$notification_history->status = Newsletter::STATUS_SENDING;
$notification_history->parent_id = $newsletter->id;
$notification_history->save();
-
+
$post_data = array(
'post_title' => 'title',
'post_status' => 'publish',
);
wp_insert_post($post_data);
-
+
$queue = SendingQueue::findTaskByNewsletterId($newsletter->id)->findOne();
expect($queue)->equals(false);
- }
+ }
function _createQueue(
$newsletter_id,
@@ -531,11 +758,14 @@ class SchedulerTest extends \MailPoetTest {
function _createNewsletterOptions($newsletter_id, $newsletter_type, $options) {
foreach($options as $option => $value) {
- $newsletter_option_field = NewsletterOptionField::create();
- $newsletter_option_field->name = $option;
- $newsletter_option_field->newsletter_type = $newsletter_type;
- $newsletter_option_field->save();
- expect($newsletter_option_field->getErrors())->false();
+ $newsletter_option_field = NewsletterOptionField::where('name', $option)->findOne();
+ if(!$newsletter_option_field) {
+ $newsletter_option_field = NewsletterOptionField::create();
+ $newsletter_option_field->name = $option;
+ $newsletter_option_field->newsletter_type = $newsletter_type;
+ $newsletter_option_field->save();
+ expect($newsletter_option_field->getErrors())->false();
+ }
$newsletter_option = NewsletterOption::create();
$newsletter_option->option_field_id = $newsletter_option_field->id;
@@ -562,6 +792,8 @@ class SchedulerTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterPost::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
+ \ORM::raw_execute('TRUNCATE ' . ScheduledTaskSubscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
+ \ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
}
-}
\ No newline at end of file
+}
diff --git a/tests/unit/Router/Endpoints/ViewInBrowserTest.php b/tests/unit/Router/Endpoints/ViewInBrowserTest.php
index 849588b559..3fb9c41c9b 100644
--- a/tests/unit/Router/Endpoints/ViewInBrowserTest.php
+++ b/tests/unit/Router/Endpoints/ViewInBrowserTest.php
@@ -2,7 +2,8 @@
namespace MailPoet\Test\Router\Endpoints;
-use Codeception\Util\Stub;
+use Codeception\Stub;
+use Codeception\Stub\Expected;
use MailPoet\Config\AccessControl;
use MailPoet\Models\Newsletter;
use MailPoet\Models\ScheduledTask;
@@ -43,7 +44,7 @@ class ViewInBrowserTest extends \MailPoetTest {
function testItAbortsWhenBrowserPreviewDataIsMissing() {
$view_in_browser = Stub::make($this->view_in_browser, array(
- '_abort' => Stub::exactly(2)
+ '_abort' => Expected::exactly(2)
), $this);
// newsletter ID is required
$data = $this->browser_preview_data;
@@ -57,7 +58,7 @@ class ViewInBrowserTest extends \MailPoetTest {
function testItAbortsWhenBrowserPreviewDataIsInvalid() {
$view_in_browser = Stub::make($this->view_in_browser, array(
- '_abort' => Stub::exactly(3)
+ '_abort' => Expected::exactly(3)
), $this);
// newsletter ID is invalid
$data = $this->browser_preview_data;
@@ -200,7 +201,7 @@ class ViewInBrowserTest extends \MailPoetTest {
function testItReturnsViewActionResult() {
$view_in_browser = Stub::make($this->view_in_browser, array(
- '_displayNewsletter' => Stub::exactly(1)
+ '_displayNewsletter' => Expected::exactly(1)
), $this);
$view_in_browser->data = $view_in_browser->_processBrowserPreviewData($this->browser_preview_data);
$view_in_browser->view();
diff --git a/tests/unit/Router/RouterTest.php b/tests/unit/Router/RouterTest.php
index c449cdcd36..85a415e8a8 100644
--- a/tests/unit/Router/RouterTest.php
+++ b/tests/unit/Router/RouterTest.php
@@ -2,7 +2,8 @@
namespace MailPoet\Test\Router;
-use Codeception\Util\Stub;
+use Codeception\Stub;
+use Codeception\Stub\Expected;
use MailPoet\Config\AccessControl;
use MailPoet\Router\Router;
@@ -103,7 +104,7 @@ class RouterTest extends \MailPoetTest {
$access_control = Stub::make(
new AccessControl(),
array(
- 'validatePermission' => Stub::once(function($cap) {
+ 'validatePermission' => Expected::once(function($cap) {
expect($cap)->equals(AccessControl::PERMISSION_MANAGE_SETTINGS);
return false;
})
@@ -115,7 +116,7 @@ class RouterTest extends \MailPoetTest {
$access_control = Stub::make(
new AccessControl(),
array(
- 'validatePermission' => Stub::once(function($cap) {
+ 'validatePermission' => Expected::once(function($cap) {
expect($cap)->equals(AccessControl::PERMISSION_MANAGE_SETTINGS);
return true;
})
@@ -138,7 +139,7 @@ class RouterTest extends \MailPoetTest {
$access_control = Stub::make(
new AccessControl(),
array(
- 'validatePermission' => Stub::once(function($cap) {
+ 'validatePermission' => Expected::once(function($cap) {
expect($cap)->equals(AccessControl::PERMISSION_MANAGE_SETTINGS);
return false;
})
@@ -150,7 +151,7 @@ class RouterTest extends \MailPoetTest {
$access_control = Stub::make(
new AccessControl(),
array(
- 'validatePermission' => Stub::once(function($cap) {
+ 'validatePermission' => Expected::once(function($cap) {
expect($cap)->equals(AccessControl::PERMISSION_MANAGE_SETTINGS);
return true;
})
diff --git a/tests/unit/Statistics/Track/ClicksTest.php b/tests/unit/Statistics/Track/ClicksTest.php
index 17d7de3418..c528d5c2d7 100644
--- a/tests/unit/Statistics/Track/ClicksTest.php
+++ b/tests/unit/Statistics/Track/ClicksTest.php
@@ -1,7 +1,8 @@
clicks, array(
- 'abort' => Stub::exactly(2)
+ 'abort' => Expected::exactly(2)
), $this);
$data = $this->track_data;
// 1. when tracking data does not exist
@@ -88,7 +89,7 @@ class ClicksTest extends \MailPoetTest {
function testItRedirectsToUrlAfterTracking() {
$clicks = Stub::make($this->clicks, array(
- 'redirectToUrl' => Stub::exactly(1)
+ 'redirectToUrl' => Expected::exactly(1)
), $this);
$clicks->track($this->track_data);
}
@@ -116,7 +117,7 @@ class ClicksTest extends \MailPoetTest {
function testItFailsToConvertsInvalidShortcodeToUrl() {
$clicks = Stub::make($this->clicks, array(
- 'abort' => Stub::exactly(1)
+ 'abort' => Expected::exactly(1)
), $this);
// should call abort() method if shortcode action does not exist
$link = $clicks->processUrl(
diff --git a/tests/unit/Statistics/Track/OpensTest.php b/tests/unit/Statistics/Track/OpensTest.php
index a5c7c66404..1415199d42 100644
--- a/tests/unit/Statistics/Track/OpensTest.php
+++ b/tests/unit/Statistics/Track/OpensTest.php
@@ -1,7 +1,8 @@
opens, array(
- 'returnResponse' => Stub::exactly(1)
+ 'returnResponse' => Expected::exactly(1)
), $this);
$opens->track(false);
expect(StatisticsOpens::findMany())->isEmpty();
@@ -83,7 +84,7 @@ class OpensTest extends \MailPoetTest {
function testItReturnsImageAfterTracking() {
$opens = Stub::make($this->opens, array(
- 'returnResponse' => Stub::exactly(1)
+ 'returnResponse' => Expected::exactly(1)
), $this);
$opens->track($this->track_data);
}
diff --git a/tests/unit/Tasks/SendingTest.php b/tests/unit/Tasks/SendingTest.php
index a8373d7d00..16eaed09ff 100644
--- a/tests/unit/Tasks/SendingTest.php
+++ b/tests/unit/Tasks/SendingTest.php
@@ -176,6 +176,44 @@ class SendingTest extends \MailPoetTest {
expect(SendingTask::getRunningQueues($amount))->count($amount);
}
+ function testItGetsBatchOfRunningQueuesSortedByUpdatedTime() {
+ $this->_after();
+
+ $sending1 = $this->createNewSendingTask(['status' => ScheduledTask::STATUS_SCHEDULED]);
+ $sending1->updated_at = '2017-05-04 14:00:00';
+ $sending1->save();
+ $sending2 = $this->createNewSendingTask(['status' => ScheduledTask::STATUS_SCHEDULED]);
+ $sending2->updated_at = '2017-05-04 16:00:00';
+ $sending2->save();
+ $sending3 = $this->createNewSendingTask(['status' => ScheduledTask::STATUS_SCHEDULED]);
+ $sending3->updated_at = '2017-05-04 15:00:00';
+ $sending3->save();
+
+ $queues = SendingTask::getScheduledQueues(3);
+ expect($queues[0]->task_id)->equals($sending1->id());
+ expect($queues[1]->task_id)->equals($sending3->id());
+ expect($queues[2]->task_id)->equals($sending2->id());
+ }
+
+ function testItGetsBatchOfScheduledQueuesSortedByUpdatedTime() {
+ $this->_after();
+
+ $sending1 = $this->createNewSendingTask(['status' => null]);
+ $sending1->updated_at = '2017-05-04 14:00:00';
+ $sending1->save();
+ $sending2 = $this->createNewSendingTask(['status' => null]);
+ $sending2->updated_at = '2017-05-04 16:00:00';
+ $sending2->save();
+ $sending3 = $this->createNewSendingTask(['status' => null]);
+ $sending3->updated_at = '2017-05-04 15:00:00';
+ $sending3->save();
+
+ $queues = SendingTask::getRunningQueues(3);
+ expect($queues[0]->task_id)->equals($sending1->id());
+ expect($queues[1]->task_id)->equals($sending3->id());
+ expect($queues[2]->task_id)->equals($sending2->id());
+ }
+
function createNewNewsletter() {
$newsletter = Newsletter::create();
$newsletter->type = Newsletter::TYPE_STANDARD;
diff --git a/tests/unit/Util/PQueryTest.php b/tests/unit/Util/PQueryTest.php
new file mode 100644
index 0000000000..64f5ee26fc
--- /dev/null
+++ b/tests/unit/Util/PQueryTest.php
@@ -0,0 +1,65 @@
+';
+ $domnode = pQuery::parseStr($html);
+ $inner_text = $domnode->getInnerText();
+ expect($inner_text)->equals("");
+ }
+
+ function testQuotesAreCorrectlyEscaped() {
+ $html_characters = ['"', '"', '''];
+
+ foreach($html_characters as $char) {
+ $this->parseTest($char);
+ }
+ }
+
+ function testEncodedHtmlNamesAreDecoded() {
+ $html_names = ['&', '<', '>', ' ', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '¬', '', '®', '¯', '°', '±', '²', '³', '´', 'µ', '¶', '·', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ', 'ÿ'];
+
+ foreach($html_names as $char) {
+ $this->parseTest($char, $equals = false);
+ }
+ }
+
+ function testEncodedHtmlNumbersAreDecoded() {
+ // Tested numbers are from https://www.ascii.cl/htmlcodes.htm
+ $html_numbers = array_merge(range(40, 126), range(160, 255), [32, 33, 35, 36, 37, 38, 338, 339, 352, 353, 376, 402, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8364, 8482]);
+
+ foreach($html_numbers as $char) {
+ $this->parseTest(''.$char.';', $equals = false);
+ }
+ }
+
+ function testItCanParseRealHtmlSnippets() {
+ $snippets = [
+ '',
+ ' | ',
+ '
',
+ 'read full post | ',
+ 'KIZOMBA SUR, el último evento del verano que no te debes perder 🌞 Aprovecha ahora esta oferta limitada y llama ➡️➡️+34 660 144 954 |
',
+ ' | ',
+ '
',
+ ' Meer lezen | ',
+ 'Les petits Bollandistes : vies des Saints de l\'Acien et du Nouveau Testament, des Martyrs, des Pères, des Auteurs sacrés et ecclésiastiques (17 Volumes). Supplément aux vies des saints et spécialement aux Petits bollandistes : d\'après les documents hagiographiques les plus authentiques et les plus récents (3 volumes). (Complete Set, 20 volumes)
',
+ ];
+
+ foreach($snippets as $snippet) {
+ $this->parseTest($snippet);
+ }
+ }
+
+ function parseTest($html, $equals = true) {
+ $parsed_html = pQuery::parseStr($html)->getInnerText();
+ if($equals) {
+ expect($parsed_html)->equals($html);
+ } else {
+ expect($parsed_html)->notEquals($html);
+ }
+ }
+}
diff --git a/tests/unit/WP/FunctionsTest.php b/tests/unit/WP/FunctionsTest.php
new file mode 100644
index 0000000000..684360674e
--- /dev/null
+++ b/tests/unit/WP/FunctionsTest.php
@@ -0,0 +1,63 @@
+_content_width = $content_width;
+ $content_width = 150;
+ }
+
+ function makeAttachment($upload, $parent_post_id = 0) {
+ $type = '';
+ if(!empty($upload['type'])) {
+ $type = $upload['type'];
+ } else {
+ $mime = wp_check_filetype($upload['file']);
+ if ($mime)
+ $type = $mime['type'];
+ }
+
+ $attachment = array(
+ 'post_title' => basename($upload['file']),
+ 'post_content' => '',
+ 'post_type' => 'attachment',
+ 'post_parent' => $parent_post_id,
+ 'post_mime_type' => $type,
+ 'guid' => $upload['url'],
+ );
+
+ // Save the data
+ $id = wp_insert_attachment($attachment, $upload['file'], $parent_post_id);
+ $metadata = wp_generate_attachment_metadata($id, $upload['file']);
+ wp_update_attachment_metadata($id, $metadata);
+
+ return $this->ids[] = $id;
+ }
+
+ function testItCanGetImageInfo() {
+ expect(
+ function_exists('wp_generate_attachment_metadata')
+ )->true();
+
+ $filename = 'tests/_data/test-image.jpg';
+ $contents = file_get_contents($filename);
+
+ $upload = wp_upload_bits(basename($filename), null, $contents);
+ $id = $this->makeAttachment($upload);
+ expect($id)->notEmpty();
+
+ $image = WPFunctions::getImageInfo($id);
+ expect($image[1])->equals(Env::NEWSLETTER_CONTENT_WIDTH);
+
+ wp_delete_attachment($id, $force_delete = true);
+ }
+
+ function _after() {
+ global $content_width;
+ $content_width = $this->_content_width;
+ }
+}
diff --git a/views/deactivationSurvey/css.html b/views/deactivationSurvey/css.html
new file mode 100644
index 0000000000..3c11057df9
--- /dev/null
+++ b/views/deactivationSurvey/css.html
@@ -0,0 +1,34 @@
+
diff --git a/views/deactivationSurvey/index.html b/views/deactivationSurvey/index.html
new file mode 100644
index 0000000000..2e22919d2f
--- /dev/null
+++ b/views/deactivationSurvey/index.html
@@ -0,0 +1,11 @@
+
diff --git a/views/deactivationSurvey/js.html b/views/deactivationSurvey/js.html
new file mode 100644
index 0000000000..64c8921592
--- /dev/null
+++ b/views/deactivationSurvey/js.html
@@ -0,0 +1,27 @@
+
diff --git a/views/form/widget.html b/views/form/widget.html
index 14e84d3777..af259c5d60 100644
--- a/views/form/widget.html
+++ b/views/form/widget.html
@@ -4,7 +4,7 @@
<% if(title) %>
<%= before_title | raw %><%= title | raw %><%= after_title | raw %>
<% endif %>
-
+